- 二分查找
这题刷过一次,它的进阶有旋转数组,要搞清边界条件。左闭右闭即[left, right],或者左闭右开即[left, right)。
- 移除元素
这题写过已经完全忘了。
数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。
暴力解法:
class Solution(object):
def removeElement(self, nums, val):
i = 0
n = len(nums)
while i < n:
if nums[i] == val:# 找到等于目标值的节点
for j in range(i+1, n): # 移除该元素,并将后面元素向前平移
nums[j - 1] = nums[j]
n -= 1#数组长度减1
i -= 1#这里减去这个数,再进入循环,看下一个数是否与目标值相等
i += 1
return n
双指针法:
通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
class Solution(object):
def removeElement(self, nums, val):
fast = 0
slow = 0
size = len(nums)
while fast < size:
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow