解决数组两数之和问题与逻辑推理找出谋杀案凶手

时间:2024-10-25 14:38:02

给定一个整数数组nums和一个整数目标值target(2<=nums.length<=10^4),请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例1:
输入:nums=[2,7,11,15],target=9
输出:[0,1]
解释:因为nums[0]+nums[1]==9,返回[0,1]。
示例2:
输入:nums =[3,2,4], target=6
输出:[1, 2]
示例3:
输入:nums = [3, 3], target = 6
输出:[0, 1]

 public static void test1() {
        int[] nums = {2, 7, 11, 15};
        Scanner scanner = new Scanner(System.in);
        int target = scanner.nextInt();
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    System.out.println("[" + i + "," + j + "]");
                } else {
                    System.out.println("没有结果");
                }
            }
        }
    }

某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说。
已知3个人说了真话,1个人说的是假话。
根据这些信息,确定到底谁是凶手。

public static void test2() {
        String[] suspects = {"A", "B", "C", "D"};
        for (String murderer : suspects) {
            int count = 0;
            if (!murderer.equals("A")) {
                count++;
            }
            if (murderer.equals("C")) {
                count++;
            }
            if (murderer.equals("D")) {
                count++;
            }
            if (!murderer.equals("D")) { // 如果D或C不是凶手,则D的话为真
                count++;
            }
            // 检查是否正好有3个真话
            if (count == 3) {
                System.out.println("根据供词分析,凶手是: " + murderer);
                return;
            }
        }
    }