找单独的数 | 豆包MarsCode AI刷题

75 阅读2分钟

题目分析

本题的核心重点是从一堆数字数组中找到一个唯一没有重复的值

问题思考

我们该采用什么算法能够实现这个功能呢?

  • 我自己首先想到的是从中复制一个数组,然后在使用for循环从中遍历,排除掉自身的索引,如果能从数组找到第二个一样的数,则说明其不是单独的数,如果找不到,那么直接返回这个就是单独的数
  • 但是呢这个方法的缺点也很明显,如果在数组成员数很大时,需要遍历很多次,会造成性能占用高,耗时长,所以保留这个思路,能否进行改进

思路改进

  • 因为是单独的数,那么如果说把整个数组使用排序方法把它好,是不是与他相邻的数就一定是不等于他的
  • image.png
  • 通过观察样例1,确实是只有单独的数字4是前后都不是等于的,所以通过这个思路就可以达成只需要循环一次就可以找出单独的数

代码编写

下面我将用python作为解题编写 首先,我们需要使用到sorted() 函数对数组进行排序,sorted()函数是python中内置的函数,不会改变原有数组,会返回一个新的数组,默认是升序

def solution(inp):
    # Edit your code here
    num_list = sorted(inp)
    i = 0
    if len(num_list) == 1:
        return num_list[0]
    for i in range(len(num_list)):
        if i>0:
            if i<len(num_list)-1:
                if num_list[i-1] == num_list [i] or  num_list[i] == num_list [i +1]:
                 continue
                else:
                 print(num_list[i])
                 return num_list[i]
            elif num_list[i] != num_list [i-1]:
                 print(num_list[i])
                 return num_list[i]
        elif num_list[i] != num_list[i + 1]:
                return num_list[i]


if __name__ == "__main__":
    # Add your test cases here

    print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4)
    print(solution([0, 1, 0, 1, 2]) == 2)

思路分析

  • 首先是使用数组num_list接收排序好的新数组
  • 然后判断是不是只存在一个数字
  • 进入遍历循环,从索引1开始进行判断前后是否一致
  • 在遍历到最后一位时,直接返回数据

难点分析

  1. 数组溢出:第一次写需要控制好数组成员判断区间避免在首位或最后一位造成数组溢出
  2. 当列表长度为1时,直接返回该数字处理最后一个数字时直接返回
  3. if 语句的嵌套使整体代码阅读性较差,理顺后才能读懂