代码随想录 Day35 - 贪心算法(四)
作者:jjn0703
- 2023-08-01 江苏
本文字数:2157 字
阅读完需:约 7 分钟
860. 柠檬水找零
能否找的开零钱主要看是否有足量的 5 元和 10 元的数量,故存在三种情况:
碰到 5 元的只需要加上;
碰到 10 元的,减掉 5 元,10 元的数量+1;
碰到 20 元的,看此时是否有 10 元的,有的话,10 元及 5 元的次数分别-1,没有的话,则 5 元的数量-3。
每一步在扣减的时候,均需要判断是否有足量的零钱,没有则直接返回 false。
package jjn.carl.greedy;
import java.util.Scanner;
/** * @author Jjn * @since 2023/8/1 13:25 */public class LeetCode860 { public boolean lemonadeChange(int[] bills) { int fiveCount = 0, tenCount = 0; for (int bill : bills) { if (bill == 5) { fiveCount++; continue; } if (bill == 10) { fiveCount--; tenCount++; if (fiveCount < 0) { return false; } continue; } if (bill == 20) { if (tenCount > 0) { tenCount--; fiveCount--; if (fiveCount < 0) { return false; } continue; } fiveCount -= 3; if (fiveCount < 0) { return false; } } } return true; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int total = scanner.nextInt(); int[] bills = new int[total]; for (int i = 0; i < total; i++) { bills[i] = scanner.nextInt(); } boolean lemonadeChange = new LeetCode860().lemonadeChange(bills); System.out.println(lemonadeChange); }}
复制代码
406. 根据身高重建队列
package jjn.carl.greedy;
import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Scanner;
/** * @author Jjn * @since 2023/8/1 13:34 */public class LeetCode406 { public int[][] reconstructQueue(int[][] people) { Arrays.sort(people, (first, second) -> { if (first[0] == second[0]) { return first[1] - second[1]; } return second[0] - first[0]; }); List<int[]> list = new ArrayList<>(); for (int[] p : people) { list.add(p[1], p); } return list.toArray(new int[people.length][]); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = scanner.nextInt(); int[][] people = new int[count][2]; for (int i = 0; i < count; i++) { for (int j = 0; j < 2; j++) { people[i][j] = scanner.nextInt(); } } int[][] reconstructQueue = new LeetCode406().reconstructQueue(people); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("["); for (int[] element : reconstructQueue) { stringBuilder.append(Arrays.toString(element)); } stringBuilder.append("]"); System.out.println(stringBuilder); }}
复制代码
452. 用最少数量的箭引爆气球
package jjn.carl.greedy;
import java.util.Arrays;import java.util.Scanner;
/** * @author Jjn * @since 2023/8/1 16:11 */public class LeetCode452 { public int findMinArrowShots(int[][] points) { Arrays.sort(points, (first, second) -> { if (first[0] == second[0]) { return Integer.compare(first[1], second[1]); } return Integer.compare(first[0], second[0]); }); int count = 1; for (int i = 1; i < points.length; i++) { if (points[i][0] > points[i - 1][1]) { count++; } else { points[i][1] = Math.min(points[i][1], points[i - 1][1]); } } return count; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int count = scanner.nextInt(); int[][] points = new int[count][2]; for (int i = 0; i < count; i++) { for (int j = 0; j < 2; j++) { points[i][j] = scanner.nextInt(); } } int minArrowShots = new LeetCode452().findMinArrowShots(points); System.out.println(minArrowShots); }}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 4
版权声明: 本文为 InfoQ 作者【jjn0703】的原创文章。
原文链接:【http://xie.infoq.cn/article/ced134f6083294ec17c909839】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
jjn0703
关注
Java工程师/终身学习者 2018-03-26 加入
USTC硕士/健身健美爱好者/Java工程师.










评论