注意事项:python与c++不一样,python中需要用int函数获得整数,或者直接用l + r >> 1,且为了防止溢出,最好使用l + int((r - l) / 2
class Solution:
def search(self, nums: List[int], target: int) -> int:
l, r = 0, len(nums) - 1
while l <= r:
mid = l + int((r - l) / 2) #python与c++不一样,python中需要用int函数获得整数,或者直接用l + r >> 1
if target < nums[mid]:
r = mid - 1
elif target > nums[mid]:
l = mid + 1
else:
return mid
return -1
目录
暴力解法
思路:用两层循环,当第一层循环遍历的数组元素等于目标值时,第二层循环开启,更新数组,将该元素删去,后面的数组集体前移
错误代码:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
size = len(nums)
for i in range(0, size):#python中for循环不能改变循环体
if nums[i] == val:
for j in range(i + 1, size):
nums[j - 1] = nums[j]
i = i - 1
size = size - 1
return size
错误自查:python中for循环不能改变循环体,所以当两个连续相同且等于目标值的时候,循环会漏掉这个值
正确代码:
待完成。。。
双指针解法
思路
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
slowIndex = 0
for fastIndex in range(len(nums)):
if nums[fastIndex] != val:
nums[slowIndex] = nums[fastIndex]
slowIndex = slowIndex + 1
return slowIndex