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

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,1]
输出: 1
示例 2: 输入: [4,1,2,1,2]
输出: 4

先说自己的思路 这题和217存在重复问题相似 这题找数组中只有一次的数字 而存在重复问题是找出现两次的数字

所以我先排序 然后以2为间隔两两进行对比 是否相同 如果不同则return值 如果倒数第二个之前都是相同的 则return 最后一个值

上代码(通过)

 class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
for i in range(0,len(nums),2): #以2为间隔 两两对比
if(i==(len(nums)-1)): #倒数第二个之前都相同 返回最后一个值
return nums[i]
else:
if(nums[i+1]!=nums[i]):
return nums[i]
if __name__=="__main__":
s=Solution()
nums=[5,3,5,6,7,3,6]
print(s.singleNumber(nums))

运行时间为60ms 只击败49%的用户

代码虽然通过检测 但是分析过程发现 首先的排序时间复杂度就为O(nlogn) 并不是线性的 所以虽然通过测试但不是最优

第二种思路 (看评论区大佬写的) 利用按位异或运算符 进行操作

 class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a = 0
for num in nums:
a = a ^ num
return a if __name__=="__main__":
s=Solution()
nums=[5,3,5,6,7,3,6]
print(s.singleNumber(nums))

运行代码 48ms 击败99.8%的用户

会发现效率提升其实很明显 虽然代码相对简单 4行解决 但是可能理解起来较难

分析一下亦或运算符^ :当两对应的二进位相异时,结果为1。

首先这是对两个二进制数字进行操作 如果对应位相异为1否则为0

a^a=0
0^a=a
a^b=b^a
a^a^b=b
a^b^c=(a^b)^c=a^(b^c)

  

python(leetcode)-136只出现一次的数字的更多相关文章

  1. Java实现 LeetCode 136 只出现一次的数字

    136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现 ...

  2. Leetcode 136.只出现一次的数字 By Python

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...

  3. LeetCode 136. 只出现一次的数字(Single Number)

    题目描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: ...

  4. LeetCode | 136. 只出现一次的数字Ⅰ Ⅱ

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...

  5. 【Leetcode】【简单】【136. 只出现一次的数字】【JavaScript】

    题目描述 136. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外 ...

  6. Leetcode 137. 只出现一次的数字 II - 题解

    Leetcode 137. 只出现一次的数字 II - 题解 137. Single Number II 在线提交: https://leetcode.com/problems/single-numb ...

  7. Leetcode 260.只出现一次的数字III

    只出现一次的数字III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出: [3,5 ...

  8. Leetcode 137.只出现一次的数字II

    只出现一次的数字II 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? ...

  9. Java实现 LeetCode 260 只出现一次的数字 III(三)

    260. 只出现一次的数字 III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出 ...

随机推荐

  1. Python 学习图谱

    https://mp.weixin.qq.com/s/-fJYAlOs4ui0YeJ-W6BkeQ

  2. 对话框改变颜色 宽度沾满屏幕 Dialog

    首先在style.xml中定义一个对话框样式,这里可以修改颜色: //对话框沾满整个屏幕的宽度 <style name="DialogShareTheme" parent=& ...

  3. EF多字段求和(分组/不分组)

    分组多字段求和 query.GroupBy(q => new { q.Year, q.Month }) .Select(q => new { Year = q.Key.Year, Mont ...

  4. 89. Gray Code返回位运算的所有生成值

    [抄题]: The gray code is a binary numeral system where two successive values differ in only one bit. G ...

  5. react项目请求数据的fetch的使用

    准备三个文件(封装请求函数),然后测试一下,能不能调用数据 第一个文件  request.js import 'whatwg-fetch'; /** * Parses the JSON returne ...

  6. NET Core小细节杂记

    1.中文编码问题: 01.在net core中,使用中文的编码,要先进行注册: //CodePagesEncodingProvider在包System.Text.Encoding.CodePages中 ...

  7. $.fn.extend() 问:我来这个世上到底是干嘛的?

    好好好 乖  本宝宝来告诉你  你来是干嘛的啊~ 话不多说 直接上码 当然如下代码是在jquery环境下运行的 HTML JS 完事~~~ 当你点击div元素的时候  你会发现弹出来“我被单击了”这句 ...

  8. https 网络传输安全架设

    1:在集群的情况下,不能在tomcat上 架构ssl 而是在总路由nginx上架设具体实现如下截图 非对称加密是当前流行的加密传输方式 证书是什么  . 在浏览器证书查看 证书是访问请求时 https ...

  9. boost asio 学习(一)io_service的基础

    原文  http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio/ 编译环境 b ...

  10. MySQL—查询某时间范围的数据

    -- 查询今天的数据 select * from `user` where to_days(birthday) = to_days(CURDATE()); -- 查询昨天的数据 select * fr ...