zoukankan      html  css  js  c++  java
  • 540. Single Element in a Sorted Array

    题目大意:

        给你一个由小到大排好序的数组,里面只有一个数出现了一次,其他数都出现了两次,要求找出那个只出现一次的数,而且时间复杂度为O(logn)

    题目思路:

        说实话一开始没想到,因为几乎每个数都出现了两次那么对于一个偶数i,一定有nums[i] == nums[i+1]否则说明在这之前出现过只出现一次的数字。这样就是可以用二分查找,其实当读到题目说logn的复杂度时想都不用想是二分了

     1 class Solution:
     2     def singleNonDuplicate(self, nums):
     3         """
     4         :type nums: List[int]
     5         :rtype: int
     6         """
     7         lo = 0
     8         hi = (len(nums)-1)
     9         while lo < hi:
    10             mi = (lo+hi)//2
    11             if mi%2 != 0:
    12                 if nums[mi] != nums[mi-1]:
    13                     hi = mi-1
    14                 else:
    15                     lo = mi+1
    16             else:
    17                 if nums[mi] != nums[mi+1]:
    18                     hi = mi-1
    19                 else:
    20                     lo = mi+1
    21         return nums[lo]
    View Code
  • 相关阅读:
    I2C总线之(三)---以C语言理解IIC
    /sys/class/gpio 文件接口操作IO端口(s3c2440)
    CSP-201503
    CSP-201409
    CSP-201412
    Linux命令行学习笔记
    sstream
    VECTOR
    CSP-201403
    CSP-201312
  • 原文地址:https://www.cnblogs.com/liwenchi/p/8358447.html
Copyright © 2011-2022 走看看