版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
- while 操作双指针 替换 双层for循环
-
题目:两个数组取交集 【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; }
- 抽象的问题具体化