zoukankan      html  css  js  c++  java
  • 双指针求 3个数和 为0的 数

    题目描述
    给出一个有n个元素的数组S,S中是否有元素a,b,c满足a+b+c=0?找出数组S中所有满足条件的三元组。
    注意:
    三元组(a、b、c)中的元素必须按非降序排列。(即a≤b≤c)
    解集中不能包含重复的三元组。
    例如,给定的数组 S = {-10 0 10 20 -10 -40},解集为(-10, 0, 10) (-10, -10, 20)

    示例1
    输入
    复制
    [-2,0,1,1,2]
    返回值
    复制
    [[-2,0,2],[-2,1,1]]

    
    class Solution {
    public:
        vector<vector<int> > threeSum(vector<int> &num) {
            
            vector<vector<int>> res;
            if(num.size() <3) return res;
            sort(num.begin(), num.end());
            
            for(int i=0;i<num.size()-2;++i) {
                int j=i+1, k = num.size()-1, target = -num[i];
                while(j<k) {
                    if(num[j]+num[k]> target) --k;
                    else if(num[j]+ num[k]< target) ++j;
                    else {
                        //如果等于0
                        vector<int> t = {num[i],num[j],num[k]};
                        res.push_back(t);
                        //push 进来之后
                        while(j+1<k && num[j+1] == num[j])++j;
                        while(k-1>j && num[k-1] == num[k]) --k;
                        ++j,--k;
                    }
                }
                while(i+1<num.size()-2 && num[i+1]==num[i]) ++i;
            }
            return res;
        }
    };
    
    
  • 相关阅读:
    []Xcode中的iOS模拟器
    飞凌百套OK335xS-2开发平台免费申请
    FastDFS整合Nginx
    阿里云服务器Centos7安装FastDFS(一)
    进程调度
    Tomcat一
    SpringBoot初探
    Java中的日志框架
    JVM类加载之创建对象的过程
    JVM类加载机制二
  • 原文地址:https://www.cnblogs.com/lyr-2000/p/14067060.html
Copyright © 2011-2022 走看看