欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 贪心算法习题其二【力扣】【算法学习day.18】

贪心算法习题其二【力扣】【算法学习day.18】

2024/11/5 14:19:45 来源:https://blog.csdn.net/2301_79232523/article/details/143414421  浏览:    关键词:贪心算法习题其二【力扣】【算法学习day.18】

前言

###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.分发糖果

题目链接:135. 分发糖果 - 力扣(LeetCode)

题面:

基本分析: 从左往右遍历,需要满足高分比低分多,从右往左遍历,同样也需要,遍历两次取最大值

代码:

class Solution {public int candy(int[] ratings) {int n = ratings.length;int[] left = new int[n];int[] right = new int[n];Arrays.fill(left,1);Arrays.fill(right,1);for(int i =1;i<n;i++){if(ratings[i]>ratings[i-1]){left[i]=left[i-1]+1;}}int sum = left[n-1];for(int i =n-2;i>=0;i--){if(ratings[i]>ratings[i+1]){right[i]=right[i+1]+1;}sum+=Math.max(left[i],right[i]);}return sum;}
}

2.柠檬水找零

题目链接:860. 柠檬水找零 - 力扣(LeetCode)

题面:

基本分析:优先使用掉大面值的钱

代码:

class Solution {public boolean lemonadeChange(int[] bills) {int n = bills.length;int[] arr = new int[11];for(int c:bills){if(c==5){arr[5]++;}else if(c==10){if(arr[5]==0)return false;arr[5]--;arr[10]++;}else{if(arr[10]>0){arr[10]--;if(arr[5]==0)return false;arr[5]--;}else{if(arr[5]<3)return false;arr[5]-=3;}}}return true;}
}

3.根据身高重建队列

题目链接:406. 根据身高重建队列 - 力扣(LeetCode)

题面:

基本分析:先排高的,矮的进行插队

代码:

class Solution {public int[][] reconstructQueue(int[][] people) {int n = people.length;Arrays.sort(people, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[0]==o2[0])return o1[1]-o2[1];return o2[0]-o1[0];}});LinkedList<int[]> list = new LinkedList<>();for (int[] i : people) {list.add(i[1], i);}return list.toArray(new int[list.size()][2]);}
}

后言

上面是贪心算法的部分习题,下一篇会讲解贪心算法的其他相关力扣习题,希望有所帮助,一同进步,共勉!   

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com