剑指 Offer 56 - II. 数组中数字出现的次数 II

it2023-11-13  66

LeetCode: 剑指 Offer 56 - II. 数组中数字出现的次数 II

有限状态自动机遍历统计 ( 模板 ) 位运算

遍历统计

位运算 >> 重点代码

public int singleNumber(int[] nums) { int[] counts = new int[32]; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < 32; j++) { // 二进制32位数 counts[j] += nums[i] & 1; nums[i] >>>= 1; } } int ans = 0, m = 3; for (int i = 0; i < 32; i++) { ans <<= 1; // 必须 31 - i ans |= counts[31 - i] % 3; } return ans; }

超时代码

通过 list 的 indexOf lastIndexOf 方法找出前一个和后一个下标,如果一致,说明只出现了一次

public int singleNumber(int[] nums) { String s = Arrays.toString(nums); List<String> list = Arrays.asList(s.substring(1, s.length() - 1).split(", ")); for (int i = 0; i < nums.length; i++) { if(nums[i] == 0) continue ; int a = list.indexOf(nums[i]+""); int b = list.lastIndexOf(nums[i]+""); if(a == b){ return nums[i]; }else { nums[b] = 0; } } return 0; }


>> 解题思路

最新回复(0)