题解 | #农场牛的标识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个位来表示,分别是abc,那么对于某个位而言,它出现了1次和出现了3次的情况是不影响最终结果的。因此,我们可以使用两个变量onestwos来记录当前位上出现了1次和2次的情况。
  • 遍历数组中的每个元素,根据当前位的状态更新onestwos
  • 返回ones作为结果。
全部评论

相关推荐

ResourceUtilization:算法很难了,现在都需要相关论文还有对应的实习,可以先试试中厂
点赞 评论 收藏
分享
Cherrycola01:0实习 0项目 约等于啥也没有啊 哥们儿这简历认真的吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务