二分搜索法
给订一个有序数组(升序),分左闭右闭和左闭右开情况。
左闭右闭情况:
class Solution:
def search(self,nums:list[int],target:int)->int:
left = 0
right = len(nums)-1
while( left <=right ):
middle = ( left +right )//2
if nums[middle] >target :
right = middle -1
elif nums[middle] < target :
left = middle +1
else:
return middle
return -1
左闭右开情况:
class Solution:
def search(self,nums:list[int],target:int)->int:
left = 0
right = len(nums)
while( left <right ):
middle = ( left +right )//2
if nums[middle] >target :
right = middle
elif nums[middle] < target :
left = middle +1
else:
return middle
return -1
快慢指针移除元素
class Solution:
'''
val:要移除的元素
返回移除后数组剩余的元素个数
'''
def move(self,nums:list[int],val:int)->int:
fast = 0
slow = 0
while fast < len(nums):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
有序数组的平方
给定非递减序列,各元素平方后排成非递减序列
class Solution:
def rank(seft,nums):
l = 0
r = len(nusm)-1
k = len(nums)-1
result = []
for i in range(k+1):
reslut.append(0)
while l <=l:
if nums[r]**2>nums[l]**2:
num[k] = nums[r]**2
r -= 1
else:
nums[k] = nums[l]**2
l += 1
k -=1
return result