【2022/03/20-第285场单周赛】复盘
总结
Q1.统计数组中峰和谷的数量
把连续的相同数字合并,然后找峰和谷。
class Solution { public: int countHillValley(vector<int>& nums) { int ret = 0, pre = 0; vector<int> v; for(int i = 0; i < nums.size(); ++i){ if(nums[i] != pre) v.push_back(nums[i]); pre = nums[i]; } for(int i = 1; i < v.size() - 1; ++i){ int l = v[i - 1], r = v[i + 1]; if((v[i] > l && v[i] > r) || (v[i] < l && v[i] < r)) ++ret; } return ret; } };
Q2.统计道路上的碰撞次数
对于L,只要左边有S或者R就必定会撞。
对于R,只要右边有S或者L就必定会撞。
对于S,不计入结果。
class Solution { public: int countCollisions(string s) { int n = s.size(); int rl = 0, rr = 0, rs = 0, ll = 0, ls = 0, lr = 0; for(auto i : s){ if(i == 'L') ++rl; if(i == 'R') ++rr; if(i == 'S') ++rs; } int ret = 0; for(int i = 0; i < n; ++i){ if(s[i] == 'L'){ --rl; ++ll; if(ls + lr > 0) ++ret; } if(s[i] == 'R'){ --rr; ++lr; if(rs + rl > 0) ++ret; } if(s[i] == 'S'){ --rs; ++ls; } } return ret; } };
Q3.射箭比赛中的最大得分
对每个得分位置dfs。
class Solution { public: int mx = 0; void dfs(int index, int rest, int score, vector<int> &ret, vector<int> &temp, vector<int> &alice){ if(index == 0){ if(score > mx){ mx = score; temp[0] = rest; ret = temp; temp[0] = 0; } return ; } if(rest > alice[index]){ temp[index] = alice[index] + 1; dfs(index - 1, rest - alice[index] - 1, score + index, ret, temp, alice); temp[index] = 0; } dfs(index - 1, rest, score, ret, temp, alice); } vector<int> maximumBobPoints(int numArrows, vector<int>& aliceArrows) { vector<int> ret(12, 0), temp(12, 0); dfs(11, numArrows, 0, ret, temp, aliceArrows); return ret; } };
Q4.由单个字符重复的最长子字符串
线段树应用,先放着。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人