这道题目的要求,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的更多相关文章

  1. [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 ...

随机推荐

  1. xftp找不到匹配的outgoing encryption 算法 怎么解决

    alert("找不到匹配的outgoing encryption 算法"); 原因,是ssh登录本地终端缓存了相关的安全确认信息: 远端的ssh服务升级后,其对应的加密算法均作了升 ...

  2. 【RPC】使用Hessian构建RPC的简单示例

    服务接口和实现 public interface HelloService { // 服务方法 String sayHello(String name); } public class HelloSe ...

  3. hadoop fs、hadoop dfs与hdfs dfs的区别

    不多说,直接上干货! hadoop fs:    使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs :   只能操作HDFS文件系统相关(包括与Local FS间的操作),前 ...

  4. MyBatis 接口的使用

    为了简化MyBatis的使用MyBatis的使用,MyBatis提供了接口方式自动化生成调用过程,可以大大简化MyBatis的开发 开发映射文件: <select id="queryO ...

  5. Java热部署相关

    今天发现早年在大象笔记中写的一篇笔记,之前放在ijavaboy上的,现在它已经访问不了了.前几天又有同事在讨论这个问题.这里拿来分享一下. 在web应用开发或者游戏服务器开发的过程中,我们时时刻刻都在 ...

  6. MySQL 之管理脚本

    Mysql中查看每个IP的连接数 ) as ip , count(*) from information_schema.processlist group by ip;

  7. java eclipse maven The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 解决方法

    在eclipse 中使用maven 创建java web项目,启动服务器遇到提示:The superclass "javax.servlet.http.HttpServlet" w ...

  8. 解决ExtNET ExtJS 特定日期选择月份跳转导致无法选择月份的问题

    背景 项目使用 Ext.NET 2.2.0.40838 , 对应Ext JS4.2版本. 结果 2017/3/31 号的时候偶然间点日历选择控件选择2月,10月等月份突然就跳到3月份,9月份之类. 就 ...

  9. 将本地代码提交至gitHub

    1.注册github账号 2.本地安装git 3.打开需要提交代码的目录 4.右击git bash here 5. $ git init 6  $ ssh-keygen -t rsa -C " ...

  10. 网络基础和python(二)

    一,五层协议 应用层    端口 传输层   tcp\udp 网络层   ipv4\6 数据链路层  ethernet 物理层    mac 二:什么是变量? 变量:核心在于变和量儿字,变->变 ...