56 - II. 数组中数字出现的次数 II

news2024/11/16 12:32:20

comments: true
difficulty: 中等
edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9856%20-%20II.%20%E6%95%B0%E7%BB%84%E4%B8%AD%E6%95%B0%E5%AD%97%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0%20II/README.md

面试题 56 - II. 数组中数字出现的次数 II

题目描述

在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

 

示例 1:

输入:nums = [3,4,3,3]
输出:4

示例 2:

输入:nums = [9,1,7,9,7,9,7]
输出:1

 

限制:

  • 1 <= nums.length <= 10000
  • 1 <= nums[i] < 2^31

 

解法

方法一:位运算

我们用一个长度为 32 的数组 c n t cnt cnt统计所有数字的每一位中 1 1 1 的出现次数。如果某一位的 1 1 1 的出现次数能被 3 3 3 整除,那么那个只出现一次的数字二进制表示中对应的那一位也是 0 0 0【说明一定不属于非重复数字的位】;否则,那个只出现一次的数字二进制表示中对应的那一位是 1 1 1

时间复杂度 O ( n × C ) O(n \times C) O(n×C),空间复杂度 O ( C ) O(C) O(C)。其中 n n n 是数组的长度;而 C C C 是整数的位数,本题中 C = 32 C=32 C=32

【LeetCode刷题力扣题解 | 剑指Offer56 - II. 数组中数字出现的次数 II | 画图算法思路讲解及C++代码实现】 https://www.bilibili.com/video/BV1ZP4y1x7N3/?share_source=copy_web&vd_source=ed4a51d52f6e5c9a2cb7def6fa64ad6a
核心:重复数字对应为1的位 的个数统计一定为2的倍数。如果不是,就说明 非重复数字 在该位为1。
在这里插入图片描述

Python3
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        cnt = [0] * 32
        for x in nums:
            for i in range(32):
                cnt[i] += x & 1
                x >>= 1
        return sum(1 << i for i in range(32) if cnt[i] % 3)
