题目来源:牛客网
描述
给定一个长度为 n的整型数组arr和一个整数k(k>1)。已知 arr中只有 1 个数出现一次,其他的数都出现 k次。
请返回只出现了 1 次的数。
示例1
输入:[5,4,1,1,5,1,5],3
返回值:4
解题思路,看到这个题我第一时间想到的是python的统计元素出现个数的count函数。
遍历整个列表,统计每个元素出现的次数,当有元素只出现一次则为返回值
class Solution:
def foundOnceNumber(self , arr , k ):
# write code here
for i in arr:
if arr.count(i) == 1:
return i
写法没有问题,但是无法通过全部用例,会运行超时。显然在上述解法中题目里告诉过我们的k值没有被利用上。
先对列表进行排序
那列表的第一个值和第k-1个值去做对比如果想等则继续遍历,如果不相等就说明这个值是不重复值。
同时,这里存在一种特殊情况,如果最后一个数才是唯一数,这时候就不能去和这个数的k-1后的数去进行对比的,会数组越界
class Solution:
def foundOnceNumber(self , arr , k ):
# write code here
arr.sort()
l = len(arr)
flag = 0
while True:
if arr[flag] == arr[-1]:
return arr[flag]
if arr[flag] != arr[flag+k-1]:
return arr[flag]
flag = flag+k
OK,符合提交条件。
不过如果在不考虑程序性能的情况下,个人觉得第一种方式的可读性更强一些。
网友评论