zvvq技术分享网

LeetCode Day 贪心算法 第 2 部分(leetcode贪心的题目

作者:zvvq博客网
导读122. 买卖股票的最佳时机 II 给你一个整数数组prices,其中prices[i]是给定股票在第i天的价格。 每天,您都可以决定购买和/或出售股票。您在任何时候最多只能持有一股股票。但是,您可

内容来自zvvq,别采集哟

122. 交易股票的最佳时期 II给你一个整数数组prices,其中prices[i]是给出个股于第i天价钱。 copyright zvvq

每日,您都能够决定购买和/或出售股票。您在任何时候不得超过拥有一股个股。可是,您可以选购并在同一天马上售卖。

内容来自zvvq

找到并退还你能获得的最大利润。 zvvq好,好zvvq

实例1:

zvvq.cn

键入:价钱=[7,1,5,3,6,4]

内容来自samhan

导出:7 内容来自samhan666

表明:第 2 天买进(价钱 = 1),第 3 天售出(价钱 = 5),利润 = 5-1=4。

内容来自samhan

随后于第4天买进(价钱=3)并于第5天售出(价钱=6),盈利=6-3=3. zvvq好,好zvvq

总利润为4+ 3 =7. zvvq好,好zvvq

实例2:键入:价钱=[1,2,3,4,5]

内容来自samhan

导出:4

copyright zvvq

表明:第 1 天买进(价钱 = 1),第 5 天售出(价钱 = 5),利润 = 5-1=4。

zvvq

总利润为4. copyright zvvq

实例3:键入:价钱=[7,6,4,3,1]

内容来自zvvq,别采集哟

导出:0 zvvq.cn

表明:没办法获得正盈利,因此我们从不买股票来达到最大利润0。限定:

本文来自zvvq

1 0 初始页面

zvvq好,好zvvq

错误代码 zvvq

public intmaxProfit(int[]价钱){

内容来自zvvq,别采集哟

盈利= 0; 内容来自samhan666

int选购=Integer.MAX_VALUE;

zvvq好,好zvvq

整数总数=0; 内容来自samhan

int窥探= 0;

内容来自samhan666

for(int i=0; i价钱[i];" if> 选购 && num > 看){ zvvq

利润 = num - 选购;

copyright zvvq

窥探=数据;

zvvq好,好zvvq

} zvvq

else if((num>选购 && num我复位买到 int MAX_VALUE 并忘掉升级这可能会导致一些错误。 内容来自samhan

修补该问题并断开编码

zvvq.cn

细致编码

zvvq

public intmaxProfit(int[]价钱){

内容来自zvvq,别采集哟

if(prices.length窥探){ zvvq

利润 = num - 选购; 内容来自samhan666

窥探=数据;

copyright zvvq

} zvvq好,好zvvq

不然 if(num

内容来自samhan

1005.K个否认后数组总和更大化

内容来自zvvq,别采集哟

给出一个整数数组 nums 和一个整数 k,按以下方式改动该数组: zvvq好,好zvvq

选择一个检索 i 并把 nums[i] 替换为 -nums[i]。

zvvq

您应该精确运用此过程 k次。您可以数次挑选同样的检索 i。

zvvq.cn

那样修改后返回数组可能的主要和。 内容来自samhan666

实例1:

zvvq.cn

键入:nums =[4,2,3], k = 1

zvvq

导出:5 zvvq好,好zvvq

表述:挑选检索 1,nums 变成 [4,-2,3]。 内容来自zvvq,别采集哟

实例2: zvvq

键入:nums =[3,-1,0,2], k= 3

本文来自zvvq

导出:6 内容来自samhan666

表述:挑选检索 (1, 2, 2),nums 变成 [3,1,0,2]。

内容来自zvvq

实例3:

zvvq.cn

键入:nums =[2,-3,-1,5,-4], k= 2 本文来自zvvq

导出:13

内容来自samhan666

表述:挑选检索 (1, 4),nums 变成 [2,3,-1,5,4]。 内容来自zvvq,别采集哟

限定: zvvq

-100

zvvq

初始页面 内容来自zvvq

public intMaximumSumAfterKNegations(int[] nums, int k){ 内容来自samhan

Arrays.sort(nums);

zvvq.cn

int转变= nums[nums.length-1]>=0?0:nums.length-1;

zvvq.cn

整数总数=0;

zvvq

for(int i=0; i0){

内容来自zvvq,别采集哟

总数-= nums[i]; 内容来自samhan

k——;

zvvq

}其他{

内容来自samhan

总数+= nums[i];

copyright zvvq

}

copyright zvvq

//寻找交接点

内容来自zvvq,别采集哟

if(i>0&& nums[i-1]0){

zvvq好,好zvvq

if(-nums[i-1]>nums[i]){ 内容来自zvvq,别采集哟

更改=我; 内容来自samhan666

}其他{ 内容来自samhan666

转变=i-1; 内容来自zvvq

} copyright zvvq

} zvvq好,好zvvq

}

zvvq

// k>nums.length所以我们需要用了这种 k 内容来自zvvq,别采集哟

假如(k>0){

zvvq.cn

假如(k%2!=0){ 内容来自samhan

//寻找最少平方根 内容来自zvvq

sum-= 2Math.abs(nums[转变]);

copyright zvvq

}

内容来自samhan666

}

copyright zvvq

回到总数; 本文来自zvvq

} 内容来自zvvq,别采集哟

55.跳跃游戏给你一个整数数组 nums。您最初位于数组的第一个检索处,数组中的每个原素代表你在该位置的主要弹跳长度。 copyright zvvq

假如可以到达最后一个检索,则回到 true,不然回到 false。

zvvq.cn

实例1:

内容来自zvvq,别采集哟

键入:nums =[2,3,1,1,4] zvvq.cn

导出:true 内容来自zvvq

表明:从检索 0 跳 1 步到 1,随后跳 3 步到后来一个检索。

内容来自samhan666

实例2:键入:nums =[3,2,1,0,4]

copyright zvvq

导出:假 zvvq

表明:不管怎样,你总会到达检索 3。它的最大跳转长度为0,这使得其无法到达最后一个检索。限定: 内容来自samhan666

错误代码

内容来自zvvq

publicbooleancanJump(int[] nums){

本文来自zvvq

//确定是否抵达最后一个元素,这样大家只看到了是否抵达倒数第二个原素

zvvq好,好zvvq

for(int i=0; i= nums.length){ zvvq.cn

回到真; 内容来自samhan666

}

zvvq

//搜索当前步中的最大计步

zvvq.cn

for(intj=0;j下一个){

内容来自samhan666

下一个= i+j+nums[i+j];

内容来自zvvq

}

内容来自zvvq,别采集哟

}

内容来自samhan666

我=下一个; zvvq.cn

}

zvvq好,好zvvq

回到真;

zvvq好,好zvvq

}

本文来自zvvq

错误代码2

copyright zvvq

publicbooleancanJump(int[] nums){

zvvq.cn

if(nums.length==1){

本文来自zvvq

回到真; zvvq好,好zvvq

} copyright zvvq

if(nums[0]== 0){

内容来自zvvq

回到假; 本文来自zvvq

}

zvvq

for(int i=0; i=nums.length-1){ zvvq好,好zvvq

回到真; 内容来自samhan666

}

内容来自zvvq,别采集哟

}

内容来自zvvq

回到假; copyright zvvq

} zvvq

内容来自samhan

publicbooleancanJump(int[] nums){ 内容来自zvvq

if(nums.length==1){

内容来自zvvq,别采集哟

回到真; zvvq.cn

} 内容来自zvvq,别采集哟

整数范畴=0;

内容来自samhan

for(int i=0; i= nums.length-1){

内容来自samhan666

回到真;

内容来自samhan666

} zvvq

} 内容来自samhan

回到假;

zvvq好,好zvvq

} zvvq

45.跳跃游戏二给你一个 0 检索的长度为 n 的整数 nums 数组。您最初位于 nums[0]. zvvq

每个原素nums[i]代表从检索i往前跳转的主要长度。也就是说,假如你在 nums[i],你能跳转一切 nums[i+j],其中:

zvvq好,好zvvq

0 i +j回到抵达 nums[n- 1]的最小弹跳频次。产生的功能测试能够达到 nums[n- 1]。

内容来自zvvq

实例1:

内容来自samhan

键入:nums =[2,3,1,1,4] zvvq.cn

导出:2 内容来自zvvq

表明:抵达最后一个检索的最小跳转次数为 2。从检索 0 到 1 跳转 1 步,随后跳转 3 步到后来一个检索。

内容来自samhan666

实例2:键入:nums =[2,3,0,1,4] 本文来自zvvq

导出:2限定:

内容来自zvvq,别采集哟

1 0 确保你能做到nums[n- 1].

内容来自samhan

公共 int跳转(int[] nums){

zvvq好,好zvvq

if(nums.length== 1){

内容来自samhan666

回到0; zvvq.cn

}

本文来自zvvq

整数步=0; 内容来自zvvq,别采集哟

整数范畴=0; 内容来自samhan

int预置范畴= 0; 内容来自samhan

for(int i=0; i= nums.length-1){ 内容来自samhan666

流程++;

copyright zvvq

歇息; 内容来自samhan

} 内容来自samhan

if(i==preRange){ 内容来自samhan666

预范畴=范畴;

zvvq.cn

流程++;

本文来自zvvq

} copyright zvvq

}

本文来自zvvq

回到流程;

zvvq.cn

}

zvvq.cn

以上就是LeetCode Day 贪心算法第 2 部分的详细内容,大量请关注其他类似文章! 内容来自samhan666