Java
class Solution {
    public int singleNumber(int[] nums) {
        int[] cnt = new int[32];
        for (int x : nums) {
            for (int i = 0; i < 32; ++i) {
                cnt[i] += x & 1;
                x >>= 1;
            }
        }
        int ans = 0;
        for (int i = 0; i < 32; ++i) {
            if (cnt[i] % 3 == 1) {
                ans |= 1 << i;
            }
        }
        return ans;
    }
}
C++
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int cnt[32]{};
        for (int& x : nums) {
            for (int i = 0; i < 32; ++i) {
                cnt[i] += x & 1;
                x >>= 1;
            }
        }
        int ans = 0;
        for (int i = 0; i < 32; ++i) {
            if (cnt[i] % 3) {
                ans |= 1 << i;
            }
        }
        return ans;
    }
};
Go
func singleNumber(nums []int) (ans int) {
	cnt := [32]int{}
	for _, x := range nums {
		for i := range cnt {
			cnt[i] += x & 1
			x >>= 1
		}
	}
	for i, v := range cnt {
		if v%3 == 1 {
			ans |= 1 << i
		}
	}
	return
}
Rust
impl Solution {
    pub fn single_number(nums: Vec<i32>) -> i32 {
        let mut counts = [0; 32];
        for num in nums.iter() {
            for i in 0..32 {
                counts[i] += (num >> i) & 1;
            }
        }
        let mut res = 0;
        for count in counts.iter().rev() {
            res <<= 1;
            res |= count % 3;
        }
        res
    }
}
JavaScript
/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function (nums) {
    const cnt = new Array(32).fill(0);
    for (let x of nums) {
        for (let i = 0; i < 32; ++i) {
            cnt[i] += x & 1;
            x >>= 1;
        }
    }
    let ans = 0;
    for (let i = 0; i < 32; ++i) {
        if (cnt[i] % 3) {
            ans |= 1 << i;
        }
    }
    return ans;
};
C#
public class Solution {
    public int SingleNumber(int[] nums) {
        int[] cnt = new int[32];
        foreach(int x in nums) {
            int v = x;
            for (int i = 0; i < 32; ++i) {
                cnt[i] += v & 1;
                v >>= 1;
            }
        }
        int ans = 0;
        for (int i = 0; i < 32; ++i) {
            if (cnt[i] % 3 == 1) {
                ans |= 1 << i;
            }
        }
        return ans;
    }
}
Swift
class Solution {
    func singleNumber(_ nums: [Int]) -> Int {
        var bitCounts = [Int](repeating: 0, count: 32)

        for num in nums {
            var x = num
            for i in 0..<32 {
                bitCounts[i] += x & 1
                x >>= 1
            }
        }

        var result = 0
        for i in 0..<32 {
            if bitCounts[i] % 3 == 1 {
                result |= 1 << i
            }
        }

        return result
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大屏可视化常用图标效果表达

1-echarts-雷达图 2-echarts-仪表盘 3-echarts-水球图&#xff08;利用插件&#xff0c;echarts-liquidfill&#xff09; 4-element UI tree 添加连接线&#xff0c;修改样式或使用插件&#xff08;element-tree-line&#xff09; 5-echarts-漏斗图 6-echarts-饼状图嵌套 optio…

力扣刷题之2181.合并零之间的节点

题干描述 给你一个链表的头节点 head &#xff0c;该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val 0 。 对于每两个相邻的 0 &#xff0c;请你将它们之间的所有节点合并成一个节点&#xff0c;其值是所有已合并节点的值之和。然后将所有 0 …

为什么 1T 的硬盘容量只有 931G?真相在这里!

硬盘容量疑问 以一个容量为 1T 的硬盘为例&#xff0c;在 Windows 系统下&#xff0c;容量显示只有 931G&#xff0c;不应该是 1024GB 吗&#xff1f;这到底是为什么呢&#xff1f;是商家在欺骗消费者吗&#xff1f; 按照之前内存大小的计算逻辑&#xff08;1MB 1024KB&…

AI电商,如何提高设计效率?

第一步&#xff1a;找参考 第二步&#xff1a;提取关键词 我用的文心一言 第三步&#xff1a;选择AI绘画工具&#xff08;千鹿 设计助手&#xff09; 千鹿设计助手——FLux文生图&#xff0c;你也可以选择你手上的AI绘画工具 这个新用户注册会赠送1000积分 第四步生图

[笔记] 电机工作制以及软硬特性的本质推导

原始资料来源&#xff1a;某电机厂商 1.电机非常规操作术语和许可次数 1.1 电机操作术语 点动&#xff1a;通电后立即关停&#xff0c;最终速度不到额定转速的1/4电制动&#xff1a;制动到额定转速的1/3逆转&#xff1a;也就是打反车&#xff0c;不等停车&#xff0c;立即翻…

Java、python、php三个版本 抗震救灾物资管理系统 抗洪救灾物资分配系统 救援物资申请平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

在 Web 中判断页面是不是刷新

在 Web 开发中&#xff0c;我们经常需要区分用户是否通过刷新操作重新加载了页面。这一操作可能是由用户手动刷新&#xff08;如按下 F5 键或点击浏览器刷新按钮&#xff09;或通过浏览器自动重新加载。判断页面是否刷新有助于开发者优化用户体验&#xff0c;例如在使用 vue 的…

超详细,手把手带你源码启动 Thingsboard-Gateway + MQTT 接入设备

超详细&#xff0c;手把手带你源码启动 Thingsboard-Gateway MQTT 接入设备 前置条件 thingsboard&#xff0c;我这里选择的是本地源码启动postgresql&#xff0c;这里采用的是个人服务器部署的公共服务EMQX&#xff0c;这里同样采用服务器部署的公共服务MQTTX 客户端Mysql【…

Fiddle的使用------一个非常好用且正规的抓包工具

Fiddle的下载安装&#xff08;看完再去下载安装&#xff09; https://www.telerik.com/download/fiddler 1.点击连接&#xff0c;在表格填上数据&#xff0c;点击下载&#xff0c;下载结束了就安装&#xff0c;一路next就可以了。 2.修改一下设置 以上跟我一样设置&#xff…

Unity 是否能和黑神话悟空一样,接入Nivida的DLSS,用NSight Graphics实际测试

NSight作为Nivida 显卡的调试工具&#xff0c;因为国内都是手游开发盛行的年代&#xff0c;远没有RenderDoc或者高通的QuatXXX 出名 选择NSight的原因很简单&#xff1a; Nividia 财大气粗&#xff0c;倒不是主因&#xff0c; 因为其CEO爱出名&#xff0c;所以手下的人只…

视觉SLAM ch5——相机与图像

一、单目模型 前言&#xff1a;本大标题下1~4部分讲述的都是单目针孔相机 SLAM的数学本质可以抽象为运动方程&#xff08;x&#xff09;和观测方程&#xff08;z&#xff09;&#xff08;书上的第二部分&#xff09; 教材第二章截图 书中P24页截图 其中的未知量为xk&#xff…

828华为云征文|几分钟,即可在华为云Flexus X服务器部署安全稳定的——水果生鲜商城配送小程序

最近由于公司需要开发一个水果生鲜同城配送的小程序&#xff0c;源码代码已经有了&#xff0c;相对于应的功能也开发的七七八八了&#xff0c;随着生鲜商城小程序的相对于应的功能开发逐渐接近尾声。 然而&#xff0c;在这个关键时刻&#xff0c;一个至关重要的决定摆在了团队面…

javase复习day22泛型、set、数据结构

泛型 package MyGenerics;import java.util.ArrayList; import java.util.Iterator;public class GenericsTest1 {public static void main(String[] args) {//没有泛型的情况ArrayList list new ArrayList();//所有数据都被认为是Object类型&#xff0c;都可以加入集合中list…

【操作系统】汇总二、进程管理

进程管理 二、进程与线程 文章目录 进程管理二、进程与线程1.程序1.1顺序执行的特征1.2并发执行的特征1.3 C语言编写的程序 2.进程Process2.1定义&#xff08;组织&#xff09;2.1.1程序段2.1.2数据段❗2.1.3进程控制块PCB1&#xff09;内容2&#xff09;作用3&#xff09;进程…

C++详解string(全面解析)

目录 string的概念&#xff1a; string的框架&#xff1a; 1、成员函数 2、迭代器&#xff08;Iterators&#xff09;​编辑 3、容量 4、元素访问 5、修改 6、非成员函数重载 string的构造和拷贝构造&#xff1a; string的析构&#xff1a; string的访问&#xff1a;…

树模式数据表设计学习

引子&#xff1a; 场景&#xff1a;某读书网站&#xff0c;支持读者评论文章&#xff0c;并且对评论支持回复功能。设计的表如下&#xff1a; 问题点&#xff1a;你想获取一个评论下所有的评论信息&#xff1f; 将所有评论一次性取出、轮巡遍历&#xff0c;获取到所有数据。 …

几款可以让销售管理事倍功半的CRM软件推荐!

本文将盘点几款CRM软件&#xff0c;为企业选型提供参考&#xff01; 想象一下这样一个场景&#xff0c;一家企业的销售团队每天忙碌地跟进客户&#xff0c;却因为信息分散、管理混乱而效率低下。CRM 软件就如同一位得力助手&#xff0c;将客户信息有序整合&#xff0c;助力企业…

Unity核心实践小项目

要源码包的私信我。 简介 衔接Unity核心学习后的实操小项目 需求分析 准备工作 面板基类 为了能够控制一画布整体的透明度&#xff0c;所以需要给每个面板都添加一个 CanvasGroup组件 UI管理器 UGUI方面的参数设置 开始场景 场景搭建 直接用资源包搭建好的场景&#xff1a;…

VD1013 DFN小封装芯片 适用于小电流的输出的电池保护芯片

VD1013内置高精度电压检测电路和延迟电路以及内置MOSFET&#xff0c;是用于单节锂离子/锂聚合物可再充电电池的保护IC。 本IC适合于对1节锂离子/锂聚合物可再充电电池的过充电、过放电和过电流进行保护 。 VD1013具备如下特点: 高精度电压检测电路 过充电检测电压…

chfsgui局域网共享局域网http服务 Cute HTTp File Server软件

Cute HTTp File Server https://wwaz.lanzouv.com/iGHIj29srj0b 密码:eaq3