lintcode练习 - 824. 落单的数 IV

版权声明:原创部分都是自己总结的,如果转载请指明出处。觉得有帮助的老铁,请双击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]

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/82496953