1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| package questions;
import java.util.*;
public class _452用最少数量的箭引爆气球 {
public int findMinArrowShots_optimize_gov(int[][] points) { if (points.length == 0) { return 0; } Arrays.sort(points, new Comparator<int[]>() { public int compare(int[] point1, int[] point2) { if (point1[1] > point2[1]) { return 1; } else if (point1[1] < point2[1]) { return -1; } else { return 0; } } }); int pos = points[0][1]; int ans = 1; for (int[] balloon : points) { if (balloon[0] > pos) { pos = balloon[1]; ++ans; } } return ans; }
public int findMinArrowShots_optimize(int[][] points) { PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> { if (a[0] == b[0]) { return a[1] - b[1]; } return a[0] - b[0]; }); for (int i = 0; i < points.length; i++) { pq.add(points[i]); }
List<int[]> list = new ArrayList<>(); while (!pq.isEmpty()) { int[] poll = pq.poll(); boolean merged = false; for (int j = 0; j < list.size(); j++) { merged = merge(list.get(j), poll); if (merged) { break; } } if (!merged) { list.add(poll); } }
return list.size(); }
public int findMinArrowShots_fial(int[][] points) { List<int[]> list = new ArrayList<>(); list.add(new int[]{points[0][0], points[0][1]}); for (int i = 1; i < points.length; i++) { boolean merged = false; for (int j = 0; j < list.size(); j++) { merged = merge(list.get(j), points[i]); if (merged) { break; } } if (!merged) { list.add(new int[]{points[i][0], points[i][1]}); } } return list.size(); }
private boolean merge(int[] a, int[] b) { if (a[1] < b[0] || a[0] > b[1]) { return false; } a[0] = Math.max(a[0], b[0]); a[1] = Math.min(a[1], b[1]); return true; }
public static void main(String[] args) { _452用最少数量的箭引爆气球 q = new _452用最少数量的箭引爆气球();
System.out.println(q.findMinArrowShots_optimize(new int[][]{{3, 9}, {7, 12}, {3, 8}, {6, 8}, {9, 10}, {2, 9}, {0, 9}, {3, 9}, {0, 6}, {2, 8}})); } }
|