1. 程式人生 > >演算法 1.4.15 快速3-sum

演算法 1.4.15 快速3-sum

我只考慮陣列中並未存在重複的元素

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;
	}