知识点
- 如果数组是排序的(通常按照递增的顺序排序),那么可以采用二分查找算法进行优化。可以取出位于数组中间的数字并和目标数字比较。如果中间数字正好等于目标数字,那么就找到了目标数字。如果中间数字大于目标数字,那么只需要查找数组的前半部分。如果中间数字小于目标数字,那么接下来只需要查找数组的后半部分。
基础练习
1.查找插入位置
Leetcode.35
解题思路
1.初始化left为数组第一个索引,right为最后一个索引。取mid值和Target比较,移动left和right索引位置
2.如果能找到target则返回索引值,如果无法找到则按插入到排序数组里返回插入的位置,要注意如何插入到正确的位置。
python3实现
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1
if target>nums[-1]:
return right+1
while left <= right:
mid = (left+right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = right -1
if nums[left] <= target:
return left+1
else:
return left
2.二分查找
Leetcode.705
解题思路
python3实现
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums) - 1
while left <= right:
mid = (left+right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = right -1
return -1