题解 | #牛牛的三元组问题#

牛牛的三元组问题

https://www.nowcoder.com/practice/72c6d735fb1144a2ba162976a4510839

1.考察知识点

数组、双指针

2.编程语言

C++

3.解题思路

该题为三数之和问题,针对三数之和问题,首先将数组进行排序;

然后,使用双指针方法,分别定义i,j,k三个指针,分别指向3个数字

按照数组顺序取第一个数字位置为i,第二个数字从i+1位置向后寻找,第三个数字从末尾向前遍历寻找

共有三种情况nums[i]+nums[j]+nums[k]==0,直接将i,j,k添加到返回数组中

nums[i]+nums[j]+nums[k]>0,k--

nums[i]+nums[j]+nums[k]<0,j--

分析重复情况,实现去重操作。

当i>0 && nums[i]==nums[i-1]时,跳过nums[i]

当k<n-1 && nums[k]==nums[k+1]时,跳过nums[k], k-1以后继续进行遍历

4.完整代码

#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> > findTriplets(vector<int>& nums) {
        vector<vector<int>> res;
        // write code here
        int n = nums.size();
        sort(nums.begin(),nums.end());
        //取第一个数字
        for(int i=0;i<n-2;i++)
        {
            //去除重复的第一个元素
            if(i>0 && nums[i]==nums[i-1])
            {
                continue;
            }
            //第二个元素每次从i+1向后寻找
            int j = i+1;
            //第三个元素从n-1向前寻找
            int k = n-1;
            //结束条件
            while(j<k)
            {
                
                //去除重复的元素
                if(k<n-1 && nums[k]==nums[k+1])
                {
                    k--;
                    continue;
                }
                //找到以后添加到res二维数组中
                if(nums[i]+nums[j]+nums[k]==0)
                {
                    vector<int> tmp;
                    tmp.push_back(nums[i]);
                    tmp.push_back(nums[j]);
                    tmp.push_back(nums[k]);
                    res.push_back(tmp);
                    j++;
                    k--;
                }
                //如果和大于0,最大值减小
                if (nums[i]+nums[j]+nums[k]>0){
                    k--;
                }
                //如果和小于0,最小值增大
                if (nums[i]+nums[j]+nums[k]<0){
                    j++;
                }
            }
        }
        return res;  
    }
};

全部评论

相关推荐

11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务