diff --git a/src/main/java/com/dota/Main.java b/src/main/java/com/dota/Main.java index e159df9..77c117d 100644 --- a/src/main/java/com/dota/Main.java +++ b/src/main/java/com/dota/Main.java @@ -10,15 +10,10 @@ public class Main { public static void main(String[] args) { // 当文本光标位于高亮显示的文本处时按 Alt+Enter, // 可查看 IntelliJ IDEA 对于如何修正该问题的建议。 - System.out.print("Hello and welcome!"); - - // 按 Shift+F10 或点击装订区域中的绿色箭头按钮以运行脚本。 - for (int i = 1; i <= 5; i++) { - - // 按 Shift+F9 开始调试代码。我们已为您设置了一个断点, - // 但您始终可以通过按 Ctrl+F8 添加更多断点。 - System.out.println("i = " + i); - } + double sum = 0; + int i = 225462; + sum += (double)i*i; + System.out.print(sum); } } diff --git a/src/main/java/com/dota/binarySearch/_1870/Solution.java b/src/main/java/com/dota/binarySearch/_1870/Solution.java new file mode 100644 index 0000000..1f087af --- /dev/null +++ b/src/main/java/com/dota/binarySearch/_1870/Solution.java @@ -0,0 +1,28 @@ +package com.dota.binarySearch._1870; + +class Solution { + public static void main(String[] args) { + new Solution().minSpeedOnTime(new int[]{1,1,100000}, 2.01); + } + public int minSpeedOnTime(int[] dist, double hour) { + long l = 1; long r = (1000 * 100000); + while (l < r) { + long mid = l + (r - l) / 2; + if (df(dist,mid) <= hour) { + r = mid; + } else { + l = mid + 1; + } + } + return df(dist, r) <= hour ? (int)r: -1 ; + } + + double df(int[] dist, long speed) { + double sum = 0; + for (int i = 0; i < dist.length - 1; i++) { + sum += ((dist[i] + speed - 1) / speed); + } + sum += ((dist[dist.length - 1]) / (double) speed); + return sum; + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/binarySearch/_3296/Solution.java b/src/main/java/com/dota/binarySearch/_3296/Solution.java new file mode 100644 index 0000000..a5bfb4c --- /dev/null +++ b/src/main/java/com/dota/binarySearch/_3296/Solution.java @@ -0,0 +1,25 @@ +package com.dota.binarySearch._3296; + +class Solution { + public long minNumberOfSeconds(int mountainHeight, int[] workerTimes) { + long l = 1, r = (long) mountainHeight *(mountainHeight+1) * workerTimes[0] / 2; + while (l < r) { + long mid = l + (r - l) / 2; + long t = df(mid, workerTimes); + if (t >= mountainHeight) { + r = mid; + } else { + l = mid + 1; + } + } + return r; + } + + long df(long t, int[] workerTimes) { + long sum = 0; + for (int workerTime : workerTimes) { + sum += (long) (Math.sqrt(1 + (double) (8 * t) / workerTime) - 1) / 2; + } + return sum; + } +} \ No newline at end of file diff --git a/src/main/java/com/dota/binarySearch/_3453/Solution.java b/src/main/java/com/dota/binarySearch/_3453/Solution.java new file mode 100644 index 0000000..5649815 --- /dev/null +++ b/src/main/java/com/dota/binarySearch/_3453/Solution.java @@ -0,0 +1,38 @@ +package com.dota.binarySearch._3453; + +class Solution { + public double separateSquares(int[][] squares) { + double l = squares[0][1], r = squares[0][1] + squares[0][2]; + double area = 0; + for (int[] square : squares) { + l = Math.min(l, square[1]); + r = Math.max(r, square[1] + square[2]); + area += (double) square[2] * square[2]; + } + area = area / 2.0; + for(int i=0;i<55;i++) { + double mid = l + (r - l) / 2; + var t = check(squares, mid, area); + if (t) { + r = mid; + } else { + l = mid + 0.000001; + } + } + + return r; + } + + boolean check(int[][] squares, double y, double area) { + // 1是上面积 + double sum = 0; + for (int[] square : squares) { + if (square[1] > y) { + sum += (double) square[2] * square[2]; + } else if (square[1] + square[2] > y) { + sum += (square[1] + square[2] - y) * square[2]; + } + } + return sum <= area; + } +} \ No newline at end of file