题解 | #牛群的标签和#

牛群的标签和

https://www.nowcoder.com/practice/42ae88bedeb74da99813f6150769d07e

知识点

双指针,STL

思路

首先,分析题意,我们需要找到符合和为target的四元组,去重后按照字典序排序。观测到数据范围为5000,所以与其说这题是双指针,不如说是四指针。 对于nums,我们可以使用i,j,k,l四个指针延续地依次指向数组中的数。对于符合:

nums[i]+nums[j]+nums[k]+nums[l]==target

的四元组,我们将其排序后放入set中去重。最后再遍历set,将答案存入vector中并返回。

代码c++

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型vector
     * @param target int整型
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > fourSum(vector<int>& nums, int target) {
        // write code here
        vector<vector<int>>ans;
        set<vector<int>>temp;
        int idx=0;
        int n = nums.size();//n为数组长度 
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                for (int k = j + 1; k < n; k++) {
                    for (int l = k + 1; l < n; l++) {
                        if(nums[i]+nums[j]+nums[k]+nums[l]==target)
                        { // cout<<i<<j<<k<<l<<endl;
                           // cout<<nums[i]+nums[j]+nums[k]+nums[l]<<endl;
                          vector<int>t={nums[i],nums[j],nums[k],nums[l]};
                          sort(t.begin(),t.end());//按字典序排序
                           temp.insert(t);//放入set去重
                        }
                    }
                }
            }
        }
        for(auto v:temp)//遍历 set取出答案
        {
            ans.push_back(v);
        }
        return ans;

    }
};
全部评论

相关推荐

M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务