题解 | #农场牛的标识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作为结果。
全部评论

相关推荐

06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
不亏是提前批,神仙打架,鼠鼠不配了
站队站对牛:现在92都报工艺岗了
投递韶音科技等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务