字节跳动9/4笔试讨论

讨论一下字节笔试题目思路,
第一题用的滑动窗口,直接划过去就行
vector<int> mysplit(string& s)
{
	string ks;
	vector<int>ans;
	for (int i = 0;i<s.size();i++)
	{
		if (s[i] != ',')
		{
			ks = ks + s[i];
		}
		else
		{
			ans.push_back(atoi(ks.c_str()));
			ks = "";
		}
	}
	ans.push_back(atoi(ks.c_str()));
	return ans;
}

int main()
{
	int N, mintinus;
	string mys1;
	cin >> mys1;
	vector<int>kkk = mysplit(mys1);
	N = kkk[0];
	mintinus = kkk[1];
	string mys2;
	string mys3;
	cin >> mys2;
	cin >> mys3;
	vector<int>customer = mysplit(mys2);
	vector<int>smile = mysplit(mys3);
	
	
	int left = 0;
	int right = 0;
	int mymax = 0;
	int MAXkk = 0;
	while (right<N&&left <= right)
	{
		if (right - left < mintinus)
		{
			if (smile[right] == 0)
			{
				mymax += customer[right];
			}
			right++;
		}
		else
		{
			if (smile[left] == 0)
			{
				mymax -= customer[left];
			}
			left++;
		}
		MAXkk = max(MAXkk, mymax);
	}
	int sum = 0;

	for (int i = 0; i < N; i++)
	{
		if (smile[i] == 1)
		{
			sum += customer[i];
		}
	}
	sum = sum + MAXkk;
	cout << sum << endl;
	
	system("pause");
	return 0;
}
第二题动态规划,定义一个二维dp,dp[i][j]的含义是在第i行第j列开始向下可以得到的最大分数,最后把dp数组第0行取最大
int main02()
{
	int N, M;
	cin >> N >> M;
	vector<vector<int>>marix(N,vector<int>(M));

	for (int i = 0;i<N;i++)
	{
		for (int j = 0;j<M;j++)
		{
			int a;
			cin >> a;
			marix[i][j] = a;
		}
	}
	int mymax = 0;


		vector<vector<int>>dp(N + 1, vector<int>(M + 1));

		for (int j = 0; j <= M; j++)
		{
			dp[N][j] = 0;
		}
		for (int j = 0; j <= N; j++)
		{
			dp[j][M] = 0;
		}

		for (int curx = N-1;curx>=0;curx--)
		{
			for (int cury = M-1;cury>=0;cury--)
			{
				int sorce = 0;
				if (marix[curx][cury] == -1)
				{
					int num1 = dp[curx + 1][cury + 1];
					int num2 = 0;
					if (cury > 0)
					{
						num2 = dp[curx + 1][cury - 1];
					}
					dp[curx][cury] = max(num1, num2);
				}
				else
				{
					dp[curx][cury] = marix[curx][cury] + dp[curx + 1][cury];
				}
			}
		}

		for (int i = 0; i < M; i++)
		{
			mymax = max(mymax, dp[0][i]);
		}

		
	cout << mymax;
	system("pause");
	return 0;

}

第三题刚开始没有仔细读题,弄错了,题目要求任意ai+aj+ak都能在数组a中找到,我用了一个比较蠢的方法,把数组a放哈希表,枚举三数之和,若结果都可以在哈希表中找到,返回YES,否则返回NO,这个时间会超,希望大佬可以提供一下思路
int main()
{
	int t;
	cin >> t;
	vector<vector<int>>mk;
	//
	for (int i = 0;i<t;i++)
	{
		int a;
		cin >> a;
		vector<int>nums(a);
		for (int j = 0;j<a;j++)
		{
			int k;
			cin >> k;
			nums[j] = k;
		}

		mk.push_back(nums);
	}
	
	for (int i = 0; i < t; i++)
	{
		unordered_map<int, int>myans;
		for (int j = 0;j<mk[i].size();j++)
		{
			auto it = myans.find(mk[i][j]);
			if (it == myans.end())
			{
				myans.insert(pair<int, int>(mk[i][j], 0));
			}
		}
		//枚举三数之和
		bool flag = true;
		for (int k1 = 0; k1 < mk[i].size(); k1++)
		{
			for (int k2 = k1+1; k2 < mk[i].size(); k2++)
			{
				for (int k3 = k2 + 1; k3 < mk[i].size(); k3++)
				{
					int sum = mk[i][k1] + mk[i][k2] + mk[i][k3];
					auto it = myans.find(sum);
					if (it == myans.end())
					{
						flag = false;
						cout << "NO" << endl;
						break;
					}
				}
				if (flag == false)
				{
					break;
				}
			}
			if (flag == false)
			{
				break;
			}
		}
		if (flag == true)
		{
			cout << "YES" << endl;
		}
	}
	return 0;
}
最后一题自己写题太慢,还没写,希望大家讨论一下

#字节跳动##笔试##秋招#
全部评论
题目是,任意3个的和都要在数组中吧,这样有不合适的就直接返回就好了
点赞
送花
回复
分享
发布于 2022-09-04 21:49 广东
第四题暴力就行,我主页贴了代码
点赞
送花
回复
分享
发布于 2022-09-04 22:20 上海
滴滴
校招火热招聘中
官网直投
和大家做的是同一场笔试吗?为啥和大家的题目都不一样。 我的题目: 1. 弹珠游戏,找某个位置落下的最大权值和。 2. 判断对于所有的i、j、k,均存在一个l,使得a[i] + a[j] + a[k] == a[l]。 3. 给你一个字符串,你可以将其中的一些字符更改,这样的操作可以执行m次,且只能在给定可以操作的位置进行操作。 4. 有n个人,总共有m个属性,每个人可以拥有m个属性中的若干个。然后有q次查询,每次查询包含若干个属性和属性状态。属性状态就是拥有这个属性,或者不具有这个属性。然后问每次查询的满足条件的人数。n 1e5, m 100, q 和 q次查询的总属性状态是1e4。
点赞
送花
回复
分享
发布于 2022-09-05 00:42 江苏
判断对于所有的i、j、k,均存在一个l,使得a[i] + a[j] + a[k] == a[l]。 原题: https://codeforces.com/contest/1698/problem/C
点赞
送花
回复
分享
发布于 2022-09-05 00:47 江苏
想问一下关于三数和那道题,我的思路是如果  1.数组里面没有0,如果存在3个或3个以上同正负的数输出NO 2.数组里面有0,如果存在2个或2个以上同正负的数输出NO 3.如果全是0,输出YES 4.数组里面有0,且除0以外,只剩下一个数或者一组互为相反数的两个数,则输出YES,否则输出NO 5.数组里面没有0,且剩下的3个或者4个数满足条件,则输出YES,否则输出NO 不知道为啥过不了,是我哪种情况没有考虑到吗
点赞
送花
回复
分享
发布于 2022-09-05 15:45 天津

相关推荐

3 3 评论
分享
牛客网
牛客企业服务