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 ...
随机推荐
- java线程之间的通信
1.常用的方法 sleep() 该线程进入等待状态,不释放锁 wait() 该线程进入等待状态,释放锁 notify() 随机唤醒一个线程 notifyAll() 唤醒全部线程 getName() 获 ...
- LeetCode——3. Longest Substring Without Repeating Characters
一.题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters 二.题目大意: 给定一个字符串, ...
- quartz里job不执行的解决方案(并发量太低原因)
这里写链接内容 使用框架spring3+quartz1.8 生产环境中碰到会有job一直不执行的情况,后来分析是因为quartz中线程总数太少,而项目中所有的job都是并发执行的就会导致当到达时间节点 ...
- 开启和关闭HBase的thrift进程
开启 $HBASE_HOME/bin/hbase-daemon.sh start thrift [hadoop@bigdatamaster hbase]$ jps 3543 ThriftServer ...
- 【剑指offer】字符串替换
请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. *StringBuffer 扩容 str ...
- java1.8 新特性(关于 match,find reduce )操作
match处理Integer集合 package lambda.stream; /** * @author 作者:cb * @version 创建时间:2019年1月4日 下午2:35:05 */ i ...
- 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)
本文将会谈一谈在数据仓库中拉链表相关的内容,包括它的原理.设计.以及在我们大数据场景下的实现方式. 全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近 ...
- [UE4]Cast to OverlaySlot、Set Vertical Alignment、Get Slot,解决Child Widget垂直居中对齐问题
- [UE4]GameInstance初始化
GameInstance的生命周期跟游戏进程一样. 每一次进入游戏都会初始化一个GameInstance,直到退出游戏才会被销毁. 不会随着场景的变化而被销毁.
- Angular2 入门详解
AngularJS 2 快速入门 npm是什么? npm其实是Node.js Package Manager的简称,是Node.js包管理工具(package manager) 安装Node.js ...