首页 > 其他分享 >day32| 122+55+45

day32| 122+55+45

时间:2023-04-15 13:22:28浏览次数:46  
标签:位置 end nums 55 45 122 prices 下标 最远

122. 买卖股票的最佳时机

 

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 。

 

思路:

1. 可以当天买当天买

2. 也可以第i-1买,第i天卖,甚至第i天再买

3. 如果说后一天的售价比前一天高,是否就可以一直执行前一天买,后一天卖的操作

4. 利用一个判断语句,如果前天买,后天卖的收益为正,就加入总收益

5. 遍历得最大收益值

 

代码如下:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit = 0
        for i in range(1, len(prices)):
            tmp = prices[i] - prices[i - 1]
            if tmp > 0: profit += tmp
        return profit

 

 

55. 跳跃游戏

 

题目简述:

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

 

思路:

1. 能到达较远的位置,那么一定能到达较近的位置

2. 直接遍历数组,如果当前位置能到达,并且当前位置+跳数>最远位置,不断更新能够到达的最远位置即可

3. 如果最远位置超过了最后一个位置的下标,即可返回True

 

代码如下:

class Solution:
    def canJump(self, nums: List[int]) -> bool:

        max_i = 0       #初始化当前能到达最远的位置
        for i, jump in enumerate(nums):   #i为当前位置,jump是当前位置的跳数
            if max_i>=i and i+jump>max_i:  #如果当前位置能到达,并且当前位置+跳数>最远位置  
                max_i = i+jump  #更新最远能到达位置
        return max_i>=i

 

 

45. 跳跃游戏II

 

题目简述:

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

0 <= j <= nums[i] 
i + j < n
返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

 

思路:

1. 每次利用一个范围的元素中,确定下一个范围

2. 利用上一个范围内的数字,确定下一定范围的边界

3. 每次遍历到end,即进行step+1的操作

4. 之所以如此,从一个范围到另一个范围,是可以通过一步就到达的

 

比如数组[2,3,1,1,4],下标分别为[0,1,2,3,4]

1. 从左向右遍历,0下标的元素必定是要经过的

2. 得到第0个下标对应的2,确定了一个最初的边界,也即一个小数组[3,1],对应下标为1,2

3. 继续从左向右遍历,取得 元素3,发现 3+index(3)=3+1>index(2)=2,更新范围,知道了下一个范围的右边界是下标4对应的那个位置,左边界是上一个end+1,都是闭区间

4. 继续从左向右遍历,取得 元素1,发现1 +index(2)=1+2<4,没用,不更新边界

5. 当时此时元素1对应的下标为 我们由元素2 确定的右边界,再往后就要step加1了

6. 以此类推

 

代码如下:

class Solution:
    def jump(self, nums: List[int]) -> int:
        # 能跳到远的点,就肯定能跳到近的点
        # 每次在上次能跳到的范围(end)内选择一个能跳的最远的位置作为下次的起跳点!
        # 走到end也更新end为上一范围点能跳到的最远位置
        n = len(nums)
        maxPos, end, step = 0, 0, 0
        for i in range(n - 1):
            if maxPos >= i:
                maxPos = max(maxPos, i + nums[i])
                if i == end:
                    end = maxPos
                    step += 1
        return step

 

标签:位置,end,nums,55,45,122,prices,下标,最远
From: https://www.cnblogs.com/cp1999/p/17320943.html

相关文章

  • 二叉树遍历(102.144.94.145)
    102.二叉树的层序遍历BPS/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left(nullptr)......
  • Yunzai-BotQQ账号登录报错:token失效: [禁止登录]你当前使用的QQ版本过低,请前往QQ官网i
    token失效:[禁止登录]你当前使用的QQ版本过低解决方案写在前面:该问题是TX认为账号有被用作BOT的嫌疑,而阻止你登陆。但是由于是我们人类在登陆,用来卡BOT的验证码测试肯定可以通过,TX就用“版本过低”的问题来卡我们!!TX我***网上尝试了许多方法,包括对device.json大改特改,还说什么......
  • UVA 12295 Optimal Symmetric Paths 最短路求方案数
    题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=23587题意:给一个n*n的矩阵,每个方格中有一个数字,从左上角走到右下角,且路径必须关于副对角线对称,求使路线上数字和最小的方案数思路:既然要关于副对角线对称,那么可以把关于副对角线对称的方格的值加到一起去,这样就......
  • Party at Hali-Bula UVA - 1220
     多判断一个唯一性 only[x][0/1]#include<iostream>#include<cstring>#include<vector>#include<map>#include<algorithm>usingnamespacestd;constintN=205;intf[N][2],n,K;intonly[N][3];vector<int>g[N];map&l......
  • day31| 455+376+53
    455.分发饼干 题目简述:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j] 。如果s[j] >=g[i],我们可以将这个饼干j分配给......
  • 高通5G平台(SDX55\SDX62\SDX65):ping包异常问题排查指南
    转自高通5G平台(SDX55\SDX62\SDX65):ping包异常问题排查指南-腾讯云开发者社区-腾讯云(tencent.com)高通5G平台:ping包异常问题排查指南 1.背景移动通信延续着每十年一代技术的发展规律,已历经1G、2G、3G、4G的发展。每一次代际跃迁,每一次技术进步,都极大地促进了产业升级和经......
  • edu145-D
    题目链接:https://codeforces.com/problemset/problem/1809/D一个关键的地方没想到,没有想到枚举分界线。思路:最终改成的字符串的样子一定是这样的:以某个点为分界线,左边全是0,右边全是1。所以可以枚举分界线(分界线的值为1,左边去掉为1的,右边去掉为0的),当且仅当\(s_i=0,s_{i-1}=1\)交......
  • NUIST Levoj P1220 皇后摆放问题
    #include<iostream>#include<algorithm>#include<vector>#include<cstring>usingnamespacestd;intchess[9][9];intarr[9][9];intcnt=0,sum=0;boolcheck(introw,intcol){ for(inti=1;i<9;i++)if(chess[i][col])returnfalse; for(inti=......
  • 坚果云:2019年云综合收入0.55亿元,向Dropbox看齐
     云排名分析:坚果云,2019年云综合收入0.55亿元。2019年的时候,坚果云创始人兼CEO韩竹透露,坚果云目前已盈利,每年公司营收增速50%到100%,并且正在考虑上市,从目前财务状况看,快的话两三年就有可能。之前阿明(Aming)从2018年的公开信息和整体表现来看,估算2018年坚果云收入为0.35亿元。作为聚......
  • day45 70. 爬楼梯 |
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?确定dp数组以及下标的含义dp[i]:爬到有i个台阶的楼顶,有dp[i]种方法。确定递推公式在动态规划:494.目标和 (opensnewwindow)、 动态规划:518.零钱兑换......