200道大数据面试常考Leetcode算法题( 二 )


原题为:
题解为:
class Solution:def firstBadVersion(self, n):# 定义左右边界,因为是版本是一个个体,所以从1开始l,r = 1,n# 当左边界小于右边界循环while (l
200道大数据面试常考算法题 (二分查找篇)540-有序数组中的单一元素
原题为:
题解为:
class Solution:def singleNonDuplicate(self, nums: List[int]) -> int:l,r = 0,len(nums)-1while(l < r):mid = (l+r) // 2# 右侧数组为偶数halvesAreEven = (l - mid) % 2 == 0# 假如中值和中值后面的数是一对时if(nums[mid] == nums[mid + 1]):# 否则右侧数组为偶数,说明单一数字在右侧,重新开始让区间左边界变为从中值+2开始# 因为中值右侧有一个跟中间相同,所以不能右侧此时不能是偶数if(halvesAreEven):l = mid + 2# 否则左侧数组为偶数,说明单一数字在右侧,重新开始让区间左边界变为从中值+2开始else:r = mid - 1# 假如中值和中值前面的数是一对时elif(nums[mid] == nums[mid - 1]):# 假如右侧数组为偶数,说明单一数字在左侧,重新开始让区间右边界变为从中值-2开始if(halvesAreEven):r = mid -2# 否则左侧数组为偶数,说明单一数字在右侧,重新开始让区间左边界变为从中值+1开始else:l = mid + 1# 否则中值就是单一数字else:return nums[mid]# 当左右边界相同时,即找到单一数字return nums[l]
好啦,这期的分享到这里结束啦!我们下期(位运算篇)再见!