Leetcode 287 寻找重复数 位计数

 

  多种解题方式,位计数感觉最精彩。

  JAVA Hash表:

    public final int findDuplicate(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        for (int i = 0; i < nums.length; i++) {
            if (set.contains(nums[i])) return nums[i];
            set.add(nums[i]);
        }
        return -1;
    }

  JAVA 排序去重:

    public final int findDuplicate0(int[] nums) {
        Arrays.sort(nums);
        for (int i = 0; i < nums.length - 1; i++) {
            int r = nums[i] ^ nums[i + 1];
            if (r == 0) return nums[i];
        }
        return -1;
    }

  JAVA 位计数:

复制代码
    public final int findDuplicate(int[] nums) {
        int re = 0, len = nums.length;
        for (int i = 0; i < 32; i++) {
            int x = 0, y = 0;
            for (int j = 0; j < len; j++) {
                if (((1 << i) & nums[j]) > 0) x++;
                if (j >= 1 && (j & (1 << i)) > 0) y++;
            }
            if (x > y) re |= (1 << i);
        }
        return re;
    }
复制代码

  JS 位计数:

复制代码
/**
 * @param {number[]} nums
 * @return {number}
 */
var findDuplicate = function (nums) {
    let len = nums.length, re = 0;
    for (let bit = 0; bit < 32; bit++) {
        let x = 0, y = 0;
        for (let i = 0; i < len; i++) {
            if ((nums[i] & (1 << bit)) > 0) x++;
            if (i > 0 && (i & (1 << bit)) > 0) y++;
        }
        if (x > y) re |= 1 << bit;
    }
    return re;
};
复制代码

 

posted @   牛有肉  阅读(66)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示