diff --git a/src/main/java/com/dota/binarySearch/_2861/Solution.java b/src/main/java/com/dota/binarySearch/_2861/Solution.java new file mode 100644 index 0000000..343f467 --- /dev/null +++ b/src/main/java/com/dota/binarySearch/_2861/Solution.java @@ -0,0 +1,50 @@ +package com.dota.binarySearch._2861; + +import java.util.List; + +class Solution { + public static void main(String[] args) { + new Solution().maxNumberOfAlloys(1,2,24308609, List.of(List.of(40), List.of(88)),List.of(82685338),List.of(2)); + } + public int maxNumberOfAlloys(int n, int k, int budget, List> composition, List stock, List cost) { + int max = 0; + for (Integer i : stock) { + max = Math.max(max, i); + } + int i = 0, j = budget + 1 + max; + while (i + 1 < j) { + int mid = i + (j - i) / 2; + if (check(mid, budget, composition, stock, cost)) { + i = mid; + } else { + j = mid; + } + } + return i; + } + + // 主要看钱够不够造k份合金 + boolean check(int k, long budget, List> composition, List stock, List cost) { + long t = budget; + for (List integers : composition) { + budget = t; + for (int j = 0; j < integers.size(); j++) { + if ((long)stock.get(j) >= (long) k * integers.get(j)) { + continue; + } + + long a = (long) k * integers.get(j) - stock.get(j); + long b = a * cost.get(j); + if (budget < b) { + budget = - 1; + break; + } + budget -= b; + } + if (budget >= 0) { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/stack/_3170/Solution.java b/src/main/java/com/dota/stack/_3170/Solution.java new file mode 100644 index 0000000..76b6c62 --- /dev/null +++ b/src/main/java/com/dota/stack/_3170/Solution.java @@ -0,0 +1,31 @@ +package com.dota.stack._3170; + +import java.util.Comparator; +import java.util.HashSet; +import java.util.PriorityQueue; + +class Solution { + public String clearStars(String s) { + var stack = new PriorityQueue((a,b)->{ + if (s.charAt(a)==s.charAt(b)) { + return b - a; + } + return s.charAt(a) - s.charAt(b); + }); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '*') { + stack.poll(); + } else { + stack.add(i); + } + } + var set = new HashSet<>(stack); + var sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + if (set.contains(i)) { + sb.append(s.charAt(i)); + } + } + return sb.toString(); + } +} \ No newline at end of file