代码随想录Python:704. 二分查找,27. 移除元素
数组是非常基础的数据结构。
数组是存放在连续内存空间上的相同类型数据的集合。
1、在进行二分查找过程中,区间的定义非常的重要。
区间一般分为两种:
- 左闭右闭
- 左闭右开
当进行左闭右闭的区间二分查找时,代码如下:
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left = 0
right = len(nums) - 1
# 左闭右闭
while left <= right:
middle = (left + right) / 2
if nums[middle] < target:
left = middle + 1
elif nums[middle] > target:
right = middle - 1
else:
return middle
return -1
当进行左闭右开的区间二分查找时,代码如下:
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
left = 0
right = len(nums) - 1
# 左闭右开
while left < right:
middle = (left + right) / 2
if nums[middle] < target:
left = middle + 1
elif nums[middle] > target:
right = middle
else:
return middle
return -1
2、在数组中进行元素移除
双指针思路(基本了解,还需要深入学习)
双指针分为快指针和慢指针。快指针是为了找到不需要移除的元素,慢指针是为了找到数组更新的位置。
class Solution(object):
def removeElement(self, nums, val):
"""
:type nums: List[int]
:type val: int
:rtype: int
"""
slow = 0
for fast in range(len(nums)):
if nums[fast] != val:
nums[slow] = nums[fast]
slow = slow + 1
return slow