From 1872a726b10a73b3aa8143281ad5baac79f37c63 Mon Sep 17 00:00:00 2001 From: algorithmzuo Date: Sat, 17 Sep 2022 18:36:53 +0800 Subject: [PATCH] modify code --- .../第02期/mca_02/Code01_WhoWin21Balls.java | 32 +++++++++++++++++-- .../mca_02/Code02_MinWaitingTime.java | 19 +++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/MCA算法突击课/第02期/mca_02/Code01_WhoWin21Balls.java b/MCA算法突击课/第02期/mca_02/Code01_WhoWin21Balls.java index cc2acc4..63fc430 100644 --- a/MCA算法突击课/第02期/mca_02/Code01_WhoWin21Balls.java +++ b/MCA算法突击课/第02期/mca_02/Code01_WhoWin21Balls.java @@ -10,6 +10,30 @@ package 第02期.mca_02; // 请问谁有必胜策略 public class Code01_WhoWin21Balls { + // zuo(21, 0, 0, "甲","乙") + // 甲 5个 + // zuo(16, 0, 5, "乙", "甲") + + // 当前球数balls, + // 先手,first + // 后手,second + // 所有人拿光球,谁的总球数是偶数,谁赢 + // 返回赢家的字符串,first second + public static String zuo(int balls, int firstPick, int secondPick, String first, String second) { + if (balls == 0) { + return firstPick % 2 == 0 ? first : second; + } + // balls =2 + // 还有的拼 + for (int pick = 1; pick <= Math.min(3, balls); pick++) { + String win = zuo(balls - pick, secondPick, firstPick + pick, second, first); + if (win.equals(first)) { + return first; + } + } + return second; + } + // balls = 21 // ball是奇数 public static String win(int balls) { @@ -154,9 +178,13 @@ public class Code01_WhoWin21Balls { // 为了测试 public static void main(String[] args) { - for (int balls = 1; balls <= 500; balls += 2) { - System.out.println("球数为 " + balls + " 时 , 赢的是 " + win(balls)); + for (int n = 1; n <= 20; n += 2) { + System.out.println(n + " : " + zuo(n, 0, 0, "甲", "乙")); } + +// for (int balls = 1; balls <= 500; balls += 2) { +// System.out.println("球数为 " + balls + " 时 , 赢的是 " + win(balls)); +// } } } \ No newline at end of file diff --git a/MCA算法突击课/第02期/mca_02/Code02_MinWaitingTime.java b/MCA算法突击课/第02期/mca_02/Code02_MinWaitingTime.java index d7b0789..6787ed6 100644 --- a/MCA算法突击课/第02期/mca_02/Code02_MinWaitingTime.java +++ b/MCA算法突击课/第02期/mca_02/Code02_MinWaitingTime.java @@ -12,6 +12,25 @@ import java.util.PriorityQueue; // 假设:m远远大于n,比如n<=1000, m <= 10的9次方,该怎么做? public class Code02_MinWaitingTime { + // arr中,>= num 的最左位置,返回位置!下标! + // arr中,没有 >= num的数字,返回-1,表示不存在 + public static int find(int[] arr, int num) { + int l = 0; + int r = arr.length - 1; + int m = 0; + int ans = -1; + while (l <= r) { + m = (l + r) / 2; + if (arr[m] >= num) { + ans = m; + r = m - 1; + } else { + l = m + 1; + } + } + return ans; + } + public static int minWaitingTime1(int[] arr, int m) { if (arr == null || arr.length == 0) { return -1;