Java:给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
可以使用位运算来解决这个问题。具体来说,我们可以对所有数字的二进制表示的每一位进行统计,统计每一位上所有数字出现次数的和,并对 3 取余,如果余数不为 0,则说明只出现一次的数字在这一位上有值。最后将所有有值的位组合起来,就得到了只出现一次的数字。
以下是 Java 代码实现:
public int singleNumber(int[] nums) { int[] bitSum = new int[32]; for (int num : nums) { for (int i = 0; i < 32; i++) { bitSum[i] += (num >> i) & 1; } } int res = 0; for (int i = 0; i < 32; i++) { res |= (bitSum[i] % 3) << i; } return res; }
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。
好的,这是一个算法问题,可以直接回答。这个问题是有经典算法解决的,也就是所谓的“异或和”,可以通过对数组中的所有元素进行异或操作来得到只出现了一次的元素。具体实现可以参考以下代码:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
ones, twos = 0, 0
for num in nums:
ones = (ones ^ num) & ~twos
twos = (twos ^ num) & ~ones
return ones
其中的 ones
和 twos
分别记录当前位上已经出现 1 次和 2 次的元素,对于新来的元素,通过对 ones
和 twos
进行异或操作来更新出现次数。最终,只出现了一次的元素就是 ones
的值。
Java:你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
答案:可以使用异或运算来解决这个问题,将数组中的所有元素进行异或运算,最终得到的结果就是只出现一次的元素。具体实现可以参考以下代码:
public int singleNumber(int[] nums) { int result = 0; for (int num : nums) { result ^= num; } return result; }
相关推荐
















