modify code

master
algorithmzuo 2 years ago
parent 2c8ee25e9b
commit 1872a726b1

@ -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));
// }
}
}

@ -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;

Loading…
Cancel
Save