class Solution {
public int BinarySearch(int key,int arr[]) //二分查找
{
int hi=arr.length-1;
int lo=0;
while(lo<=hi)
{
int mid=(lo+hi)/2;
int cmp=key-arr[mid];
if(cmp<0) hi=mid-1;
if(cmp>0) lo=mid+1;
else return mid;
}
return 0;
}
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
Arrays.sort(nums); //数组排序
if(nums.length<3) return list;
for(int i=0;i<nums.length;i++)
for(int j=i+1;j<nums.length;j++)
{
int k;
k=BinarySearch(-nums[i]-nums[j],nums);
if(k>j)
{
List<Integer> li=new ArrayList<Integer>();
li.add(nums[i]);
li.add(nums[j]);
li.add(-nums[i]-nums[j]);
if(!list.contains(li)) //避免重复
list.add(li);
}
}
return list;
}
}
java LeetCode 3sum
猜你喜欢
转载自blog.csdn.net/scarletteshu/article/details/79489731
今日推荐
周排行