首页 > 其他分享 >代码随想录day 32● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

代码随想录day 32● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

时间:2023-04-01 11:22:58浏览次数:52  
标签:下标 游戏 int 位置 II prices 数组 跳跃

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

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

  • 输入: [7,1,5,3,6,4]
  • 输出: 7
  • 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

如果想到其实最终利润是可以分解的,那么本题就很容易了!

如何分解呢?

假如第0天买入,第3天卖出,那么利润为:prices[3] - prices[0]。

相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。

此时就是把利润分解为每天为单位的维度,而不是从0天到第3天整体去考虑!

那么根据prices可以得到每天的利润序列:(prices[i] - prices[i - 1]).....(prices[1] - prices[0])。

class Solution {
    public int maxProfit(int[] prices) {
        int result = 0;
        for (int i= 1; i < prices.length; i++) {
            result += Math.max(prices[i] - prices[i - 1], 0);
        }
        return result;
    }
}

跳跃游戏

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

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

判断你是否能够到达最后一个位置。

示例 1:

  • 输入: [2,3,1,1,4]
  • 输出: true
  • 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。

示例 2:

  • 输入: [3,2,1,0,4]
  • 输出: false
  • 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。

贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。

class Solution {
    public boolean canJump(int[] nums) {
        if (nums.length == 1) return true;

        int converage = 0;
        for (int i = 0;i <= converage; i++) {
            converage = Math.max(converage, i + nums[i]);
            if (converage >= nums.length - 1) return true;
        }
        return false;
    }   
}

跳跃游戏 ii

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

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

你的目标是使用最少的跳跃次数到达数组的最后一个位置。

示例:

  • 输入: [2,3,1,1,4]
  • 输出: 2
  • 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

说明: 假设你总是可以到达数组的最后一个位置。

针对于方法一的特殊情况,可以统一处理,即:移动下标只要遇到当前覆盖最远距离的下标,直接步数加一,不考虑是不是终点的情况。

想要达到这样的效果,只要让移动下标,最大只能移动到nums.size - 2的地方就可以了。

class Solution {
    public int jump(int[] nums) {
        int result = 0;
        // 当前覆盖的最远距离下标
        int end = 0;
        // 下一步覆盖的最远距离下标
        int temp = 0;
        for (int i = 0; i <= end && end < nums.length - 1; ++i) {
            temp = Math.max(temp, i + nums[i]);
            // 可达位置的改变次数就是跳跃次数
            if (i == end) {
                end = temp;
                result++;
            }
        }
        return result;
    }
}

 

标签:下标,游戏,int,位置,II,prices,数组,跳跃
From: https://www.cnblogs.com/libertylhy/p/17278269.html

相关文章

  • day32 打卡122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
    day32打卡122.买卖股票的最佳时机II55.跳跃游戏45.跳跃游戏II122.买卖股票的最佳时机II122题目链接classSolution{publicintmaxProfit(int[]prices){intresult=0;for(inti=1;i<prices.length;i++){result+=Math.......
  • 最长上升子序列 II
    最长上升子序列II题目描述给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤100000-10^9≤数列中的数≤10^9输入样例:73......
  • day8| 344.反转字符串;541.反转字符串II;剑指offer 05.替换空格;151.翻转字符串里的单词
    344.反转字符串 题目简述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组,使用O(1)的额外空间解决这一问题。 解题思路:没什么好说的,直接双指针 代码如下:classSolution:de......
  • Mac应用Drone Station结合普通游戏手柄让AR Drone飞起来
    ARDrone直升机确实很好玩,但以前只有用iPad,iPhone,iPodTouch,安卓智能手机,及Linux电脑才能玩,不过有了DroneStation,玩家现在可以使用Mac结合游戏手柄来玩。玩家可以用一个普通游戏手柄来控制飞行器,目前兼容USBXbox360,PS3,Extreme3D pro,DualActionGamepad,ThrustmasterT-Fl......
  • Instagram变身小游戏: InstaGamer
     还记得那个让你随时随地在你的iPhone上观看并分享好友最新照片的Instagram么,通过它你能将你喜欢的照片制作成炫目的艺术作品并分享,众多炫目的滤镜或移轴特效让你的照片焕然一新,让平淡的生活多姿多彩。游戏名称:InstaGamer游戏平台:iPhone/iPodtouch/iPad价格:Free对于这种形......
  • 游戏机向智能机屈服,索尼推触摸屏PSV
    索尼最新的手持游戏设备PlayStationVita将会在2012年的2月在美国上市。Vita有两个类似街机的游戏摇杆和按钮,不过更有意思的是其屏幕竟然是触摸屏,并且有一个供触控的界面,这看上去很像当下许多智能机,因为目前很多智能机上的游戏变得越来越流行,而且是流行得不可思议。比如说《愤......
  • 苹果与乔布斯对游戏行业影响力排名均居各自类别之首
    伦敦游戏节将至,外媒对将要参加此次活动的视频游戏专业人士进行了采访,让他们分别说出自己认为对视频游戏行业产生重大影响前五位人物以及五种硬件设备。最终结果显示乔布斯和苹果的影响力综合排名都在各自类别之首。硬件设备第一位iPHone——17%第二位......
  • 游戏AI——GOAP技术要点
    目录什么是GOAP(Goal-OrientedActionPlanning)细节难点与挑战世界表达具体类型表示字符串表示bool转化为枚举规划器Regoap流程Middle-earth™:ShadowofMordor™的系统分层古墓丽影2013的Motive系统工具规划管理器(PlannerMonitor)GOAP自动化统计模块思考相关资料什么是GOAP(Goal......
  • 让游戏在Google Play排最前的10个免费策略
    作为独立开发商,要想应用或游戏在GooglePlay靠前,恐怕是一件非常艰难的事情,也许成千上万的美元换不来一丝变化,不过,如果你知道这10个排名靠前的秘密,就有可能不会一分一文,让你......
  • 三字棋小游戏
    代码里面有一个小bug,看大家能不能发现text.c#define_CRT_SECURE_NO_WARNINGS1#include"game.h"//三字棋游戏#include<stdio.h>voidmenu(){printf("***......