leetcode 刷题第一天| 704. 二分查找、27. 移除元素。
前言
数组:
- 数组下标都是从0开始的
- 数组内存空间的地址是连续的
- 相关资料:
一、 704. 二分查找
-
解题思路
- 判断nums是否为空,或者target是否在nums中,不在返回-1
- 确定左边起点left和右边终点right,找到nums中心点center
- 如果center< target,center为新的left
- 如果center>target,center为新的right
- 相等就返回索引
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not len(nums) or target not in nums:
return -1
left, right = 0, len(nums)
while left<=right:
middle = int((left+right)/2)
middle_number = nums[middle]
if middle_number>target:
right = middle
elif middle_number< target:
left = middle
else:
return middle
return -1
左闭右闭版本
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not len(nums) or target not in nums:
return -1
left, right = 0, len(nums)
while left<=right:
middle = int((left+right)/2)
middle_number = nums[middle]
if middle_number>target:
right = middle-1
elif middle_number< target:
left = middle+1
else:
return middle
return -1
左闭右开
class Solution:
def search(self, nums: List[int], target: int) -> int:
if not len(nums) or target not in nums:
return -1
left, right = 0, len(nums)
while left<right:
middle = int((left+right)/2)
middle_number = nums[middle]
if middle_number>target:
right = middle
elif middle_number< target:
left = middle+1
else:
return middle
return -1
二、 27. 移除元素
-
解题思路
- 创建双指针
- 如果不是该元素,则进行替换
- 最后目标元素都被替换到了最后
def removeElement(self, nums: List[int], val: int) -> int:
fast = 0
slow = 0
num_size= len(nums)
while fast< num_size:
if nums[fast]!=val:
nums[slow] = nums[fast]
slow+=1
fast+=1
return slow
总结
需要搞清楚左右指针的移动情况