leetcode540
这道题目的要求,Note: Your solution should run in O(log n) time and O(1) space.
因此应该用二分查找的方式,代码如下:
class Solution:
def singleNonDuplicate(self, nums: 'List[int]') -> int:
l = 0
h = len(nums)-1
while l<h:
m = l + (h-l)//2
if m%2==1:
m-=1
if nums[m] == nums[m+1]:
l = m+2
else:
h = m
return nums[l]
52ms,13.8mb
传统的方式,就是已经两次遍历,先遍历一遍数组,记录每一个值出现的次数,存储到一个字典中。
然后再遍历一次字典,找到只出现一次的那个值,代码如下:
class Solution:
def singleNonDuplicate(self, nums: 'List[int]') -> 'int':
count = {}
for num in nums:
count[num] = count.get(num, 0)+1
for key in count:
if count[key] == 1:
return key
48ms,14.5mb
这种方式想法很简单也很容易懂,但是需要额外的空间。但奇怪的是其执行时间却比二分查找的要快,感觉可能是测试集的样本问题。
还有一种技巧性比较强的方式,空间复杂度满足要求,但是时间复杂度应该更高:
class Solution:
def singleNonDuplicate(self, nums: 'List[int]') -> 'int':
res = nums[0]
for i in range(1,len(nums)):
res ^= nums[i]
return res
60ms,14mb
最后贴上三种方法的执行结果,从上倒下分别是第三种,第二种和第一种,这种不对称就是破除强迫症的排版(其实是我比较懒)

leetcode540的更多相关文章
- [Swift]LeetCode540. 有序数组中的单一元素 | Single Element in a Sorted Array
Given a sorted array consisting of only integers where every element appears twice except for one el ...
随机推荐
- Qt学习——QListWidget控件的使用
转载:GDUTLYP Qt提供QListWidget类列表框控件用来加载并显示多个列表项.QListWidgetItem类就是列表项类. 一般列表框控件中的列表项有两种加载方式: 一种是由用户手动添加 ...
- 《Kubernetes权威指南》笔记-Pod、容器与Node的关系
- 峰Redis学习(9)Redis 集群(概述)
第一节:Redis 集群概述 redis cluster是去中心化,去中间件的,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态.每个节点都和其他所有节点 ...
- mysql 意向锁的作用
直接copy知乎上的内容 https://www.zhihu.com/question/51513268 作者:尹发条地精链接:https://www.zhihu.com/question/51513 ...
- PHP程序员的进阶之路
第1阶段:初级PHP程序员 重点:把LNMP搞熟练(核心是安装配置基本操作)目标:能够完成基本的LNMP环境安装,简单配置维护:能够做基本的简单系统的PHP开发:能够在PHP中型系统中支持某个PHP功 ...
- version control(关于版本控制)
版本控制(Version Control Systems)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 这个系统可以自动帮我们备份文件的每一次更改,并且可以非常方便的恢复到 ...
- Mysql 之闪回技术 binlog2sql
1.下载 https://github.com/danfengcao/binlog2sql http://rpmfind.net Search: python-pip pip 是一个Python包管理 ...
- but was actually of type 'com.sun.proxy.$Proxy101' 注入问题
最近在用springboot搭建项目框架时,遇到了如下错误,查询了一番,原来是没有引入spring框架的aop包导致: 问题: ERROR o.s.test.context.TestContextMa ...
- Select模式和超时
fd_set rset; FD_ZERO(&rset); int nready; int maxfd; int fd_stdin = fileno(stdin); if(fd_stdin &g ...
- MySQL--局域网、外网访问MySQL
一.局域网.外网访问 1. 打开CMD,导航到当前MySQL的bin路径,如下图: 2. 访问MySQL:输入MySQL -u root -p,点击Enter键,即可看到密码输入框: 输入密码,点需E ...