剑指 Offer 56 - II. 数组中数字出现的次数 II
巧用二进制 + int 数组
执行用时:7 ms, 在所有 Java 提交中击败了66.18% 的用户 内存消耗:39.5 MB, 在所有 Java 提交中击败了40.31% 的用户
class Solution {/*** 以用例 {3, 4, 3, 3} 为例子** 把 nums 内的整数拆分为二进制累加到 bits 数组中* 3 的二进制:011* 4 的二进制:100* 累加之后 bits 结果:[..., 1, 3, 3]** 再将 bits 内的元素对 3 取余后转换为十进制*/public int singleNumber(int[] nums) {int[] bits = new int[32];// 把 nums 内的整数拆分为二进制累加到 bits 数组中for (int num : nums) {for (int i = 31; i >= 0; i--) {if (num != 0) {bits[i] += (num & 1);num >>= 1;}}}// 将二进制转为十进制int res = 0;for (int i = 0; i < 32; i++) {res <<= 1;res += bits[i] % 3;}return res;}}
