您的位置:首页 > 编程语言 > Python开发

python_lintcode_82落单的数_83落单的数 II_84落单的数 III

2017-09-25 16:39 411 查看

82落单的数

题目

http://www.lintcode.com/zh-cn/problem/single-number/

给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

样例

给出 [1,2,2,1,3,4,3],返回 4

思路

sort()进行升序,下标为偶数为新的比较值j,下标为奇数的与前一个数即j进行比较,下同,则j=下一个偶数,否则,return 奇数的前一个

最后,还有一种可能就是落单的数是最后一个数。o(n)

代码

class Solution:
"""
@param: A: An integer array
@return: An integer
"""
def singleNumber(self, A):
# write your code here
if A==[]:return 0
A.sort()
j=0
for i in range(len(A)):
#偶数
if i==0 or i%2==0:
j=A[i]
else:
if A[i]!=j:
return j
return A[-1]


83落单的数 II

题目

http://www.lintcode.com/zh-cn/problem/single-number-ii/

给出3*n + 1 个的数字,除其中一个数字之外其他每个数字均出现三次,找到这个数字。

样例

给出 [1,1,2,3,3,3,2,2,4,1] ,返回 4

代码

class Solution:
"""
@param: A: An integer array
@return: An integer
"""
def singleNumberII(self, A):
# write your code here
if A==[]:return 0
A.sort()
j=0
k=0
for i in range(len(A)):
if k==0 or k%3==0:
j=A[i]
else:
if A[i]!=j:
return j
k+=1
return A[-1]


84落单的数 III

题目

给出2*n + 2个的数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。

您在真实的面试中是否遇到过这个题? Yes

样例

给出 [1,2,2,3,4,4,5,3],返回 1和5

代码

class Solution:
"""
@param: A: An integer array
@return: An integer array
"""
def singleNumberIII(self, A):
# write your code here
if A==[]:return 0
A.sort()
j=0
B=[]
for i in range(len(A)):
#偶数
if i==0 or (i+len(B))%2==0:
j=A[i]
else:
if A[i]!=j:
B.append(j)
j=A[i]
if len(B)==2:
return B
B.append(A[-1])
return B
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: