中级_1) 三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]

public class ThreeSum {
    public static List<List<Integer>> threeSum(int[] num) {
        Arrays.sort(num);
        List<List<Integer>> res = new LinkedList<>();
        
        for (int i = 0; i < num.length-2; i++) {
            
            if (i == 0 || (i > 0 && num[i] != num[i-1])) {
                int lo = i+1, hi = num.length-1, sum = 0 - num[i];
                while (lo < hi) {
                    if (num[lo] + num[hi] == sum) {
                        res.add(Arrays.asList(num[i], num[lo], num[hi]));
                        //为了去重
                        while (lo < hi && num[lo] == num[lo+1])
                            lo++;
                        while (lo < hi && num[hi] == num[hi-1])
                            hi--;
                        lo++;
                        hi--;
                    } 
                    else if (num[lo] + num[hi] < sum) lo++;
                    else hi--;
                }
            }
        }
        return res;
    }

    public static void main(String[] args) {
        int[]nums={-1, 0, 1, 2, -1, -4};
        System.out.println(threeSum(nums));
    }
}

在Java中,你可以创建一个猜数字游戏,让用户从1100之间猜测,同时提供初级、中级、高级三个难度等级。以下是基本的游戏框架: ```java import java.util.Random; import java.util.Scanner; public class GuessNumberGame { enum DifficultyLevel { EASY(1), MEDIUM(50), HARD(100); private final int rangeStart; DifficultyLevel(int rangeStart) { this.rangeStart = rangeStart; } int getRangeStart() { return rangeStart; } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); DifficultyLevel level; int randomNumber, attempts = 0; // 获取用户选择的难度级别 System.out.println("选择难度等级:"); System.out.println("1. 初级 (1-50)"); System.out.println("2. 中级 (51-100)"); System.out.println("3. 高级 (1-100)"); level = chooseDifficulty(scanner); // 生成随机数 randomNumber = level.getRangeStart() + new Random().nextInt(level.getRangeEnd() - level.getRangeStart()); // 游戏循环 while (true) { System.out.println("你在 " + level.getDescription() + " 难度下,有猜测机会。"); System.out.print("请输入你的猜测数字 (1-" + level.getRangeEnd() + "): "); int guess = scanner.nextInt(); if (guess == randomNumber) { System.out.println("恭喜,你猜对了!你一共尝试了 " + ++attempts + " 次。"); break; } else if (guess < randomNumber) { System.out.println("太小了,再试一次吧!"); } else { System.out.println("太大了,再试试。"); } } scanner.close(); } private static DifficultyLevel chooseDifficulty(Scanner scanner) { System.out.print("你的选择是: "); int input = scanner.nextInt(); switch (input) { case 1: return DifficultyLevel.EASY; case 2: return DifficultyLevel.MEDIUM; case 3: return DifficultyLevel.HARD; default: System.out.println("无效的选择,请重新输入!"); return chooseDifficulty(scanner); } } // 描述等级的辅助方法 private static String getDescription(DifficultyLevel level) { switch (level) { case EASY: return "1-50"; case MEDIUM: return "51-100"; case HARD: return "1-100"; } } } ``` 在这个游戏中,玩家可以选择不同难度,然后电脑随机生成一个范围内的数字,直到玩家猜对为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值