ARTS 第二周

什么是ARTS:

  • Algorithm。主要是为了编程训练和学习。每周至少做一个 leetcode 的算法题(先从Easy开始,然后再Medium,最后才Hard)。进行编程训练,如果不训练你看再多的算法书,你依然不会做算法题,看完书后,你需要训练。
  • Review:主要是为了学习英文,如果你的英文不行,你基本上无缘技术高手。所以,需要阅读并点评至少一篇英文技术文章,
  • Tip:主要是为了总结和归纳你在是常工作中所遇到的知识点。学习至少一个技术技巧。你在工作中遇到的问题,踩过的坑,学习的点滴知识。
  • Share:主要是为了建立你的影响力,能够输出价值观。分享一篇有观点和思考的技术文章。这就是ARTS的全部动机。

编程并非一日之功,源于兴趣,亦成于兴趣。只要选对确的方法去努力一定能看到效果。不必超于常人,你只需和常人一般便已非凡

Algorithm(算法)

题目:

给定两个数组,编写一个函数来计算它们的交集。

示例 1:

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]

示例 2:

输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [4,9]

说明:

输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。

我们可以不考虑输出结果的顺序。

进阶:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
  • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

解法1:

public int[] f(int[] nums1, int[] nums2) {
//临界点的判断 其中一个为空或者长度为0 则另一个不为空则返回另一个
//新数组的大小 既然是两个数组的交集 那么新数组的大小一定 小于或等于最小的数组的大小 节省内存的申请
int length = 0;
if (nums1.length < nums1.length) {
length = nums1.length;
} else {
length = nums2.length;
}
int result[] = new int[length];
int k = 0;
for (int i = 0; i < length; i++) {
if (nums1.length < nums2.length) {
int i1 = nums1[i];
for (int j = 0; j < nums2.length; j++) {
int i2 = nums2[j];
if (i1 == i2) {
result[k] = i1;
k++;
break;
}
}
} else {
int i1 = nums2[i];
for (int j = 0; j < nums1.length; j++) {
int i2 = nums1[j];
if (i1 == i2) {
result[k] = i1;
k++;
break;
}
}
}
}
return result;
}

Review(英文技术文章)

最近关于996的热议问题,来看国外的程序员是如何想的
为什么我们每周都要工作32小时)

Tip(技巧)

推荐一个Google浏览器非常好用的工具:FE

image.png

Share

关于PageView 每次进入页面,重新渲染的问题
PageView

      ///     PageView 每次进入页面都会 重新渲染view
// PageView(
// controller: _controller,
// children: <Widget>[
// //page的页面
// HomePage(),
// SearchPage(
// hideLeft: true,
// ),
// TravelPage(),
// MinePage(),
// ],
// onPageChanged: (int index) {
// //滑动page的监听
// setState(() {
// //改变tab状态
// _controllerIndex = index;
// });
// },
// ),

改成 IndexedStack 来进行判断显示哪个页面

IndexedStack(
children: <Widget>[
//page的页面
HomePage(),
SearchPage(
hideLeft: true,
),
TravelPage(),
MinePage(),
],
index: _controllerIndex,
),

或者 实现AutomaticKeepAliveClientMixinclass _TabNavigatorState extends State<TabNavigator> with AutomaticKeepAliveClientMixin

然后设置 就不会重新渲染界面了

@override
// implement wantKeepAlive true 不会重新渲染界面
bool get wantKeepAlive => true;

文章作者: JakePrim
文章链接: https://jakeprim.cn/2019/04/21/arts-2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JakePrim技术研究院
打赏