演算法 1.4.15 快速3-sum
阿新 • • 發佈:2019-01-07
我只考慮陣列中並未存在重複的元素
O(N) 只要把陣列全部掃一遍就好了
public static int TwoSumFast2(int[] a){ // O N Arrays.sort(a); int cnt=0; int left = 0, right = a.length-1; while(left<right){ if(a[left]+a[right]==0){ cnt++; left++; } if(a[left]+a[right]>0) right--; if(a[left]+a[right]<0) left++; } return cnt; }
3-sum和2-sum思路一致 O(N^2)
public static int ThreeSumFast2(int[] a){ // N^2 Arrays.sort(a); int N = a.length; int cnt=0; for(int i=0;i<N;i++){ int left = i+1, right=a.length-1; while(left<right){ if(a[left]+a[right]+a[i]==0){ cnt++; left++; } if(a[left]+a[right]+a[i]>0) right--; if(a[left]+a[right]+a[i]<0) left++; } } return cnt; }