算法之滑动窗口
持续更新中!
1.从排序数组中删除重复数
- 时间复杂度:O(n)
- 空间复杂度:O(1)
# coding=utf-8
# 从排序数组中删除重复数,返回新数组长度
def removeDuplicates(alist):
if not alist:
return 0
tail = 0
for j in range(1, len(alist)):
if alist[j] != alist[tail]:
tail += 1
alist[tail] = alist[j]
return tail + 1
# Test
alist = [1, 1, 2]
print(removeDuplicates(alist))
2. 从排序数组中删除重复数
从排序数组中删除重复数,重复数最后最多可出现两次
# coding=utf-8
# 从排序数组中删除重复数,重复数最多出现两次,返回新数组长度
def removeDuplicates(nums):
count = 0
for i in range(len(nums)):
if count < 2 or nums[count - 2] != nums[i]:
nums[count] = nums[i]
count += 1
return count
# Test
nums = [1, 1, 1, 2, 2, 2, 3, 3]
print(removeDuplicates(nums))
3. 删除元素
滑动窗口解法:
# coding=utf-8
# 删除给定val元素,返回新数组长度
def deleteElement(nums, val):
i = 0
for j in range(len(nums)):
if nums[j] != val:
nums[i] = nums[j]
i += 1
return i
# Test
nums = [1, 2, 4, 63, 2]
val = 63
print(deleteElement(nums, val))
双指针解法:
# coding=utf-8
# 删除给定val元素,返回新数组长度
# 双指针解法
def removeElement(nums, val):
start, end = 0, len(nums) - 1
while start <= end:
if nums[start] == val:
nums[start], end = nums[end], end - 1
else:
start += 1
return start
# Test
nums = [3, 2, 2, 3, 4, 4, 5, 6]
val = 2
print(removeElement(nums, val))