LeetCode--18. 4Sum

题目链接:https://leetcode.com/problems/4sum/

这个题目与LeetCode--15. 3Sum何其相似,可以用相似的解法来做,使用双指针法:先固定两个数,再在中间使用双指针法进行搜索。最需要注意的固定两个数的索引范围和双指针的索引范围,一定要抠清楚。代码如下:

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        
        ArrayList<List<Integer>> ret=new  ArrayList<>();
        
        Arrays.sort(nums);
        
        for(int i=0;i+3<nums.length;i++)
        {
            if(i>0 && nums[i]==nums[i-1])
                continue;
            for(int j=nums.length-1;j-3>=i;j--)
            {
                if(j<nums.length-1 && nums[j]==nums[j+1])
                    continue;
                
                int target1=target-(nums[j]+nums[i]);
                int lo=i+1,hi=j-1;
                
                while(lo<hi)
                {
                    if(nums[lo] + nums[hi] == target1)
                    {
                        ret.add(Arrays.asList(nums[i],nums[lo],nums[hi],nums[j]));
                        lo++;
                        hi--;
                        while(lo<hi && nums[lo]==nums[lo-1])
                            lo++;
                        while(lo<hi && nums[hi]==nums[hi+1])
                            hi--;
                    }
                    else if(nums[lo] + nums[hi]<target1)
                        lo++;
                    else
                        hi--;
                }
            }
        }
        return ret;
    }
}

时间复杂度

猜你喜欢

转载自blog.csdn.net/To_be_to_thought/article/details/85919538