文章目录
- 前言
- 1. 游游的you
- 1.1 题目描述
- 1.2 解题思路
- 1.3 代码实现
- 2. 腐烂的苹果
- 2.1 题目描述
- 2.2 解题思路
- 2.3 代码实现
- 3. 孩子们的游戏(圆圈中最后剩下的数)
- 3.1 题目描述
- 3.2 解题思路
- 3.3 代码实现
- 总结
前言
本章内容:游游的you、腐烂的苹果、孩子们的游戏(圆圈中最后剩下的数)。
1. 游游的you
1.1 题目描述
1.2 解题思路
这是一道简单的模拟题,我们只需要找打三个字符中最小的个数n,也就是意味最最多能组成n个you,再用o字符的总数减去这个n,就是剩余的o的个数,如果o的个数小于2,那么就没有意义,如果大于2,比如是2的话,结果就加1,如果是3的话,结果就加2,一次类推,只需要加上剩余o的个数再减一,就是最后的结果。
1.3 代码实现
#include <iostream>
using namespace std;
int main() {int q = 0;cin >> q;while (q--) {int a, b, c;cin >> a >> b >> c;int ret = min(a, min(b, c)) * 2;int t = b - ret / 2;if (t < 2) cout << ret << endl;else cout << ret + t - 1 << endl;}return 0;
}
2. 腐烂的苹果
2.1 题目描述
2.2 解题思路
一道基础的BFS的题目,借助队列将全部符合条件的值进行一次扩展,一直到队列为空结束。
比如先循环一次,将所有符合条件的值入队列,然后从队列中一个一个取数据,进行扩展,将符合条件的结果再入队列,一直到队列为空为止。
2.3 代码实现
class Solution {public:int m, n;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};queue<pair<int, int>> q;bool vis[1001][1001];int ret;void bfs(vector<vector<int> >& grid) {while (!q.empty()) {int sz = q.size();while (sz--) {auto [a, b] = q.front();q.pop();for (int k = 0; k < 4; k++) {int x = a + dx[k], y = b + dy[k];if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1) {grid[x][y] = 2;q.push({x, y});}}}ret++;}}int rotApple(vector<vector<int> >& grid) {
// 第一次进去不算ret = -1;m = grid.size(), n = grid[0].size();for (int i = 0; i < m; i++)for (int j = 0; j < n; j++) {if (grid[i][j] == 2) {q.push({i, j});}}bfs(grid);for (int i = 0; i < m; i++)for (int j = 0; j < n; j++) {if (grid[i][j] == 1) {return -1;}}return ret;}
};};
3. 孩子们的游戏(圆圈中最后剩下的数)
3.1 题目描述
3.2 解题思路
这道题如果不考虑时空复杂度的限制,还是比较好写的,可以使用环形链表或者数组的方式进行解决,但是这个题要求了空间复杂度为O(1),那么这个方法就不行了。我们来通过画图来看一下这个过程:
因此我们不难看出,求有n个人,最后获胜的是谁,实际上就是求有n-1个人最后获胜的是谁,……一直到n为1结束。而其中变化的仅仅只是下标,我们只需要找到删除元素与之前下标的映射关系即可。
这实际上就变成了解决下标映射关系的问题。对于不太理解的小伙伴,可以画图来体会一下其中的过程,这个题我一开始也是没有写出来,还是看了题解并且画图了才勉强理解一些。
对于这个过程不理解的,我强烈建议画图!!!画图!!!画图!!!重要的事情说三遍,而且在草稿本上画图比在电脑上画图方便多了,因此我是十分推荐通过画图来理解这个问题的。
3.3 代码实现
class Solution {public:int LastRemaining_Solution(int n, int m) {int f = 0;for (int i = 2; i <= n; i++) f = (f + m) % i;return f;}
};
总结
又是体会到画图的便捷性的一天……,画图是我们解决困难问题的一个非常强大的帮手,它能帮助我们仔细的观察到问题变化过程中的很多细节,比起我们只用大脑空想强的多。
那么第五天的内容就到此结束了,如果大家发现有什么错误的地方,可以私信或者评论区指出喔。我会继续坚持训练的,希望能与大家共同进步!!!那么本期就到此结束,让我们下期再见!!觉得不错可以点个赞以示鼓励!