数组基础
- 连续存储,牵一发动全身
- 数据结构的操作无非:增删改查,数组增删改都很慢,但是查很快
- 数据在物理上的存储也是连续的,这对机子比较不友好
704. 二分查找
题目链接
语言:python
前置知识
- python list的相关操作
长度
nums=[0,1,3,5,9,8,11,12]
print(len(nums)) # 8
整除
mid = (max + min) // 2
循环的条件
nums = [2, 5]
target = 0
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
max = len(nums) - 1
min = 0
while (max > min): # 错误 注意max!=min,因为这个用例max=-1
mid = (max + min) // 2
if (nums[mid] > target):
max = mid - 1
elif (nums[mid] < target):
min = mid + 1
if (nums[min] == target):
return min
else:
return mid
return -1
if __name__ == "__main__":
su = Solution()
print(su.search(nums, target))W
- 二分法的基本思想
- 排好序的
- 找到边界,用边界(max,min)的中间的数(mid [ (max+mid)//2 ])和将要寻找的数(target)比较
27 移除元素
思路
根据题目意思,就是把要删除的元素移在最后。
1.找到元素(不可用二分,因为未排序)
2.移动元素(交换位置)
nums=[3,2,2,3]
val=3
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
lenth=len(nums)-1
pos=0
while(pos<=lenth):
if(nums[pos]==val):
temp=nums[lenth]
nums[lenth]=nums[pos]
nums[pos]=temp
lenth=lenth-1
if(nums[pos]!=val):
pos+=1
return lenth+1
if __name__=="__main__":
solu=Solution()
print(solu.removeElement(nums,val))