ZVVQ代理分享网

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

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

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

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

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

实例1:

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

导出:7

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

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

总利润为4+ 3 =7.

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

导出:4

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

总利润为4.

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

导出:0

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

1 0 初始页面

错误代码

public intmaxProfit(int[]价钱){

盈利= 0;

int选购=Integer.MAX_VALUE;

整数总数=0;

int窥探= 0;

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

利润 = num - 选购;

窥探=数据;

}

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

修补该问题并断开编码

细致编码

public intmaxProfit(int[]价钱){

if(prices.length窥探){

利润 = num - 选购;

窥探=数据;

}

不然 if(num

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

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

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

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

那样修改后返回数组可能的主要和。

实例1:

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

导出:5

表述:挑选检索 1,nums 变成 [4,-2,3]。

实例2:

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

导出:6

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

实例3:

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

导出:13

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

限定:

-100

初始页面

public intMaximumSumAfterKNegations(int[] nums, int k){

Arrays.sort(nums);

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

整数总数=0;

for(int i=0; i0){

总数-= nums[i];

k——;

}其他{

总数+= nums[i];

}

//寻找交接点

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

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

更改=我;

}其他{

转变=i-1;

}

}

}

// k>nums.length所以我们需要用了这种 k

假如(k>0){

假如(k%2!=0){

//寻找最少平方根

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

}

}

回到总数;

}

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

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

实例1:

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

导出:true

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

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

导出:假

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

错误代码

publicbooleancanJump(int[] nums){

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

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

回到真;

}

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

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

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

}

}

我=下一个;

}

回到真;

}

错误代码2

publicbooleancanJump(int[] nums){

if(nums.length==1){

回到真;

}

if(nums[0]== 0){

回到假;

}

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

回到真;

}

}

回到假;

}

publicbooleancanJump(int[] nums){

if(nums.length==1){

回到真;

}

整数范畴=0;

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

回到真;

}

}

回到假;

}

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

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

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

实例1:

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

导出:2

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

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

导出:2限定:

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

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

if(nums.length== 1){

回到0;

}

整数步=0;

整数范畴=0;

int预置范畴= 0;

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

流程++;

歇息;

}

if(i==preRange){

预范畴=范畴;

流程++;

}

}

回到流程;

}

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