文章目录
80. 删除有序数组中的重复项 II
存储指针(双指针一种),常用于原地数组修改的时候
慢于遍历的速度,指的是存储的位置
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
i=0 #存储指针
# [1,1,1,1,1,2,2,3]
# 原地搜索 存储指针
# 存储的速度慢于遍历的速度
for num in nums:
if i<2 or num>nums[i-2]:
nums[i]=num
i+=1
print(i)
return i
316. 去除重复字母
用单调栈,要求存储的是正序排序的队列,但同时加了一个条件
要是想弹出前面的数,还需要保证后面有这个数
class Solution:
def removeDuplicateLetters(self, s: str) -> str:
# 3213
stack=[]
# "bcabc"
# "bcab"
for i in range(len(s)):
if len(stack)==0:
stack.append(s[i])
if s[i] in stack:
continue
while len(stack)!=0 and stack[-1]>s[i] and stack[-1] in s[i+1:]:
stack.pop()
stack.append(s[i])
return "".join(stack)
237. 删除链表中的节点
逆闪电直呼内行:这道题细思极恐:如何让自己在世界上消失,但又不死? —— 将自己完全变成另一个人,再杀了那个人就行了。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val=node.next.val
node.next=node.next.next