什么是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

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


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