美文网首页
[2021-09-11][简单]数组中只出现一次的数

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

作者: 许忠慧 | 来源:发表于2021-09-11 15:26 被阅读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,符合提交条件。

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

    相关文章

      网友评论

          本文标题:[2021-09-11][简单]数组中只出现一次的数

          本文链接:https://www.haomeiwen.com/subject/vjqawltx.html