深信服9.1笔试

题比较简单,直接上代码
1.准备一个额外空间,,存放比较胜者,直接比较过去,记录比较次数
nt main1()
{
	vector<int>arr;
	int t = 0;
	while (cin>>t)
	{
		arr.push_back(t);
		if (cin.get() == '\n')
		{
			break;
		}
	}
	int k = arr[arr.size() - 1];
	arr.pop_back();
	int left = 1;
	int comnum = arr[0];
	int cnt = 0;
	while (left < arr.size())
	{
		if (comnum > arr[left])
		{
			cnt++;
		}
		else
		{
			cnt = 1;
			comnum = arr[left];
		}
		left++;
		if (cnt == k)
		{
			break;
		}
	}
	string s = to_string(comnum);
	cout << s;
	system("pause");
	return 0;
}
2.最长连续序列********128
int lonest(vector<int>& v)
{
	int res = 0;
	unordered_set<int>rec(v.begin(), v.end());
	for (auto n : rec)
	{
		if (rec.count(n - 1))
		{
			continue;
		}
		int cnt = 1;
		while (rec.count(++n))
		{
			++cnt;
		}
		res = max(res, cnt);
	}
	return res;
}

int main2()
{
	int n;
	cin >> n;
	vector<int>arr;
	while (n--)
	{
		int a;
		cin >> a;
		arr.push_back(a);
	}
	if (arr.size() == 1)
	{
		return arr.size();
	}
	cout << lonest(arr) << endl;
	
	system("pause");
	return 0;
}


3.第三题遍历数组,维护最大值与最小值,当最大值与最小值的差大于2*x,伪装次数加1,最大最小值变为当前遍历值
int main()
{
	int n, x;
	cin >> n >> x;
	vector<int>arr;
	while (n--)
	{
		int a;
		cin >> a;
		arr.push_back(a);
	}
	int res = 0;
	int maxarr = arr[0];
	int minarr = arr[0];
	for (int i = 0; i < arr.size(); i++)
	{
		maxarr = max(maxarr, arr[i]);
		minarr = min(minarr, arr[i]);
		if (maxarr - minarr > 2 * x)
		{
			res++;
			maxarr = arr[i];
			minarr = arr[i];

		}
	}


	cout << res << endl;
	system("pause");
	return 0;
}



#深信服校招##笔试##编程#
全部评论
第二题这么做可以?我以为公差不一定是1而且1 2 6 3 4这样的测试用例答案是2…
点赞 回复 分享
发布于 2022-09-01 21:35 上海
第三题没来得及测,但感觉思路没有问题
点赞 回复 分享
发布于 2022-09-01 21:21 四川

相关推荐

01-22 11:12
郑州大学 Java
点赞 评论 收藏
分享
2024-12-10 20:48
东南大学 Java
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客企业服务