力扣刷题之贪心
迪恩_Emma
喜欢看书的Java开发
展开
-
85. 最大矩形(困难)
思路:类比84题,是84题的延续:相当于每一层都根据上一层加高度,每一层都算出最大面积代码:原创 2021-06-20 10:56:57 · 99 阅读 · 0 评论 -
56. 合并区间(中等)
思路:贪心算法代码:class Solution { public int[][] merge(int[][] intervals) { if(intervals.length==0){ return new int[0][2]; } //按每个数组的第一个数升序排序 Arrays.sort(intervals,new Comparator<int[]>(){ public int compare(int[] a,int[] b){.原创 2021-05-31 10:14:52 · 95 阅读 · 0 评论 -
55. 跳跃游戏(中等)
思路:贪心算法,每次记录能跳的最大距离,当遍历完当前范围后,往后跳一步代码:class Solution { public boolean canJump(int[] nums) { int n=nums.length; //记录每一次能跳的最大位置 int maxPosition=0; //每一跳的范围 int end=0; //跳的次数 int step=0; //不访问最后一个元素 for(int i=0;i<n-1;i.原创 2021-05-31 09:40:49 · 93 阅读 · 0 评论 -
剑指 Offer 14- II. 剪绳子 II(中等)
思路:与上题类似,都是用贪心算法这题不一样的是要考虑越界问题,也就是取余代码:class Solution { public int cuttingRope(int n) { if(n<=3) return n-1; if(n==4) return n; long sum=1L; while(n>4){ sum=sum*3%1000000007; n-=3; } //后面也要加括号,因为强制转换会先于取余操作 r.原创 2021-04-21 09:02:56 · 58 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子(中等)
思路:需要一点数学知识在长度为1到6中,如果剪成2或3都可以,那么剪成3最优代码:class Solution { public int cuttingRope(int n) { if(n<=3){ return n-1; } if(n==4){ return n; } int sum=1; while(n>4){ sum*=3; n-=3; } return sum*n; }}分解:..原创 2021-04-20 11:29:05 · 83 阅读 · 0 评论 -
45. 跳跃游戏 II(中等)
思路:典型贪心算法题,选择局部最优解设置三个变量:i)step,记录跳跃的次数ii)maxPosition,记录当前能到达的最大位置iii)end,记录上一次能跳跃的最大位置代码:class Solution { public int jump(int[] nums) { int n=nums.length; int end=0; int maxPosition=0; int step=0; //注意边界条件是<n-1,不访问...原创 2021-04-01 09:22:56 · 92 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球(中等)
思路:看到二维数组,先对起点或终点进行排序,再使用贪心算法代码:class Solution { public int findMinArrowShots(int[][] points) { int n=points.length; if(n==0) return 0; //Arrays.sort(points,new Comparator<int[]>(){ //public int compare(int[] a,int[] b){.原创 2021-04-02 11:35:06 · 64 阅读 · 0 评论 -
354. 俄罗斯套娃信封问题(困难)
思路:方法一:动态规划 i)先将长度升序排列,遇到长度相同的,则降序排列,这样的目的是舍弃一个,只取一个,则把长度小的舍弃 ii)设置dp,经典双重循环,最后取dp中最大的,而不是最后一个方法二:贪心算法 i)同样要先排序 ii)若当前target比排好序的最后一个值大,则直接插入队尾 否则,使用二分查找,找到已排好序的队列中的大小刚好的位置,插入代码1(动态规划):class Solution { public...原创 2021-04-02 10:30:14 · 221 阅读 · 0 评论