博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Add to List 136. Single Number (找到单独的数) by Python
阅读量:4885 次
发布时间:2019-06-11

本文共 1744 字,大约阅读时间需要 5 分钟。

题目: Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 给一个数列,数列里出了一个单独的数其余的数都出现了两次,找出这个单独的数,用最节约时间内存的方式完成 思路: 找一个数用最快的方式在数列里找到我首先想到的就是二分查找(当然可能还有别的方式)。 所以我想用二分查找的方式找到这个单独的数,但是二分查找基于数列有序的时候,所以首先把数列快速排序(本想写个快排,但是懒,直接用sort了) 对于排序好的数列我想到的是可以找到中间的数,然后看它是不是和左右相等,来判断单独的数在中间的左边还是右边。 首先整个数列的长度必然是奇数个(因为只要一个单独数),所以我使用ln = len(b)//2就可以找到中间的数的下标,这样它就把数列分成相等长度的两部分: 这里就出现了两种情况:1是左右两边的片段长度都是奇数,2是左右两边的片段长度都是偶数 1,当都为奇数时:     如果中间数和左边相等,那么其右边必然为奇数个数的序列,那么单独数必然在右边     eg:[-1,-1,0,0,1,1,2]     如果总件数和右边相等,那么其左边必然为奇数个数的序列,那么单独数必然在左边     eg:[-2,-1,-1,0,0,1,1] 2,当都为偶数时:     如果中间数和左边相等,那么其右边必然为偶数个数的序列(没有单独数),那么单独数必然在左边     eg:[-1,0,0,1,1]     如果中间数和右边相等,那么其左边必然为偶数个数的序列(没有单独数),那么单独数必然在右边     eg:[-1,-1,0,0,1] 共同的,如果中间数和左右都不相等,那么就是单独数了 根据这个用循环或者迭代就可以找到单独数,注意的是判断跳出条件,当找到中间数或数列只有一个数的时候就可以跳出了 结果: class Solution(object):     def singleNumber(nums):         """         :type nums: List[int]         :rtype: int         """         b = sorted(nums)         while True:             # 中间下标             ln = len(b)//2             # 如果只剩下一个值             if ln == 0:                 return b[0]             # 判断奇数偶数             if ln % 2 == 0:  # 偶数                 if b[ln] == b[ln+1]:                     b = b[ln+2:]                 elif b[ln] == b[ln-1]:                     b = b[:ln-1]                 else:                     return b[ln]             else:  # 奇数                 if b[ln] == b[ln+1]:                     b = b[:ln]                 elif b[ln] == b[ln-1]:                     b = b[ln+1:]                 else:                     return b[ln]

转载于:https://www.cnblogs.com/jiagui/p/7044461.html

你可能感兴趣的文章
试用期三个月的状态
查看>>
linux内核启动流程[转]
查看>>
扯在前面的话
查看>>
创建odoo数据库时出现错误原因
查看>>
Scrum Meeting day 1
查看>>
windows程序内部运行机制
查看>>
Eclipse 3.6版本正式发布 扩展诸多平台特性
查看>>
微信小程序如何引入外部字体库iconfont的图标
查看>>
hdu 1698(线段树)
查看>>
集合遍历
查看>>
JVM--常见的虚拟机回收算法
查看>>
Linux备忘录:创建IDEA快捷方式
查看>>
CI 的一些方法
查看>>
oracle忽略大小写
查看>>
EST
查看>>
redhat6.7 yum网络源配置
查看>>
百度网络监控实战:NetRadar横空出世(下)
查看>>
javascript往textarea追加内容
查看>>
WeX5触发事件
查看>>
【python学习】使用Python写一个贪吃蛇
查看>>