lc marathon 7.11

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值