找到数组中唯一不重复的元素

坚强是说给别人听的谎言 提交于 2019-12-01 06:27:45

题目

Given a list of numbers, where every number shows up twice except for one number, find that one number.

Example:
Input: [4, 3, 2, 4, 1, 3, 2]
Output: 1

Challenge: Find a way to do this using O(1) memory.

分析

要实现 O(1) 空间复杂度,能学到的一个简单办法是就地将数组排个序。然后2个2个的迭代,判断相邻2个元素是否相等,不相等则找到了唯一元素。
时间复杂度上升到了至少 O(nlogn). (但如果用计数排序的话,也许可以做到 O(n), 但是这样一来空间复杂度又不满足了)。

代码

def singleNumber(nums):
    nums.sort()
    for i in range(0, len(nums) - 1, 2):
        if nums[i + 1] != nums[i]:
            return nums[i]

print singleNumber([4, 3, 2, 4, 1, 3, 2])
# 1
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!