剑指 Offer 56 - II. 数组中数字出现的次数 II
描述
在一个数组 nums
中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
链接
剑指 Offer 56 - II. 数组中数字出现的次数 II - 力扣(LeetCode) (leetcode-cn.com)
解法:位运算yyds
解题思路
1 class Solution { 2 public int singleNumber(int[] nums) { 3 // 4 if (nums == null) return -1; 5 int res = 0; 6 7 // for循环中 用 i 去 控制 是在 哪一位 8 for (int i = 0; i < 32; i++) { 9 int oneCount = 0; 10 for (int num : nums){ 11 oneCount += (num >>> i) & 1; 12 } 13 if (oneCount % 3 == 1) // 只有当 为 1的时候,因为除了 自己,其他的都有 3 * n 14 res |= 1 << i; // 运算符 | 或 运算,为保证 100 | 10 = 110 15 } 16 return res; 17 } 18 }