1.看到题目第一想法
二分查找这题的时候想用python中的numpy,直接通过np.find或者np.where 来找到target的位置。
移除元素这题
2.看完代码随想录之后的想法
算法挺高效的,赶紧动手尝试一下
3.自己实现过程中遇到哪些困难
对于边界的处理要谨慎
4.今日收获,记录一下自己的学习时长
学了二分算法和双指针算法,总共2个半小时
704.二分查找
时间复杂度:O(log n)
空间复杂度:O(1)
解法1:[left,right]------- (左闭右闭)
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:
right = mid - 1
elif nums[mid] < target:
left = mid + 1
return -1
解法2:[left,rigth) -------(左闭右开)
class Solution:
def search(self, nums: List[int], target: int) -> int:
left = 0
right = len(nums)
while left < right:
mid = (left+right) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid
elif nums[mid] < target:
left = mid + 1
return -1
27.移除元素
解法1:暴力解法
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
index = 0
length = len(nums)
for i in range(length):
if nums[index] == val:
for j in range(index,length-1):
nums[j] = nums[j+1]
length -= 1
else:
index += 1
return length
解法:双指针
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
slow = 0
for fast in nums:
if fast != val:
nums[slow] = fast
slow += 1
return slow