算法笔记|Day24贪心算法II

server/2024/9/24 23:26:21/

算法笔记|Day24贪心算法II

  • ☆☆☆☆☆leetcode 122.买卖股票的最佳时机II
    • 题目分析
    • 代码
  • ☆☆☆☆☆leetcode 55. 跳跃游戏
    • 题目分析
    • 代码
  • ☆☆☆☆☆leetcode 45.跳跃游戏II
    • 题目分析
    • 代码
  • ☆☆☆☆☆leetcode 1005.K次取反后最大化的数组和
    • 题目分析
    • 代码

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

题目链接:leetcode 122.买卖股票的最佳时机II

题目分析

注意到利润是可以分解的,如第1天买入第3天卖出的利润为prices[3]-prices[1]=(prices[3]-prices[2])+(prices[2]-prices[1]),相当于每天可以自由选择买卖且可以同时选择买卖,这样只需要计算每天与前一天的价格差,若为正计入总的利润。

代码

class Solution {public int maxProfit(int[] prices) {int res=0;for(int i=0;i<prices.length-1;i++){if(prices[i+1]-prices[i]>0)res+=prices[i+1]-prices[i];}return res;}
}

☆☆☆☆☆leetcode 55. 跳跃游戏

题目链接:leetcode 55. 跳跃游戏

题目分析

本题定义cover为当前覆盖范围(当前步数可走的最远距离),并保持更新,即每走一步计算当前可到的最远距离,若cover达到了末尾返回true,若走到了cover还没到达则返回false。

代码

class Solution {public boolean canJump(int[] nums) {int cover=0;for(int i=0;i<=cover;i++){cover=Math.max(i+nums[i],cover);if(cover>=nums.length-1)return true;}return false;}
}

☆☆☆☆☆leetcode 45.跳跃游戏II

题目链接:leetcode 45.跳跃游戏II

题目分析

本题定义cur为当前可走的最远距离,max为下一步可走的最远距离,count为最终结果结束。若i到达cur,则计数count加一并将max赋值给cur,若cur到达末尾,则结束循环返回count。

代码

class Solution {public int jump(int[] nums) {int count=0,cur=0,max=0;for(int i=0;i<nums.length;i++){max=Math.max(i+nums[i],max);if(cur>=nums.length-1)break;if(i==cur){count++;cur=max;}}return count;}
}

☆☆☆☆☆leetcode 1005.K次取反后最大化的数组和

题目链接:leetcode 1005.K次取反后最大化的数组和

题目分析

1.直接思路,将数组排序后,对最小的数取相反数,并重复k次,结束后依次遍历计算得到数组的和;
2.考虑到数组中经过一定次数的转换没有负数时,需要转换次数只集中在最小的正数或者0上,此时可以考虑讨论降低复杂度。首先,将数组排序,并依次将前面的负数取相反数,没变换依次k减一,直到k次用完减到0或者没有负数。然后,如果还有剩余的次数,若剩余次数k为偶数,只需将最小的正数重复取相反数偶数次,相当于没变,则无需处理;若剩余次数k为奇数,只需将最小的正数重复取相反数奇数次,相当于变换一次,则直接将最小的正数取相反数;最后,依次遍历计算得到数组的和;

代码

1.直接思路
class Solution {public int largestSumAfterKNegations(int[] nums, int k) {for(int i=0;i<k;i++){Arrays.sort(nums);nums[0]*=-1;}int res=0;for(int num:nums)res+=num;return res;}
}
2.降低复杂度版本
class Solution {public int largestSumAfterKNegations(int[] nums, int k) {Arrays.sort(nums);for(int i=0;i<nums.length&&k>0;i++){if(nums[i]<0){nums[i]*=-1;k--;}}if(k>0&&k%2==1){Arrays.sort(nums);nums[0]*=-1;}int res=0;for(int num:nums)res+=num;return res;}
}

http://www.ppmy.cn/server/101884.html

相关文章

mac如何恢复被同名替换掉的文件夹 mac文件被替换如何恢复

Mac系统一直以高性能遥遥领先其他的Windows系统&#xff0c;因此&#xff0c;Mac虽然价格远远高出其他的笔记本电脑&#xff0c;但是还是受到了一众用户的青睐。使用mac时&#xff0c;我们也经常会将一个文件命名为已经有了相同文件的文件名&#xff0c;且保存到同一个目标地址…

JavaSE面试

Java基本语法 1、一个Java源文件中是否可以包括多个类&#xff1f;有什么限制 是&#xff0c;只能有一个类声明为public&#xff0c;且声明public的类类名与源文件相同 2、Java的优势 跨平台、安全性高、简单性、高性能、健壮性、面向对象、社区繁荣 3、如何看待Java是半编译、…

[SWPUCTF 2021 新生赛]babyrce

我们传cookie admin1 访问http://node5.anna.nssctf.cn:29911/rasalghul.php 在PHP中&#xff0c;preg_match函数是一个用于进行正则表达式匹配的内置函数。它可以通过正则表达式对一个字符串进行匹配&#xff0c;判断该字符串是否满足正则表达式的规则。 发现过滤空格&#x…

智慧社区新视界:EasyCVR视频汇聚平台下的数字化治理实践

在当今科技飞速发展的时代&#xff0c;“数字城市智慧社区”这个概念正逐渐走进我们的生活。那么&#xff0c;数字城市智慧社区到底是什么样子的呢&#xff1f; 随着城市化的不断推进&#xff0c;数字城市建设已成为提升城市管理效率、改善居民生活质量的重要手段。智慧社区作…

西瓜书学习笔记二 假设空间 机器学习周志华

1.3 假设空间 归纳(induction) 与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的"泛化" (generalization) 过程&#xff0c;即从具体的事实归结出一般性规律;后者则是从一般到特殊的"特化" (specialization)过程&#xff0c;即从基础原理…

Java Spring|day2.SpringMVC

Spring MVC 定义 MVC是一种设计模式&#xff0c;在这种模式下软件被分为三层&#xff0c;即Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;、Controller&#xff08;控制器&#xff09;。 MVC是一种软件架构思想&#xff0c;把软件按照模型&#xff…

浏览器调试工具-Chrome Dev Tools

浏览器调试模式下的各个调试工具是常用的工具集&#xff0c;能够帮助开发者理解、调试和优化网页。 1.打开方式 直接在浏览器中按下F12键右键点击页面上的任一元素&#xff0c;选择“检查”&#xff08;Inspect&#xff09;在浏览器右上角点击菜单按钮&#xff0c;选择“更多…

搭建Java集成开发环境IntelliJ IDEA

随着软件开发的快速发展&#xff0c;集成开发环境&#xff08;IDE&#xff09;成为开发者的重要工具。Java作为一门广泛使用的编程语言&#xff0c;拥有多种开发工具&#xff0c;而IntelliJ IDEA因其强大的功能和良好的用户体验而受到许多开发者的青睐。本文将详细介绍如何搭建…