腾讯-技术研究类和数据分析-第二次笔试
第一题
删除两个不同的数
我的思路用,用一个time记录候选值,如果下一个值和time不一致,且在数组中次数出现不为1,time--,如果time已经为0,候选值为当前值,time=1.
#include<algorithm> #include<vector> #include<set> #include<map> #include <iostream> #include <string> using namespace std; int main(){ int n; cin >> n; vector<string>res(n); for (int i = 0; i < n;i++) { int time = 0; int cand = 0;// 当前候选值 int dantime = 0;//vec中count为1的值的个数 int m; cin >> m; vector<int>temp(m); // 输入数组 for (int j = 0; j < m;j++) { cin >> temp[j]; } // 2 2 2 2 3 4 5 6 7 7 应该输出yes // 每次删除两个不同的值,一个当前候选值,一个当前遍历的值(当前的值不能是count 为1的) for (int j = 0; j < m; j++) { if (time == 0)//如果次数已经为0,候选值变成当前值cand = temp[j];,并记录次数time=1 { cand = temp[j]; time = 1; } else if (temp[j] == cand)// 如果该处的值和候选值一致,time++ { time++; } else if (count(temp.begin(), temp.end(), temp[j])==1)// 记录vec中count为1的值的个数 { dantime++; } else{ time--;// 如果当前的值的count不是1,且和候选值不一致,就删除一次time } } if (((dantime & 1) == 0 && (time & 1) == 0) || ((dantime & 1) != 0 && (time & 1) != 0)) { res[i] = "YES"; } else { res[i] = "NO"; } } for (int i = 0; i < n; i++) { if (i!=n-1) { cout << res[i] << endl; } else { cout << res[i]; } } return 0; }