LeetCode 2100适合打劫银行的日子[ 动态规划] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 2100适合打劫银行的日子[ 动态规划] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

解题思路:
好久没遇到动态规划的题目了,当然这道题目并不是纯粹的动态规划,反而有种贪心的味道。只需要从左往右和从右往左遍历一遍,把所有点左边和右边的最长序列长度记录下来,这样再一次遍历,判断其左右time日子里是否符合题中要求即可,代码如下:

class Solution 
public:
    vector<int> goodDaysToRobBank(vector<int>& security, int time) 
        vector<int> ans;
        int n = security.size();
        if(n <= time * 2) return ans;
        vector<int> left(n), right(n);
        // 记录从左往右每个位置所处的最长序列
        for(int i = 1; i < n; i ++) 
            if(security[i] <= security[i - 1]) 
                left[i] = left[i - 1] + 1;
            
        
        // 记录从右往左每个位置所处的最长序列
        for(int i = n - 2; i >= 0; i --) 
            if(security[i] <= security[i + 1]) 
                right[i] = right[i + 1] + 1;
            
        
        for(int i = 0; i < n; i ++) 
            if(right[i] >= time && left[i] >= time) 
                ans.push_back(i);
            
        
        return ans;
    
;

以上是关于LeetCode 2100适合打劫银行的日子[ 动态规划] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

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

学习算法思想一

学习算法思想一

学习算法思想一

将房子卖了五百万,存在银行,靠利息能过日子吗?

LeetCode 337. 打家劫舍 III