题解 | 田忌赛马
田忌赛马
https://www.nowcoder.com/practice/49d799f65a0749588e9cd7e6135a4a9a
采用贪心算法来解决,这里可以不是3匹马
import java.util.*;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 读取齐王的马
int[] qi = new int[3];
String[] qStr = br.readLine().split(" ");
for (int i = 0; i < 3; i++) {
qi[i] = Integer.parseInt(qStr[i]);
}
// 读取田忌的马
int[] tian = new int[3];
String[] tStr = br.readLine().split(" ");
for (int i = 0; i < 3; i++) {
tian[i] = Integer.parseInt(tStr[i]);
}
Arrays.sort(tian);
Arrays.sort(qi);
// 贪心算法:田忌用最弱的马对齐王最强的马(尽可能输掉不需要赢的比赛)
// 或者用最强的马对齐王最强的马(尽力赢得关键比赛)
// 这里我们使用经典的田忌赛马贪心策略
int tianWins = 0;
int qiWins = 0;
int requiredWins = 3 / 2 + 1; // 需要赢得至少一半以上的比赛(三局两胜、五局三胜等)
// 双指针法
int tianSlow = 0, tianFast = 3 - 1;
int qiSlow = 0, qiFast = 3 - 1;
for (int i = 0; i < 3; i++) {
if (tian[tianFast] > qi[qiFast]) {
// 田忌最强的马能赢齐王最强的马
tianWins++;
tianFast--;
qiFast--;
} else if (tian[tianFast] < qi[qiFast]) {
// 田忌最强的马赢不了齐王最强的马,用最弱的马消耗掉齐王最强的马
qiWins++;
tianSlow++;
qiFast--;
} else {
// 最强的马速度相等
if (tian[tianSlow] > qi[qiSlow]) {
// 田忌最弱的马能赢齐王最弱的马
tianWins++;
tianSlow++;
qiSlow++;
} else {
// 用最弱的马对齐王最强的马
if (tian[tianSlow] < qi[qiFast]) {
qiWins++;
}
tianSlow++;
qiFast--;
}
}
}
if (tianWins >= requiredWins) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
