题解 | #农场牛的标识II#
农场牛的标识II
https://www.nowcoder.com/practice/a69dc54eeffa43218d06f62cc733c6c0
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int singleNumberII (int[] nums) { // write code here int ones = 0; // 记录出现一次的位 int twos = 0; // 记录出现两次的位 for (int num : nums) { // 更新出现两次的位 twos |= (ones & num); // 更新出现一次的位 ones ^= num; // 出现三次的位清零 int threeMask = ~(ones & twos); ones &= threeMask; twos &= threeMask; } return ones; } }
- 遍历数组中的每个元素,利用位运算来找出只出现了一次的牛的标识。
- 假设一个整数需要3个位来表示,分别是
a
、b
、c
,那么对于某个位而言,它出现了1次和出现了3次的情况是不影响最终结果的。因此,我们可以使用两个变量ones
和twos
来记录当前位上出现了1次和2次的情况。 - 遍历数组中的每个元素,根据当前位的状态更新
ones
和twos
。 - 返回
ones
作为结果。