zoukankan      html  css  js  c++  java
  • LeetCode OJ-- 3Sum **

    https://oj.leetcode.com/problems/3sum/

    在一个数列中,求出所有3个数之和是0的3个数。

    刚开始给自己挖了坑,由于没闹清,unique()函数的含义,去掉重复不彻底,所以一直 output limit Exceeded.

    于是,想新的判断是否重复的方法,这样跳过了一部分之后,再只判断是否,要加入的数据和上一个加入的数据是否相同,就可以了。

     if(i>0 && num[i] == num[i-1])
                    continue;

    class Solution {
    public:
        vector<vector<int> > threeSum(vector<int> &num) {
            vector<vector<int> > ans;
            if(num.size()<3)
                return ans;
    
            sort(num.begin(),num.end());
    
            int k = 0;
    
            for(int i = 0;i<num.size()-2;i++)
            {
                if(i>0 && num[i] == num[i-1])
                    continue;
                int j = i+1;
     
                if(num[i]+num[j]>0)
                    continue;
                k = num.size()-1;
                
                while(j<k)
                {
                if(num[i]+num[j]+num[k] == 0)
                {
                    if(ans.size()==0 || ans.size()>0 && !(num[i]==ans[ans.size()-1][0]&& num[j] ==ans[ans.size()-1][1] ))
                    {
                    vector<int> ansPiece;
                    ansPiece.push_back(num[i]);
                    ansPiece.push_back(num[j]);
                    ansPiece.push_back(num[k]);
                    //remove duplicated
                    /*bool flag = true;
                    for(vector<vector<int> >::iterator it = ans.begin(); it != ans.end(); it++)
                    {
                                if((*it)[0] == ansPiece[0] && (*it)[1] == ansPiece[1] && (*it)[2] == ansPiece[2])
                                {
                                    flag = false;
                                    break;
                                }
                    }
    
                    if(flag)
                        ans.push_back(ansPiece);*/
    
                    ans.push_back(ansPiece);
                    }
                }
                if(num[i]+num[j]+num[k] < 0)
                    j++;
                else
                    k--;
                }
            }
            return ans;
        }
    };
  • 相关阅读:
    Mybatis 内置 Java 类型别名与 typeHandlers
    泛型方法前为什么要加<T>
    jdbcTemplate学习(四)
    jdbcTemplate学习(三)
    jdbcTemplate学习(二)
    jdbcTemplate学习(一)
    博客园markdown toc
    office,ps 等入门教程链接
    mysql 手动加锁测试
    拆机联想ideapad s500
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3803444.html
Copyright © 2011-2022 走看看