• OJ练习48——T15 3Sum


    找一列整数中和为0的三个数,要求返回结果按序排列,且返回的序列之间互不相同。例如:

    array S = {-1 0 1 2 -1 -4},
    A solution set is:
    (-1, 0, 1)    (-1, -1, 2)

    【思路】

    (看来的,自己真是没有一点算法头脑)

    对于每一个当前数,用2sum算法求剩下的两个数和为当前数相反数。3sum退化成2sum问题。

    由于题目不要求返回原序列的序号,所以可以用2sum的先排序再双指针向中遍历的算法。

    【other code】

    vector<vector<int>> threeSum(vector<int>& num) {
            vector<vector<int> > ret;
            ret.clear();
            sort(num.begin(),num.end());//soga!!
            for(int i=0; i!=num.size();i++){
                if(i > 0 && num[i]==num[i-1])
                    continue;//duplicate triplets
                int j,k;
                j=i+1;
                k=num.size()-1;
                while(j<k){
                    if(j>i+1&&num[j]==num[j-1]){ 
                        j++;
                        continue;
                    }
                    if(k<num.size()-1&& num[k]==num[k+1]){
                        k--;
                        continue;
                    }
                     int sum = num[i] + num[j] + num[k];
                    if(sum>0){
                        k--;
                    }else if(sum<0){
                        j++;
                    }else{
                        vector<int> tmp;
                        tmp.push_back(num[i]);
                        tmp.push_back(num[j]);
                        tmp.push_back(num[k]);
                        ret.push_back(tmp);
                        j++;
                    }
                }
            }
            return ret;
        } 

    【总结】

    因为序列中有重复的数字所以要去除重复,j和k是双指针向中搜索。

    可能会奇怪,如果忽略了重复的数,(-1,-1,2)的情况怎么办。

    于是我分步调试了一下= =

    i指向-1时,j=i+1,指向-1,这样就不会漏掉三个数中两个数相同的情况了。O(∩_∩)O~~

    另外,stl的sort函数应该是快排吧,时间是O(nlogn)。有库函数很方便,还以为要自己手动写了……懒癌。

    【后记】

    虽然耗费了一上午的时间,但总结了T1的2sum,看了编程之美2.12节相关解释,还是有点收获的。

  • 相关阅读:
    第三章:Hadoop简介及配置Hadoop-1.2.1,hbase-0.94.13集群
    maven环境的搭建,lemon-OA办公系统的搭建
    如何打开mo文件并修改 PoEdit
    安装Elastix-2.4版本
    RabbitMQ安装
    Yum编译安装Error Downloading Packages报错
    linux:ping不通www.baidu.com
    tar命令解压缩出错
    PV、UV
    使用存储过程创建数据
  • 原文地址:https://www.cnblogs.com/ketchups-notes/p/4496872.html
Copyright © 2020-2023  润新知