腾讯-技术研究类和数据分析-第二次笔试
第一题
删除两个不同的数
我的思路用,用一个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;
}
查看10道真题和解析