腾讯-技术研究类和数据分析-第二次笔试

第一题

删除两个不同的数

我的思路用,用一个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;

}


#腾讯##笔试题目##数据分析师#
全部评论
1.奇数直接返回NO 2.偶数的话直接判断数组中是否有出现大于数组长度一半的数,有返回NO, 否则YES
点赞 回复 分享
发布于 2019-09-01 22:47
简单来讲就是众数频次小于n/2就输出YES,否则输出NO
点赞 回复 分享
发布于 2019-09-01 22:44
可以参考https://blog.csdn.net/z13653662052/article/details/100188689
点赞 回复 分享
发布于 2019-09-02 09:21
我想问一下是不是只有编程题型啊,还是还有选择这些的
点赞 回复 分享
发布于 2019-09-19 13:58
楼主问一下技术研究类和数据分析岗位,经历了几次面试几次笔试啊?
点赞 回复 分享
发布于 2020-08-20 10:00
想知道题型?都是编程题?
点赞 回复 分享
发布于 2020-08-20 10:03

相关推荐

尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
点赞 9 评论
分享
牛客网
牛客企业服务