用python刷LeetCode题 DAY 2
题目:二分查找
题目要求如下:
首先因为是用python来解题,用自带的函数或方法可以很轻易的写出来
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target in nums:
return nums.index(target)
else:
return -1
或者
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
for index, values in enumerate(nums):
if values == target:
return index
return -1
但题目本意是要自己用二分法实现,且题目要求是有序数组且无重复元素,这是使用二分法查找的前提条件,二分法实现如下
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left = 0
right = len(nums)-1 #注意这里right为长度减一,才是最后一位的下标
while left <= right :
middle = (left + right)//2 #将nums为奇数和偶数都考虑进去
print(middle, left, right)
if target == nums[middle]:
return middle
elif target < nums[middle]:
right = middle-1
elif target > nums[middle]:
left = middle+1
return -1 #若没有找到目标值则返回-1
通过时间及占用内存如下