LeetCode每日一题题解:剑指 Offer II 004. 只出现一次的数字 -题解-python && C++源代码

简介: LeetCode每日一题题解:剑指 Offer II 004. 只出现一次的数字 -题解-python && C++源代码

剑指 Offer II 004. 只出现一次的数字


难度中等52收藏分享切换为英文接收动态反馈


给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。


示例 1:


输入:nums = [2,2,3,2]

输出:3

示例 2:


输入:nums = [0,1,0,1,0,1,100]

输出:100

提示:


1 <= nums.length <= 3 * 104

-231 <= nums[i] <= 231 - 1

nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

题目思路:


这道题的思路总的来说很简答,就是将每个数变成二进制的,这么来说,数组中的所有数都变成二进制的参与本程序的运算,

对于每个数来说,不管是什么数当他变成二进制之后他的每一位不是0就是1,我们对数组中每个数变成二进制之后的每一位

进行求和,然后对3进行取余,就会得到单独出现的那位数,(因为其他的数都是出现三次的,所有对3取余之后都为0,多出来

的那个就是只出现一次的),如果这个数位1,则将1移动到i位置上,与a进行或运算,相当于在i位上赋1,如果是0则不用管

因为在移动过程中会对没有运算的地方自动补0.


python代码:

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        ans = 0  #构建变量a = 0
        for i in range(32):  #遍历32位数,因为所有数转换为二进制的话,一共可有32位
            total = sum((num >> i) & 1 for num in nums)   #定义个整数来存储数组的某位的数相加的和,所有数的某位数相加 得到all
            if total % 3:  #如果all%3 为0,则不进行如下操作,直接跳入下一个循环,因为当前补0即可
                if i == 31:  #/如果all%3 为0,则不进行如下操作,直接跳入下一个循环,因为当前补0即可
                    ans = ans - (1 << i)  #因为python对有符号数和无符号数没有区分,因此我们这里需要进行31位的判断
                else:
                    ans = ans | (1 << i)  #如果为1的话,则需要将1位移到相应的位置,然后与a进行或运算,即在a的i位上赋值1
        return ans

C++代码:

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int a = 0;  //构建变量a = 0
        for (int i = 0; i < 32; i++){  //遍历32位数,因为所有数转换为二进制的话,一共可有32位
            int all = 0;    //定义个整数来存储数组的某位的数相加的和
            for (int num: nums){
                all += (num>>i)&1;  //所有数的某位数相加 得到all
            }
            if (all%3){    //如果all%3 为0,则不进行如下操作,直接跳入下一个循环,因为当前补0即可
                a |= 1<<i;    //如果为1的话,则需要将1位移到相应的位置,然后与a进行或运算,即在a的i位上赋值1
            }
        }
        return a;  //输出答案
    }
};
相关文章
|
2天前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
25 0
|
5天前
|
Unix C语言 C++
Python调用C/C++
Python调用C/C++
11 2
|
2天前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
6 0
WK
|
7天前
|
机器学习/深度学习 运维 Java
Python 相对于 C++ 有哪些明显的优势
C++是一种强大且高效的编程语言,被广泛应用在系统软件、游戏开发、嵌入式系统等多个领域。然而Python在某些方面展现出显著优势:Python语法简洁直观,易于学习与使用,提高了代码的可读性和团队协作效率;拥有丰富的第三方库和框架资源,能有效提升开发效率;具备良好的跨平台性,无需大量修改即可适应不同操作系统;
WK
17 0
|
算法 Python
Python实现快乐的数字
Python实现快乐的数字
358 0
Python实现快乐的数字
|
2天前
|
存储 数据挖掘 数据库
探索Python编程:从基础到高级探索移动应用开发之旅:从概念到实现
【8月更文挑战第29天】本文将带你进入Python的世界,无论你是初学者还是有一定经验的开发者。我们将从Python的基础知识开始,然后逐步深入到更复杂的主题。你将学习到如何编写清晰、高效的代码,以及如何使用Python进行数据分析和网络编程。最后,我们将介绍一些高级主题,如装饰器和生成器。让我们一起开始这段旅程吧!
|
1天前
|
存储 Kubernetes Cloud Native
探索Python编程的奥秘云原生时代的容器编排:Kubernetes入门与实践
【8月更文挑战第30天】本文以浅显易懂的方式,探讨了Python编程的核心概念和技巧。从基础语法到高级特性,再到实际应用案例,逐步引导读者深入理解Python编程的精髓。通过本文的学习,读者将能够掌握Python编程的基本技能,并激发进一步探索的兴趣。
19 13
|
1天前
|
运维 Kubernetes Cloud Native
云原生之旅:Kubernetes 集群的搭建与实践Python 编程入门:从零基础到编写实用脚本
【8月更文挑战第30天】在数字化转型的大潮中,云原生技术以其弹性、可扩展性及高效运维能力成为企业IT架构升级的关键。本文将通过实际操作演示如何在本地环境搭建一个简易的Kubernetes集群,带你领略云原生的魅力所在。从集群规划到服务部署,每一步都是对云原生理念的深刻理解和应用。让我们共同探索,如何通过Kubernetes集群的搭建和运维,提升业务灵活性和创新能力。
|
1天前
|
数据采集 运维 Devops
探索Python编程之美:从基础到进阶自动化运维的变革之路:从脚本到DevOps
【8月更文挑战第30天】在数字化时代的浪潮中,编程已经成为一门重要的技能。Python以其简洁明了的语法和强大的功能,成为了许多初学者的首选编程语言。本文将通过浅显易懂的语言,带领读者从Python的基础语法出发,逐步深入到面向对象编程、网络爬虫开发以及数据分析等高级应用,旨在帮助初学者构建扎实的编程基础,并激发他们进一步探索编程世界的热情。文章不仅分享实用的编程技巧,还将探讨如何将编程知识应用于解决实际问题,以期培养读者的问题解决能力和创新思维。
下一篇
云函数