内功算法之思维套路

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_29857681/article/details/95045733
  1. while 操作双指针 替换 双层for循环
  2. 题目:两个数组取交集 【1,2,3】 和 【2,3,4】 ==》 【2,3】
    
    第一想法就是通过双层for实现,但是时间复杂度为O(n*n)
    
    可以优化
    1. 排序
    Arrays.sort
    2. 比较
    private static List<Integer> intersect(int[] a, int[] b) {
            List<Integer> result = Lists.newArrayList();
    
            if (a == null || b == null) {
                return result;
            }
    
            int i = 0, j = 0;
            while (i < a.length && j < b.length) {
                //去除重复判断
                while (i < a.length - 1 && a[i] == a[i + 1]){
                    i++;
                }
                while (j < b.length - 1 && b[j] == b[j + 1]){
                    j++;
                }
    
                if (a[i] == b[j]) {
                    result.add(a[i]);
                    i++;
                    j++;
    
                    continue;
                }
                if (a[i] > b[j]) {
                    j++;
                }
                if (a[i] < b[j]) {
                    i++;
                }
            }
            return result;
        }
  3. 抽象的问题具体化
  4.  

猜你喜欢

转载自blog.csdn.net/qq_29857681/article/details/95045733