一、核心知识点贪心算法局部最优 → 全局最优每一步选当下最赚的策略。双指针技巧用左右指针锁定数组最小/最大值不断向中间收缩遍历。排序预处理必须先把两组数据从小到大排序才能用贪心匹配。二、田忌赛马专属思路极简版把我的马、田忌的马全部升序排序开4个指针我左最慢右最快田忌左最慢右最快匹配规则我最慢 田忌最慢 → 直接赢一局俩左指针右移赢不了 → 拿我最慢的马去送掉田忌最快的马牺牲保底最后统计赢的局数就是答案。三、避坑提醒❌ 暴力数多少匹马能赢、改break/continue蒙答案纯巧合大数据必错✅ 排序双指针贪心官方正解能过5e4大数据。import java.util.*; public class Main{ public static void main(String[]args){ // 1. 创建扫描器用于读取输入数据 Scanner scan new Scanner (System.in); // 2. 读取马匹数量n双方各有n匹马 int n scan.nextInt(); // 3. 定义两个数组分别存储我的马匹速度和田忌的马匹速度 int[] my new int[n]; int[] tian new int[n]; // 4. 读取我的所有马匹速度存入my数组 for (int i 0; i n; i) my[i] scan.nextInt(); // 5. 读取田忌的所有马匹速度存入tian数组 for (int i 0; i n; i) tian[i] scan.nextInt(); // 6. 核心步骤1对两组马匹速度进行升序排序贪心匹配的前提 Arrays.sort(my); Arrays.sort(tian); // 7. 核心步骤2定义双指针左右各两个分别对应双方最慢和最快的马 int myleft 0; // 我的马左指针指向最慢的马数组最左侧 int myright n-1; // 我的马右指针指向最快的马数组最右侧 int tianleft 0; // 田忌的马左指针指向最慢的马数组最左侧 int tianright n-1;// 田忌的马右指针指向最快的马数组最右侧 // 8. 定义计数变量统计获胜局数用long避免数据溢出适配n5e4的情况 long ans 0; // 9. 核心步骤3双指针循环匹配直到所有马匹都匹配完毕 while(myleft myright) { // 情况1我的最慢马 能赢 田忌的最慢马 → 直接赢一局 if(my[myleft] tian[tianleft]) { ans; // 获胜局数1 myleft; // 我的最慢马已使用左指针右移下一匹最慢马 tianleft; // 田忌的最慢马已使用左指针右移下一匹最慢马 }else { // 情况2我的最慢马 赢不了 田忌的最慢马 → 用我的最慢马送掉田忌的最快马 myleft ; // 我的最慢马牺牲左指针右移 tianright--; // 田忌的最快马被消耗右指针左移 } } // 10. 输出最终获胜的局数 System.out.println(ans); } }