[leetcode] 适合打劫银行的日子 -前缀和

Posted PushyTao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode] 适合打劫银行的日子 -前缀和相关的知识,希望对你有一定的参考价值。

题目链接

前缀和思想

用数组 l [ ] l[] l[]表示前面有多少个数满足 a [ i − 1 ] > = a [ i ] a[i-1] >= a[i] a[i1]>=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;
    
;

以上是关于[leetcode] 适合打劫银行的日子 -前缀和的主要内容,如果未能解决你的问题,请参考以下文章

打劫房屋III

家的感觉

LintCode刷题——打劫房屋IIIIII

《LeetCode之每日一题》:267.计算力扣银行的钱

252.LeetCode | 337. 打家劫舍 III

算法leetcode每日一练2125. 银行中的激光束数量