[2021-09-11][简单]数组中只出现一次的数

2021-09-11  本文已影响0人  许忠慧

题目来源:牛客网

描述

给定一个长度为 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,符合提交条件。

不过如果在不考虑程序性能的情况下,个人觉得第一种方式的可读性更强一些。

上一篇 下一篇

猜你喜欢

热点阅读