在c ++中找到数组中所有唯一的三元组,其总和等于零

时间:2015-02-26 04:36:57

标签: c++ c c++11

你好我已经提到了这个程序,并在评论中提到//不要写int main()函数,当我运行这个代码时它会给我错误: - / usr / lib / gcc / x86_64-redhat- linux / 4.4.7 /../../../../ lib64 / crt1.o:在函数_start': (.text+0x20): undefined reference to main'中 collect2:ld返回1退出状态

我写了主要的,但它仍然不会编译请建议任何有关此问题的建议。 Thanx在先进。我编写了如下代码: -

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

class Solution {
public:
    vector<vector<int> > threeSum(vector<int> &num) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        vector<vector<int> > vv;
        if(num.size()<3){
            return vv;
        }

        sort(num.begin(), num.end());
        // In general, we can make the triples unique by the set trick
        // For 3Sum, it is guaranteed by 1, 2, 3
        for(int i = 0; i<num.size()-2; i++){
            if(i>0 && num[i]==num[i-1]){                // 1
                continue;
            }
            // convert 3Sum to 2Sum
            int target = -num[i];
            if(target<0){
                break;
            }
            int j = i+1;
            int k = num.size()-1;
            while(j<k){
                if(num[j]+num[k]==target){
                    vector<int> v;
                    v.push_back(num[i]);
                    v.push_back(num[j]);
                    v.push_back(num[k]);
                    vv.push_back(v);
                }
                if(num[j]+num[k]<=target){


                    // Don't forget ++  


                    while(num[j++]==num[j] && j<k){};   // 2
                }
                else{
                    while(num[k--]==num[k] && k>j){};   // 3
                }
            }
        }
        return vv;
    }
};

1 个答案:

答案 0 :(得分:0)

1-如果你想创建库(构建时间链接或运行时链接),则不需要使用c ++ EntryPoint(我的意思是主要的功能) 但是如果使用想创建可移植的可执行文件,你需要一个项目的入口点,为了构建这个代码,你需要上一版本的g ++来支持c ++ 14,如果你真的想要构建一个运行时库(.so)add -shared选项到g ++命令行