首页 > 其他分享 >(32/60)买卖股票的最佳时机Ⅱ、跳跃游戏、跳跃游戏Ⅱ

(32/60)买卖股票的最佳时机Ⅱ、跳跃游戏、跳跃游戏Ⅱ

时间:2024-02-29 21:23:13浏览次数:16  
标签:return 游戏 nums int 32 复杂度 flag 跳跃 size

想不到,根本想不到

买卖股票的最佳时机Ⅱ

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

贪心法

思路

任何一天的累计利润都可以拆成之前每天相比前一天的利润之和,因此最大利润就是收集了每天的正利润。

复杂度分析

时间复杂度:O(N)。

空间复杂度:O(1)。

注意点

代码实现

class Solution {
public:
    // 任何一天的利润都可以表示为之前每天的利润之和
    // 最大利润就收集每天的正利润
    int maxProfit(vector<int>& prices) {
        if(prices.size() == 1) return 0;
        int profit = 0;
        for(int i = 1;i < prices.size();i++){
            int curProfit = prices[i] - prices[i - 1];
            if(curProfit > 0) profit += curProfit;  
        }

        return profit;
    }
};

跳跃游戏

leetcode:55. 跳跃游戏

贪心法

思路

法一:

遍历覆盖范围的每个点,看最大覆盖范围是否包含最后下标

法二:

从后往前开始找0,因为之后通往终点全是正数,哪怕每次走1步,必能到。那么对于0前面的数,只要有一个满足(距离+1)的条件,这个0就可以被跳过。

复杂度分析

时间复杂度:O(N)。

空间复杂度:O(1)。

注意点

略。

代码实现

法一:

class Solution {
public:
    // 遍历覆盖范围的每个点,看最大覆盖范围是否包含最后下标
    bool canJump(vector<int>& nums) {
        if(nums.size() == 1) return true;
        int cover = 0;
        for(int i = 0;i <= cover;i++){
            cover = max(cover,nums[i] + i);
            if(cover >= nums.size() - 1) return true;
        }
        return false;
    }
};

法二:

class Solution {
public:
    // 从后往前开始找0,因为之后通往终点全是正数,哪怕每次走1步,必能到。
    // 那么对于0前面的数,只要有一个满足(距离+1)的条件,这个0就可以被跳过。
    bool canJump(vector<int>& nums) {
        int flag = -1;
        for(int i = nums.size() - 2;i >= 0;i--){
            // 如果flag为-1且当前数字为0,flag为当前下标(标记0的位置)
            // 如果flag不为-1且当前下标(i)覆盖范围(i+nums[i])能跳过flag,flag重置为-1
            if(flag == -1 && nums[i] == 0) flag = i;
            if(flag != -1 && i + nums[i] > flag) flag = -1;
        }
        return flag == -1;
    }
};

跳跃游戏Ⅱ

leetcode:45. 跳跃游戏 II

思路

遍历每个元素尝试更新下一轮最大范围(max(nextDist,i + nums[i])),走到本轮范围边界时,更新步数。

如果走到了末元素,跳出,返回。

复杂度分析

时间复杂度:O(N)。

空间复杂度:O(1)。

注意点

  1. 走到一轮边界才更新步数,而不是更新最大范围时更新。

代码实现

class Solution {
public:
    int jump(vector<int>& nums) {
        if(nums.size() == 1) return 0;
        int curDist = 0;
        int nextDist = 0;
        int step = 0;
        for(int i = 0;i < nums.size();i++){
            nextDist = max(nextDist,i + nums[i]);   // 每次尝试更新最大范围
            if(i == curDist){   // 走到一轮范围边界时
                curDist = nextDist; // 更新范围
                step++; // 更新步数
                if(curDist >= nums.size() - 1) break;   // 如果走到末元素了,跳出,返回。
            }
        }

        return step;
    }
};

标签:return,游戏,nums,int,32,复杂度,flag,跳跃,size
From: https://www.cnblogs.com/tazdingo/p/18045531

