首页 > 编程语言 >代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机 55.跳跃游戏 45.跳跃游戏II

代码随想录算法训练营第三十二天 | 122.买卖股票的最佳时机 55.跳跃游戏 45.跳跃游戏II

时间:2024-06-08 21:44:23浏览次数:23  
标签:return 游戏 nums int cover 随想录 跳跃 false size

122.买卖股票的最佳时机II

题目链接 文章讲解 视频讲解

思路:
每次记录当天的股票价格,如果下一天比今天的价钱高那么今天就买,这样保证每一次买股票都是赚的
否则记录下一天的股票,因为下一天的股票比今天的便宜,下一天买比今天买划算

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        if(prices.size() <= 1) return 0;
        // 记录当天的股价
        int cur = prices[0];
        int profit = 0;
        for(int i = 1; i < prices.size(); ++i) {
            // 如果能赚则买入
            if(prices[i] > cur) profit = profit + prices[i] - cur;
            // 否则将当前股价更新为下一天的股价
            cur = prices[i];
        }
        return profit;
    }
};

55.跳跃游戏

题目链接 文章讲解 视频讲解

方法一

如果下一跳比当前值大则更新为下一跳的值
每次循环跳数减一,最后能够到达数组组后一个元素返回true,否则返回false

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int pre = nums[0];
        if(pre == 0 && nums.size() != 1) return false;
        for(int i = 1; i < nums.size(); ++i) {
            if(--pre < nums[i]) pre = nums[i];
            if(pre == 0 && i != nums.size() - 1) return false;
        }
        
        return true;
    }
};

方法二

如果当前覆盖范围加上当前位置能够覆盖整个数组则返回true,否则返回false

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cover = 0;
        if(nums.size() == 1) return false;
        for(int i = 0; i <= cover; ++i) {
            cover = max(cover, nums[i] + i);
            if(cover >= nums.size() - 1) return true;
        }
        
        return false;
    }
};

45.跳跃游戏II

题目链接 文章讲解 视频讲解

思路:cover记录当前覆盖范围,maxCover记录最大覆盖范围
   每当i到达当前范围时,将cover更新为maxCover,步数加一
   如果当前范围覆盖到数组最后一个元素,结束返回步数

class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size() == 1) return 0;
        int cover = 0;
        int maxCover = 0;
        int times = 0;
        for(int i = 0; i < nums.size(); ++i) {
            maxCover = max(maxCover, nums[i] + i);
            if(i == cover) {
                cover = maxCover;
                times++;
            }
            if(cover >= nums.size() - 1) break;
        }
        return times;
    }
};

标签:return,游戏,nums,int,cover,随想录,跳跃,false,size
From: https://www.cnblogs.com/cscpp/p/18238979

相关文章

  • 【leetcode 1510 石子游戏】【记忆化搜索】
    存在和对于一切的语言importjava.util.Arrays;classSolution{publicbooleanwinnerSquareGame(intn){dp=newBoolean[n+1];dp2=newBoolean[n+1];Arrays.fill(dp,null);Arrays.fill(dp2,null);dp[0]=fa......
  • P2734 [USACO3.3] 游戏 A Game
    原题链接题解首先,玩家一先选,那么玩家一该选最左边还是最右边呢?我们假设玩家一有穿越时空的能力,知晓了选择左边后的最大得分和选了右边后的最大得分,那么玩家一便能确定选哪个设\(dp[l][r]\)为当区间为\(l,r\)时先手最大分数选左边的最大得分:\(sumr-dp[2][r]+a[1]\)选右......
  • 代码随想录算法训练营第四天 |
    24.两两交换链表中的节点题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。解题:关键:cur的位置在要交换的两个节点的前面具体如何交换的操作!!while种植条件:cur的下一个和下下个都不为空,不......
  • 代码随想录算法训练营第四天 Leetcode 24 两两交换链表节点 Leetcode19 删除链表倒数
    链表问题首先要记住设置虚拟头节点Leetcode24两两交换链表节点题目链接思路:就是简单模拟两两交换 要注意链表节点的处理一定要获取到合适的位置比如:这一题中两个交换节点的前一个节点注意链表保存临时节点/***Definitionforsingly-linkedlist.*publicclas......
  • 对模拟经营游戏中好感度系统和npc角色的分析
    目录1.定位2.功能性2.1.玩法系统入口2.2.任务发布3.好感度系统3.1.好感度的获取3.2.好感度系统的奖励4.节日1.定位好感度系统和npc角色并不是模拟经营游戏的重头戏和主角。以星露谷物语为例,所有鹈鹕珍村民在游戏核心的农场种植-获取资金-升级农场的循环中并不是必须的,......
  • 技能系统与游戏历程
    目录1.游戏历程的三个阶段2.职能划分与二级定位2.1.职能划分的演变2.2.游戏内容与职能定位细分的配合2.3.玩家体验3.职业技能树3.1.系统与阶段的融合3.2.习得与掌握的脱离3.3引导1.游戏历程的三个阶段我将FF14的游戏历程主要分为3个阶段:主线期:玩家主要以体验游戏主......
  • Steam游戏尝鲜攻略:如何安全高效试玩海量游戏
    在Steam这个全球最大的数字发行平台上,数以万计的游戏琳琅满目,让无数玩家心驰神往。但对于想要广泛探索不同游戏类型却又预算有限的玩家来说,如何在不违反规定的情况下,安全高效地试玩海量游戏成为了一大诉求。本文将为您揭秘几种策略,从Steam的家庭共享功能到充分利用免费资源,助您......
  • 代码随想录算法训练营第五十一天| 121. 买卖股票的最佳时机、122.买卖股票的最佳时机I
    121.买卖股票的最佳时机一只股票只能买卖一次代码随想录.-力扣(LeetCode)输入:[7,1,5,3,6,4]输出:5解释:在第2天(股票价格=1)的时候买入,在第5天(股票价格=6)的时候卖出,最大利润=6-1=5。注意利润不能是7-1=6,因为卖出价格需要大于买入价格;同时,你不能在买入......
  • 代码随想录算法训练营第五十天| 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III
    198.打家劫舍文档讲解:代码随想录题目链接:.-力扣(LeetCode) 问题:计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。也就是说相邻的房间不能偷当前房屋偷与不偷取决于前一个房屋和前两个房屋是否被偷了。所以这里就更感觉到,当前状态和前面状态会有一种依赖......
  • Web大学生网页作业成品——仿腾讯游戏官网网站设计与实现(HTML+CSS+JavaScript)
    ......