704.二分查找
第一眼自己做写的代码:
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums)-1
for i in range(len(nums)):
mid = (left + right)//2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid -1
elif nums[mid]== target:
return mid
return -1
第一次执行没过【case是nums=[5],target=5】,做的过程中for i in range(len(nums))这行写的是for i in range(len(nums)-1)导致,到Pycharm里面调试发现不能-1,否则1个长度的元素没办法进循环了
看讲解后,可以将for循环改成while,left小于等于right的时候一直正常运行,直到left大于right了,跳出while循环:【同时注意左边右闭,我觉得这个好理解,一直以来都是这样理解的】
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums)-1
# for i in range(len(nums)):
while (left<=right):
mid = (left + right)//2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid -1
elif nums[mid]== target:
return mid
return -1
27.移除元素
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
i=0
l=len(nums)
while i<l:
if nums[i] == val:
for j in range(i+1,l):
nums[j - 1] = nums[j]
l -= 1
i -= 1
i += 1
return l
快慢指针还是有点没有理解,明天早上再看一下,今天脑子不够用了