【leetcode hot 100 136】只出现一次的数字
解法一:(异或XOR)相同的数字出现两次则归零
class Solution {public int singleNumber(int[] nums) {int result = 0;for(int num:nums){result ^= num;}return result;}
}
注意:
- 其他方法:HashList记录次数再查找数组;HashSet数组记录数字,出现第一次加入,出现第二次删除。他们时间空间复杂度都是O(n),不符合题目要求。
- 多个元素只出现一次
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;class Solution {public List<Integer> findDuplicates(int[] nums) {List<Integer> result = new ArrayList<>();for (int i = 0; i < nums.length; i++) {int num = Math.abs(nums[i]);int index = num - 1;if (nums[index] < 0) {result.add(num);} else {nums[index] *= -1;}}return result;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine();int[] nums = parseInput(input);Solution solution = new Solution();List<Integer> duplicates = solution.findDuplicates(nums);System.out.println(formatOutput(duplicates));}private static int[] parseInput(String input) {String cleaned = input.replaceAll("[\\[\\] ]", "");String[] parts = cleaned.split(",");int[] nums = new int[parts.length];for (int i = 0; i < parts.length; i++) {nums[i] = Integer.parseInt(parts[i]);}return nums;}private static String formatOutput(List<Integer> list) {StringBuilder sb = new StringBuilder("[");for (int i = 0; i < list.size(); i++) {sb.append(list.get(i));if (i < list.size() - 1) {sb.append(",");}}sb.append("]");return sb.toString();}
}