【代码随想录训练营】【Day35】第八章|贪心算法|860.柠檬水找零|406.根据身高重建队列|452. 用最少数量的箭引爆气球
创始人
2024-05-30 02:21:10
0

柠檬水找零

题目详细:LeetCode.860

一道非常简单的模拟题,根据题目要求编写程序即可:

Java解法(模拟):

class Solution {public boolean lemonadeChange(int[] bills) {int money_5 = 0, money_10 = 0;for(int b : bills){if(b == 5){money_5++;}else if(b == 10){money_10++;money_5--;}else if(b == 20){if(money_10 > 0){money_10--;money_5--;}else{money_5 -= 3;}}if(money_5 < 0 || money_10 < 0)return false;}return true;}
}

根据身高重建队列

题目详细:LeetCode.406

这道题与上一节的练习《分发糖果》有异曲同工之妙,当我们题目有两个维度时,如本题,有两个比较纬度身高h和数量k,所以看到这种题目一定要想先确定哪一个维度,再考虑能不能按照另一个维度重新排列得到正确结果,不能够两个维度条件同时考虑。

解题过程如下:

  • 先确定一个维度:我先按照身高h来排序,身高一定是从大到小排序(身高相同的话则k值较小的站前面),保证前面的节点一定都比当前节点高。
  • 再确定另一维度:
    • 局部最优解:身高从高到低依次按people的k值来插入列表,也就是将k值作为下标来执行插入操作,这样使得people插入后列表仍满足题目的排列要求
    • 全局最优解:全部元素都插入完成,整个队列仍满足题目的排列要求

注意:身高为什么一定是从大到小排?

  • 因为身高从小到大排序,后续完成插入后,结果无法满足题目的排列求,每个节点“前面正好有 k 个身高大于或等于 h 的人”的要求
  • 同理,如果这题要求为“前面正好有 k 个身高大于或等于 h 的人”,则先将身高从小到大排序

Java解法(先按身高排序,再按k值插入):

class Solution {public int[][] reconstructQueue(int[][] peoples) {// 按身高从大到小排序,身高相同则k值小的在前Arrays.sort(peoples, (a, b) -> {if(a[0] == b[0])return a[1] - b[1];return b[0] - a[0];});// 按照k值依次插入List ans = new ArrayList<>();for(int[] people : peoples){ans.add(people[1], people);}return ans.toArray(new int[peoples.length][]);}
}

用最少数量的箭引爆气球

题目详细:LeetCode.452

注意本题一个非常坑的测试数据:

[[-2147483646,-2147483645],[2147483646,2147483647]]

在对输入数据进行排序时,需要使用Integer内置的比较器,来防止输入数据溢出。

这道题的思路比较简单,但是我觉得我的表述可能不是很清晰,详细的题解可查阅:《代码随想录》— 用最少数量的箭引爆气球

Java解法(先排序,确定重叠的边界,进而确定箭的数量):

class Solution {public int findMinArrowShots(int[][] points) {Arrays.sort(points, (a, b) -> {// 不能使用 return a[0] - b[0];// 这里需要使用内置的比较器,防止数据溢出return Integer.compare(a[0], b[0]);});// points.length >= 1,所以至少会射出一支箭int count = 1; for(int i = 1; i < points.length; i++){if(points[i - 1][1] < points[i][0])// 如果当前气球的左边界和上一个气球的右边界没有交集// 则说明两个气球没有重叠,需要多射出一支箭count++;else// 如果当前气球的左边界和上一个气球的右边界存在交集// 则当前气球保留一个最小最右边界值,即与上一个气球重叠的最右边界值points[i][1] = Math.min(points[i][1], points[i - 1][1]);}return count;}
}

相关内容

热门资讯

安卓系统app和ios系统的区... 你有没有发现,手机里的APP就像是个大杂烩,各有各的特色,各有各的玩法。今天,咱们就来聊聊安卓系统和...
宿迁综合办公系统安卓,便捷高效... 你有没有听说最近宿迁市推出了一款超级方便的安卓应用——宿迁综合办公系统?这可是个大新闻,让我来给你详...
小米平板4系统安卓下载,畅享智... 亲爱的数码爱好者们,你是否在寻找一款性价比超高、性能稳定的平板电脑呢?小米平板4绝对是你的不二之选!...
安卓系统易用性盘点,人性化设计... 你有没有发现,手机里的安卓系统就像一个万能的小助手,无论你是喜欢玩游戏、看视频,还是处理工作,它都能...
鸿蒙系统中出现安卓代码 鸿蒙系统中的安卓代码奇缘在当今科技飞速发展的时代,智能手机已经成为了我们生活中不可或缺的一部分。而在...
安卓系统的双开免费的,免费畅享... 《探索安卓系统的双开免费新世界》在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。而在这众多...
转国外的安卓系统,探索国外安卓... 你有没有想过,让你的安卓手机体验一下国外的风味呢?想象那些国外的应用、游戏,还有那独特的系统设置,是...
安卓系统韩国能用吗,兼容性与使... 你有没有想过,如果你去韩国旅游或者工作,你的安卓手机还能不能用呢?这个问题可真是让人好奇啊!毕竟,每...
安卓手机系统占多少储存 你有没有发现,你的安卓手机越来越慢了?是不是觉得存储空间不够用,连个新应用都装不下?别急,今天就来给...
freemeos是安卓系统吗,... 你有没有听说过freemeOS这个系统?是不是好奇它是不是安卓系统呢?今天,我就来给你揭秘这个神秘的...
安卓系统其他应用耗电大,那些默... 手机电量总是不够用?是不是觉得安卓系统的其他应用耗电特别大?别急,今天就来给你揭秘这个谜团,让你手机...
华为os系统怎么换安卓系统,轻... 你有没有想过,你的华为手机里那个自家的OS系统,突然间想换换口味,试试安卓的精彩世界呢?别急,今天就...
诺基亚回用安卓系统吗,新篇章的... 你有没有听说最近的大消息?诺基亚,那个曾经手机界的巨头,竟然有可能会重新启用安卓系统!这可不是开玩笑...
安卓软件开发考勤系统 你有没有想过,在忙碌的安卓软件开发工作中,如何轻松管理团队考勤呢?别急,今天就来给你揭秘一款特别实用...
炉石传说安卓系统要求,解锁全新... 亲爱的玩家们,你是否已经迫不及待地想要在安卓设备上畅玩《炉石传说》了呢?别急,在这之前,你得先确保你...
安卓手机刷掌阅系统 你有没有想过,你的安卓手机可以变成一个掌阅小能手呢?没错,就是那种随时随地都能畅读各种电子书的掌阅系...
飞车手游ios系统跟安卓系统,... 你有没有发现,最近手机上的一款飞车手游特别火呢?这款游戏不仅画面精美,操作流畅,而且玩法多样,吸引了...
安卓平板显示系统不兼容,安卓平... 你有没有遇到过这种情况?买了一款心仪的安卓平板,满怀期待地想要体验各种精彩应用,结果却发现有些应用显...
安卓系统安装破解app病毒,安... 你知道吗?在安卓系统上安装破解版的APP,听起来是不是有点刺激?但别高兴得太早,这背后可是隐藏着不少...
安卓版桌面操作系统,探索安卓桌... 你有没有想过,你的安卓手机桌面操作系统,其实就像是一个小小的魔法世界呢?在这个世界里,你可以随意布置...