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

相关推荐

点赞 评论 收藏
分享
LazyBreeze:项目尽量体现你对技术的理解和深度,不是说把中间件用一下就完事了,你项目里面提到集群和分布式,你真在服务器上部署过吗,感觉太假了,第二个项目说自己用了微服务的什么组件,只是用了没有自己的思考,很难让面试官注意到你的简历。针对某几个技术点自己多思考一下,考虑一下有没有别的替代方案,可以写一下,即使没有真的实现
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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