版权声明:原创部分都是自己总结的,如果转载请指明出处。觉得有帮助的老铁,请双击666! https://blog.csdn.net/qq_36387683/article/details/82496953
824. 落单的数 IV
给定数组,除了一个数出现一次外,所有数都出现两次,并且所有出现两次的数都挨着。请找出找出那个出现一次的数。
样例
给出 nums = [3,3,2,2,4,5,5]
, 返回 4
。
解释:
4 只出现了一次。
给出 nums = [2,1,1,3,3]
, 返回 2
。
解释:
2 只出现了一次。
注意事项
1 <= nums.length < 10^4
- 为了约束程序的时间复杂度,你的程序将会运行
10^5
次
解题思路:
class Solution:
"""
@param nums: The number array
@return: Return the single number
"""
'''
def getSingleNumber(self, nums):
# Write your code here
#这个数组非常大,而且出现两次的数都是相邻的,所以用二分查找时间最快
left, right = 0, len(nums) - 1
while left + 2 < right:
mid = (left + right)//2
#
if len(nums[left:mid+1]) % 2 != 0:
if nums[mid] == nums[mid+1]:
left = mid + 2
else:
right = mid
else:
if nums[mid] == nums[mid+1]:
right = mid - 1
else:
left = mid + 1
if nums[left + 1] == nums[left]:
return nums[right]
else:
return nums[left]
'''
'''
def getSingleNumber(self, nums):
ans = 0
for i in nums:
ans = ans ^ i
return ans
'''
def getSingleNumber(self, nums):
for i in range(0, len(nums), 2):
if nums[i] != nums[i+1]:
return nums[i]
return nums[-1]