java LeetCode 3sum

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

猜你喜欢

转载自blog.csdn.net/scarletteshu/article/details/79489731