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 ...
随机推荐
- STL进阶--成员函数 vs 算法
容器的成员函数 vs 算法 容器中同名的函数 List: void remove(const T); template<class Comp> void remove_if(Comp); ...
- Dubbo(4)消费Dubbo服务
消费就是一个远程调用服务的过程: 1.项目结构: 2.项目依赖pom.xml: <project xmlns="http://maven.apache.org/POM/4.0. ...
- C++之二阶构造模式
前言:C++中经常会因为调用系统资源失败导致出现BUG,所以在类调用构造函数需要分配系统资源时会出现BUG,从而导致类对象虽然被创建,但是只是个半成品,为了避免这种情况需要使用二阶构造模式 二阶构造模 ...
- PAT 乙级 1018 锤子剪刀布 (20) C++版
1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...
- laravel插入数据时报 502 Bad Gateway
前提:model中$timestamp = true; 但数据表中created_at 和updated_at 是默认为当前时间 造成冲突. 原因:用create方法时 created_at 和u ...
- Jensen不等式
- kappa系数
kappa计算结果为-1~1,通常kappa是落在 0~1 间,可分为五组来表示不同级别的一致性: 0.0~0.20 极低的一致性(slight) 0.21~0.40 一般的一致性(fair) 0.4 ...
- Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)
22天-01-GUIGUI:Graphical User Interface 图形用户接口 Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中CLI:Common lin ...
- CentOS安装nginx以及负载均衡的搭建
依赖环境,没有安装的需要安装一下 yum install gcc yum install pcre-devel yum install zlib zlib-devel yum install open ...
- 第7课 列表初始化(2)_分析initializer_list<T>的实现
1. 初始化列表的实现 (1)当编译器看到{t1,t2…tn}时便会生成一个initializer_list<T>对象(其中的T为元素的类型),它关联到一个array<T,n> ...