力扣刷题日常(一)

news/2024/7/5 6:21:21

136.只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间

示例 1 :

输入:nums = [2,2,1]
输出:1

示例 2 :

输入:nums = [4,1,2,1,2]
输出:4

示例 3 :

输入:nums = [1]
输出:1

  本题采用位运算进行解答,首先介绍一下异或运算

不同为1,相同为0

0^1=1
1^1=0

0与任何数进行异或等于任何数。任何数与本身运算等于0,异或满足交换律和集合率

0^N=N
N^N=0
A^B=B^A
A^(B^C)=(A^B)^C

本题求出现一次的数,出现偶数次的数异或为0,最后0与出现一次的数异或则等于该数。下面是程序代码:

def singlenumber(nums):
    er=0
    for i in range(0,len(nums)):
        er=er^nums[i]
    return er

 260.只出现一次的数字III

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。

示例 1:

输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。

示例 2:

输入:nums = [-1,0]
输出:[-1,0]

示例 3:

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

 这一题是求只出现一次的两个数,那么我们 应该如何去求解,首先,如果还是按上题思路,我们假定一个er为0,只出现一次的数分别为a,b,对数组中的每个元素都进行异或,那么最终得到的结果将是er=a^b,无法求求出两个元素。

如何求解,首先两个元素是不一样的数字,所以他们两个异或结果不会是0,也就是er=a^b!=0

这个时候我们可以将整个数组分为两部分,取er最右边为1的二进制数,也就是a和b在这个位置不一样,我们可以根据这个数将其余出现两次的元素分为两部分一部分是该位置元素为1,一部分是该位置元素为0。我们分别对这两部分数求异或即可得到对应的出现一次的数。

 def singleNumber(nums):
        er=0
        for i in range(0,len(nums)):
            er=er^nums[i]
        #求解二进制最右边为1
        rightone=er&(~er+1)  #对原二进制数求反加1与原二进制进行与运算
        er1=0
        for i in range(0,len(nums)):
            if(rightone&nums[i]==0):
                er1^=nums[i]
        a=er1^er
        return [a,er1]


http://lihuaxi.xjx100.cn/news/1903421.html

相关文章

考虑全选然后删的代价转最小割+最小割同一类连inf的边:AT_arc107_f

https://www.luogu.com.cn/problem/AT_arc107_f 理论上界为 ∑ ∣ b i ∣ \sum |b_i| ∑∣bi​∣。考虑现在减少会有什么情况: 不选。代价为 a i ∣ b i ∣ a_i|b_i| ai​∣bi​∣原先为正,所在连通块取绝对值后变负。代价为 − 2 ∣ b i ∣ -2|b_…

页面置换算法详解专题

页面置换算法的功能是:当缺页中断发生,需要调入新的页面而内存已满时,选择内存当中哪个物理页面被置换~ 页面置换算法的目的:尽可能地减少页面的换进换出次数(既缺页中断的次数)。具体来说,把未…

vmware安装银河麒麟V10高级服务器操作系统

vmware安装银河麒麟V10高级服务器操作系统 1、下载银河麒麟V10镜像2、VMware安装银河麒麟V10高级服务器操作系统2.1、新建虚拟机2.2、安装虚拟机 3、配置银河麒麟V10高级服务器操作系统3.1、安装vmware tools3.2、配置静态IP地址 和 dns 1、下载银河麒麟V10镜像 官方提供使用通…

C语言--字符函数与字符串函数

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流 本文由:残念ing 原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各位…

C语言第五十四弹---模拟使用strstr函数

使用C语言模拟使用strstr函数 定义:strstr 是一个 C 标准库函数,用于在一个字符串中查找另一个字符串的第一次出现位置。strstr 函数的声明如下: char* strstr(const char* haystack, const char* needle);它接受两个参数:haysta…

Linux(一):如何在 Linux 中检查未挂载的磁盘

如何在 Linux 中检查未挂载的磁盘 1、概述2、 具体方法3、总结 1、概述 大家好,我是欧阳方超,可以关注我的公众号“欧阳方超”,后续内容将在公众号首发。 在Linux系统中, 挂载磁盘之前需要先检查是否有未挂载的磁盘,那…

Java,自带的排序方法

假如定义了一个学生类,想根据学生的总分对学生进行排序 案例(进去是Student类的定义,用ctrlf 搜Collection,可以找到具体应用) Collection.sort(要排序的集合,new 一个比较器(){ 大括号里是让重写比较器的…

【pycharm】Pycharm常用快捷键

批量替换是指一次性替换多个文件中的指定内容。在开发过程中,可能会遇到需要替换多个文件中的某个字符串或者某段代码的情况。如果一个一个文件进行替换,那么将会非常耗时和繁琐。 而使用批量替换功能,则可以一次性完成所有文件的替换操作&am…