LeetCode 757. Set Intersection Size At Least Two调试程序

此代码为了方便大家调试用,使用的时候直接用自己的Solution类覆盖代码中的类,程序的输入文件路径默认在桌面的data_in.txt,使用的时候直接将LeetCode的case复制进文件即可。如下图所示。

image.png


#include <iostream>
#include <fstream>
#include <string.h>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <stack>
#include <sstream>

using namespace std;

/***************改成自己的代码****************/
class Solution {
public:
    static bool cmp(const vector<int> &a, const vector<int> &b) {
        if(a[1] != b[1]) return a[1] < b[1];
        else return a[0] > b[0];
    }

    int get_num(vector<int> &interval, vector<int> &res) {
        int num = 0;
        for(int i=0; i<res.size(); i++)
            if(res[i]>=interval[0] && res[i]<=interval[1])
                num++;
        return num;
    }

    int intersectionSizeTwo(vector<vector<int> >& intervals) {
        sort(intervals.begin(), intervals.end(), cmp);
        int flog = 1;
        vector<int> res;
        for(int i=0; i<intervals.size(); i++) {
            if(i == 0) {
                res.push_back(intervals[i][1]);
                res.push_back(intervals[i][1]-1);
            }else {
                int num = get_num(intervals[i], res);
                if(num == 0) {
                    res.push_back(intervals[i][1]);
                    res.push_back(intervals[i][1]-1);
                }else if(num == 1)
                    res.push_back(intervals[i][1]);
            }
        }

        return res.size();
    }
};
/***************到此为止****************/


/***************不要修改这些代码****************/

class GetTwoD {
public:
    string line;
    int cur;
    string token;
    GetTwoD(string line): line(line), cur(0) {

    }
    string get_token() {
        string token = "";
        if(cur == line.size()) return token;
        while(cur<line.size() && line[cur]==' ')
            cur++;
        if(line[cur]>='0' && line[cur]<='9') {
            while(cur<line.size() && line[cur]>='0' && line[cur]<='9') {
                token += line[cur];
                cur++;
            }
        }else
            switch(line[cur]) {
            case '[':
                token += "[";
                cur++;
                break;
            case ']':
                token += "]";
                cur++;
                break;
            case ',':
                token += ',';
                cur++;
                break;
            default:
                cout<<"输入样例错误"<<endl;
                exit(1);
                break;
            }
        return token;
    }
    void match(string tk) {
        if(token == tk) {
            token = get_token();
        }else {
            cout<<"输入样例错误"<<endl;
            exit(1);
        }
    }
    vector<int> one_dimension() {
        match("[");
        vector<int> res;
        while(token != "]") {
            res.push_back(atoi(token.c_str()));
            match(token);
            if(token == ",") match(",");
        }
        match("]");
        return res;
    }
    vector<vector<int> > two_dimension() {
        match("[");
        vector<vector<int> > res;
        while(token != "]") {
            res.push_back(one_dimension());
            if(token == ",") match(",");
        }
        match("]");
        return res;
    }
    vector<int> get1_array() {
        token = get_token();
        return one_dimension();
    }

    vector<vector<int> > get2_array() {
        token = get_token();
        return two_dimension();
    }
};

/***************完毕****************/


int main()
{
    //改成自己的输入路径,注意用双斜杠分割 默认输入文件为桌面的data_in.txt
    fstream fin("C:\\Users\\xingxing\\Desktop\\data_in.txt");
    string line;
    Solution solu;
    int kase = 1;
    while(getline(fin, line)) {
        if(line.empty()) continue;
        vector<vector<int> > ints;
        GetTwoD tp(line);
        ints = tp.get2_array();
        cout<<"case"<<kase++<<": "<<endl;
        cout<<solu.intersectionSizeTwo(ints)<<endl;
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注