目录
问题 长度为 n 的非空整数数组,其中只有一个数字出现了1次,其他均出现2次,快速找到这个数字
解决问题前,先把问题简化为一个具体的问题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
分析
首先,暂不考虑时间和空间复杂度,这个问题的解决方案有几种?
解法一 暴力破解
每次从数组中取一个数,记为cur,然后从剩下的数中查找,如果找不到,则cur即为要找的那个数。这种解法时间复杂度是 O( n 2 n^2 n2),空间复杂度是O(1)。
解法二 排序
将数组排序后,再进行相邻元素的比较。这种解法的时间复杂度和空间复杂度主要依赖于排序算法。
排序算法的时间和空间复杂度如下:
排序法 | 时间复杂度(平均) | 时间复杂度(最坏) | 空间复杂度 | 稳定度 |
---|---|---|---|---|
冒泡 | O( n 2 n^2 n2) | O( n 2 n^2 n2) | O(1) | 稳定 |
选择 | O( n 2 n^2 n2) | O( n 2 n^2 n2) | O(1) | 不稳定 |
插入 | O( n 2 n^2 |