注意点
1.数组是存放在连续内存空间上的相同类型数据的集合
2.数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。
练习
数组二分查找题目地址
//解法一
//简单遍历
class Solution:
def search(self,nums,target):
for i in range(len(nums)):
if nums[i] < target:
i += 1
elif nums[i] > target:
i -= 1
elif nums[i] == target:
print(i)
print("-1")
a=Solution()
b=[-1,0,3,5,9,12]
a.search(b,2)
//解法二
//左闭右开区间
class Solution:
def search(self, nums, target) :
left, right = 0, len(nums) # 定义target在左闭右开的区间里,即:[left, right)
while left < right: # 因为left == right的时候,在[left, right)是无效的空间,所以使用 <
middle = left + (right - left) // 2
if nums[middle] > target:
right = middle # target 在左区间,在[left, middle)中
elif nums[middle] < target:
left = middle + 1 # target 在右区间,在[middle + 1, right)中
else:
print(middle) # 数组中找到目标值,直接返回下标
print(-1) # 未找到目标值
Solution().search([-1,0,3,5,9,12],9)
其他同类题目
- 35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
输入: nums = [1,3,5,6], target = 5
输出: 2
#采用左闭右闭的方法【left,right】
class Solution:
def searchInsert(self, nums, target):
left=0
rigth=len(nums)-1
while left<=rigth:
mid=(left+rigth)//2
if nums[mid]>target:
rigth=mid-1
elif nums[mid]<target:
left=mid+1
else:
print(mid)
print(rigth+1)
# Solution().searchInsert([1,3,5,6,4,8,7,9],6)
# Solution().searchInsert([1,3],5)
# Solution().searchInsert([1],1)