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 ...
随机推荐
- PREV-3_蓝桥杯_带分数
问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...
- 【jdk】使用wget下载jdk8
因为在oracle官网下载jdk需要 如果直接在linux中使用 wget命令下载,实际下载是一个html文件,所以需要通过一下命令 wget --no-check-certificate --no- ...
- 【剑指offer】字符串替换
请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. *StringBuffer 扩容 str ...
- Hive之示例一:基本操作与案例
1. 创建数据库,切换数据库 create database testdb; use testdb; 2. 创建管理表 create table emp( empno int, empname str ...
- jquery插件的几种写法
/** * Created by peng on 2016/12/8. */jQuery.extend({ min: function(a, b) { return a < b ? a : b; ...
- Underscore.js部分讲解
underscore是非常好用的封装库,大小只有4KB,大多插件都是以underscore为基础: underscore分5大部分:集合:数组:函数:对象:工具 集合:集合就是伪数组,虽然长的和数组一 ...
- PHPer常见的面试题总结
1.平时喜欢哪些php书籍及博客?CSDN.虎嗅.猎云 2.js闭包是什么? 3.for与foreach哪个更快? 4.php鸟哥是谁?能不能讲一下php执行原理? 5.php加速器有哪些?apc.z ...
- tesseract 训练
下载chi_sim.traindata字库下载tesseract-ocr-setup-3.02.02.exe 下载地址:http://code.google.com/p/tesseract-ocr/d ...
- [UE4]运行时脱离视角,进入自由视角
按 Shift + F1让鼠标脱离游戏窗口,然后点击右上角的按钮,然后鼠标在游戏窗口点击一下,就只有自由漫游了. 还可以点击选中Word Outliner窗口的物体.
- [UE4]国际化,中英文切换
只有“Text”数据类型才支持国际化 必须以独立游戏窗口运行,语音切换才会起作用.