随笔 - 40  文章 - 0  评论 - 0  阅读 - 1190

【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.由单个字符重复的最长子字符串
线段树应用,先放着。

posted on   damnglamour  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示