[leetcode] 适合打劫银行的日子 -前缀和
题目链接
前缀和思想
用数组
l
[
]
l[]
l[]表示前面有多少个数满足
a
[
i
−
1
]
>
=
a
[
i
]
a[i-1] >= a[i]
a[i−1]>=a[i]
用数组
r
[
]
r[]
r[]表示前面有多少个数满足
a
[
i
]
<
=
a
[
i
+
1
]
a[i] <= a[i+1]
a[i]<=a[i+1]
O(n)遍历之后得到
l
[
]
,
r
[
]
l[],r[]
l[],r[]
然后O(n)找满足
l
[
i
]
>
=
t
i
m
e
&
&
r
[
i
]
>
=
t
i
m
e
l[i] >= time \ \ \& \& \ \ r[i] >= time
l[i]>=time && r[i]>=time的下标存入
v
e
c
t
o
r
vector
vector并返回
Code:
class Solution {
public:
vector<int> goodDaysToRobBank(vector<int>& security, int time) {
int n = security.size();
vector<int> l(n), r(n);
for(int i=1;i<n;i++) {
if(security[i] <= security[i-1]) l[i] = l[i-1] + 1;
if(security[n-i-1] <= security[n-i]) r[n-i-1] = r[n-i] + 1;
// cout << l[i] << " " << r[i] << endl;
}
vector<int> ans;
for(int i=time;i<n-time;i++) {
if(l[i] >= time && r[i] >= time) ans.push_back(i);
}
return ans;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理