16. 最接近的三數之和

注意:從n種情況比較出極值的方法,對於初始值設定可以使用標記特殊處理第一次或者在遍歷前賦一次值。

public int threeSumClosest(int[] nums, int target) {
	        //使用已排序好的數組+雙指針可以簡化問題
		  Arrays.parallelSort(nums);
		  int minDiff=0;
		  int retSum=0;
		  int count=0;
		  for(int i=0;i<nums.length-2;i++) 
		  {
			  int l=i+1;
			  int r=nums.length-1;
			  while(l<r) 
			  {
				  int sum=nums[i]+nums[l]+nums[r];
				  int absDiff=Math.abs(sum-target);
				  if(count==0)//處理第一次進入時的問題
				  {
					  count=1;
					 retSum=sum;
					 minDiff=absDiff;
					 
				  }
				  else
				  {
					  if(sum<target) 
					  {  
						  l++;
						 
						 
					  }
					  else 
					  {
						  r--;
					  }
					  if(absDiff<minDiff) 
					  {
						  minDiff=absDiff;
						  retSum=sum;
						
					  }
				  }
				  
			  }
			  
			  
		  }
		  return retSum;
	    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章