ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

5765. 跳跃游戏 VII

2021-05-23 14:01:39  阅读:173  来源: 互联网

标签:前缀 int VII 区间 maxJump 权值 跳跃 5765 minJump


思路

每次可以选择给定区间的步数进行跳跃,并且要求达到的点权值为0.
考虑一个点能达到,那么要求这个点满足两个要求
1.当前权值为0
2.[i-ma,i-mi]这个区间存在可以跳到的点

第一个条件直接判断即可,第二个条件呢?
我们可以用前缀和保存能到达的点的数量,那么就可以O(1)算出区间中是否有可达到的点就行了

赛中有想到这个做法,不知道怎么脑抽了想着倒序去搞(显然正序才行),然后就hack想法了,果然大早上不如晚上有精神

计算上一个区间的时候要注意边界

class Solution {
public:
    bool canReach(string s, int minJump, int maxJump) {
        int n=s.size();
        vector<int>sum(n+1,0);//前缀和保存可到达的点的数量
        sum[1]=1;
        for(int i=1;i<n;i++){
            int flag=0;
            //计算上一个区间,注意边界处理
            if(s[i]=='0'){
                int l=max(i-maxJump,0),r=i-minJump;
                if(r>=0 && l<=r && sum[r+1]-sum[l]) flag=1;
            }
            sum[i+1]=sum[i]+flag;
        }
        return sum[n]-sum[n-1]; //看点n能不到达到
    }
};

标签:前缀,int,VII,区间,maxJump,权值,跳跃,5765,minJump
来源: https://blog.csdn.net/qq_43563669/article/details/117194491

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有