【leetcode】18.4sum 总结

「问题」
【leetcode】18.4sum 总结_第1张图片
「思路」
同3sum,只是多加了一个循环。
首先将数组排序。通过两个循环遍历整个数组,确定结果的前两个数。用target减去前两个数得到后面两个数的和mid。通过夹击的方法求得后面两个数的和sum,对比sum和mid的大小,如果相等的话则返回结果,如果sum>mid则back指针向前移,如果sum则front指针向后移。最后将ret结果排序去重。
「结果」
Runtime: 22 ms
【leetcode】18.4sum 总结_第2张图片
「代码」

vector<vector<int>> fourSum(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        int n=nums.size();
        vector<vector<int>>ret;
        vector<int>ans(4);
        for(int i=0;i3;i++)
        {
            for(int j=i+1;j2;j++)
            {
                int mid=target-nums[i]-nums[j];
                int front=j+1;
                int back=n-1;             
                while(frontint sum=nums[front]+nums[back];
                    if(mid==sum)
                    {
                        ans[0]=nums[i];
                        ans[1]=nums[j];
                        ans[2]=nums[front];
                        ans[3]=nums[back];
                        ret.push_back(ans);
                        front++;
                        back--;
                    }
                    else if(mid>sum)
                    {
                        front++;
                    }
                    else
                        back--;
                }
            }
        }
        sort(ret.begin(),ret.end());
        ret.erase(unique(ret.begin(),ret.end()),ret.end());
    return ret;
    }

你可能感兴趣的:(2017-8)