相关文章

  • 232. 用栈实现队列 C
    C用数组模拟即可typedefstruct{inta[100];intfront;inttail;intsize;}MyQueue;MyQueue*myQueueCreate(){MyQueue*q=(MyQueue*)malloc(sizeof(MyQueue));q->front=0;q->tail=0;q->size=0;for(inti=0;i<100;......
  • STM32F10X 部分引脚不能使用的问题
    一、概述说来惭愧,我到现在都没有完整的学习过STM32。接触STM32还是突然的一个项目,需要用到STM32,紧急需求,只能边学边完成。不过好在ST的资料还是比较多的,相对也比较简单,基本上的需求都能找到对应的demo,或者直接使用STM32CubeMX生成代码,最后在稍微改改,写一下自己的逻辑,就能......
  • day50 动态规划part7 代码随想录算法训练营 322. 零钱兑换【什么时候+1】
    题目:322.零钱兑换我的感悟:看着文字版也能做出来了,哈哈哈!!理解难点:这题是最小值dp[j]=min(dp[j],dp[j-coins[i]+1)因为是数量要加一个1,有的加,有的不加,还没太搞清楚。 听课笔记: 代码示例:classSolution:defcoinChange(self,coins:List[int],amount:int......
  • ABC320 FG
    F-FuelRoundTrip注意到路程分成了两段,所以我们也按两段dp。设\(f_{i,j,k}\)表示到第\(i\)个加油站,来程加油后油量为\(j\),回程加油后油量为\(k\)的最小代价。初始对于\(0\lei\leh\),有\(f_{0,h,i}=0\)。考虑刷表法转移(\(i\toi+1\)),令\(d=x_{i+1}-x_i\),然后根据......
  • cf1332f-solution
    CF1332FSolutionlink设\(dp_{u,0/1,0/1}\)表示在\(u\)的子树中,节点\(u\)与它父亲的边是否在导出子图中,点\(u\)是否在独立集中,的方案数。\[dp_{u,0,0}\gets\prod_v(dp_{v,0,0}+dp_{v,1,0}+dp_{v,0,1}+dp_{v,1,1})\]\[dp_{u,1,0}\gets\prod_v(dp_{v,0,0}+dp_{v,1,0}+......
  • STM32——CAN通讯
    STM32-CAN通讯一、发送和接收流程can通讯传输的是一种差分信号,关于具体的硬件电路略。1、发送流程前置工作:如时钟的开启、引脚的配置;CAN邮箱和模式等配置参考下面或HAL库选择选择一个空置的邮箱(判断空置:CAN_TSR的TMEx位);在这个空置邮箱中按数据帧格式设置ID、数据长度......
  • psql: 无法联接到服务器: 没有那个文件或目录 服务器是否在本地运行并且在 Unix 域套
    今天在服务器上用root用户输入pgsql和pg_dump报错如下 首先检查了下pg的状态发现正常systemctlstatuspostgresql 然后尝试输入pg_dump-h127.0.0.1psql-h127.0.0.1不再报错 添加了-h127.0.0.1原因未知,待解决...... 第二次尝试添加了环境变量vim /et......
  • Linux使用命令行编译并用st-link烧录STM32
    创建工程在STM32CubeMX中配置,选择Makefile并生成。环境安装编译工程需要用到arm-none-eabi,去官网下载对应系统版本,下载后解压到任意位置。添加环境变量添加环境变量到.bashrc文件:echo'exportPATH="/toolchain/arm-none-eabi/bin:$PATH"'>>~/.bashrc我解压的位置为/too......
  • 基于VsCode platformio的stm32开发环境搭建
    基于VsCodeplatformio的stm32开发环境搭建背景VsCode作为当下流行的编辑器,且不单单是一个编辑器里面集成了很多插件,使用这些插件可以完成很多功能。STM32开发环境除了KEIL与IAR,其实还有很多其他的开方方式,ST官方提供了很多的开发软件,基于Eclipse也可以搭建一套,使用VsCode配合......
  • 基于STM32F407MAC与DP83848实现以太网通讯四(STM32F407MAC数据收发与DMA描述符)
    上一章实现的MAC数据包的基础收发功能,但是只是简单的操作了ETH外设的收发包函数并没有深入了解其中的原理逻辑,本章结合STM32F40x文档与STM32F4x7_ETH_Driver驱动库了解MAC的收发包流程。一、描述符列表 在创建描述符列表之前先了解描述符列表的定义,描述符就软件来说就是一个结......