当前位置: 首页 > news >正文

郑州营销型网站宁波seo推荐优化

郑州营销型网站,宁波seo推荐优化,空中乘务专业简历制作,酒店网站建设协议LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】 题目描述:解题思路一:可以将链表转为数组,然后从后往前遍历,遇到大于等于当前元素的就入栈,最终栈里面的元素即是最终的答案。解题思路二:递归&am…

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】

  • 题目描述:
  • 解题思路一:可以将链表转为数组,然后从后往前遍历,遇到大于等于当前元素的就入栈,最终栈里面的元素即是最终的答案。
  • 解题思路二:递归,思路是递归到最后,head后面是node,如果node的值大于head的值,那么删除head。否则不删除。
  • 解题思路三:迭代:两次反转链表
  • 解题思路四:单调栈不解释

题目描述:

给你一个链表的头节点 head 。

移除每个右侧有一个更大数值的节点。

返回修改后链表的头节点 head 。

示例 1:
在这里插入图片描述

输入:head = [5,2,13,3,8]
输出:[13,8]
解释:需要移除的节点是 5 ,2 和 3 。

  • 节点 13 在节点 5 右侧。
  • 节点 13 在节点 2 右侧。
  • 节点 8 在节点 3 右侧。

示例 2:
输入:head = [1,1,1,1]
输出:[1,1,1,1]
解释:每个节点的值都是 1 ,所以没有需要移除的节点。

提示:

给定列表中的节点数目在范围 [1, 105] 内
1 <= Node.val <= 105

解题思路一:可以将链表转为数组,然后从后往前遍历,遇到大于等于当前元素的就入栈,最终栈里面的元素即是最终的答案。

不过这种思路也许有些投机取巧,没有用到纯粹的链表。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:nums = []while head:nums.append(head.val)head = head.nextn = len(nums)stack = []for i in range(n-1, -1, -1):if not stack: stack.append(nums[i])continueif nums[i] >= stack[-1]: stack.append(nums[i])for i, num in enumerate(reversed(stack)):if i == 0:head = ListNode(num)p = headelse:q = ListNode(num)p.next = qp = qreturn head

时间复杂度:O(n) 只是遍历了两遍链表
空间复杂度:O(n) 存储的数组

解题思路二:递归,思路是递归到最后,head后面是node,如果node的值大于head的值,那么删除head。否则不删除。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:if head.next is None: return head  # 输入保证链表不为空node = self.removeNodes(head.next)  # 返回的链表头一定是最大的if node.val > head.val: return node  # 删除 headhead.next = node  # 不删除 headreturn head

简单的写法:

class Solution:def removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:if not head: return headhead.next = self.removeNodes(head.next)return head.next if head.next and head.val < head.next.val else head 

时间复杂度:O(n)其中 n 为链表的长度。
空间复杂度:O(n) 栈空间

解题思路三:迭代:两次反转链表

翻转链表看LeetCode-206. 反转链表【双指针,递归】这里用的是简单的双指针来翻转链表,然后遇到比当前元素小的就可以直接删除,然后再次翻转链表。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:pre, cur = None, headwhile cur:nxt = cur.nextcur.next = prepre = curcur = nxtreturn predef removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:cur = head = self.reverseList(head)while cur.next:if cur.val > cur.next.val: cur.next = cur.next.nextelse: cur = cur.nextreturn self.reverseList(head)

时间复杂度:O(n) 只是遍历了两遍链表
空间复杂度:O(1) 原地翻转

解题思路四:单调栈不解释

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeNodes(self, head: Optional[ListNode]) -> Optional[ListNode]:A = []while head:while A and A[-1].val < head.val: A.pop()if A: A[-1].next = headA.append(head)head = head.nextreturn A[0]

时间复杂度:O(n)
空间复杂度:O(1)

http://www.zhongyajixie.com/news/6417.html

相关文章:

  • 邯郸学校网站建设费用软文媒体
  • 最近出现的病毒seo专员工作容易学吗
  • 网站可以微信支付是怎么做的淘宝关键词怎么做排名靠前
  • 网站开发费用摊销时间南昌seo数据监控
  • 做目录的网站武汉seo网络营销推广
  • 企业网站建设方案文档百度网站优化排名
  • 做h游戏视频网站小小课堂seo自学网
  • 网站群建设技术规范上海今天发生的重大新闻
  • 宣传产品网站2345网址导航怎么彻底删掉
  • 企业网站建设制作设计哪家最专业长沙网络营销外包哪家好
  • 长春哪家做网站便宜竞价推广是做什么的
  • 网站发的文章如何优化福州seo公司
  • 想要一个网站关键词生成器在线
  • 德清网站建设成品视频直播软件推荐哪个好一点
  • 丰润网站建设关于网络推广的方法
  • 网站开发技术文档范例网站开发技术
  • 合肥网站建设合肥网站制作网络营销机构官方网站
  • 微信插件大全下载百度竞价关键词怎么优化
  • 中山网站建设文化流程培训总结怎么写
  • python做网站表白各地疫情最新消息
  • 网站备案 新闻审批号windows优化大师要会员
  • 网络优化工程师的工作内容免费智能seo收录工具
  • asp.net 网站访问量新闻头条 今天
  • gogogo日本免费观看视频搜索关键词排名优化
  • 自己做的网站怎么在百度能搜到搜索引擎营销的实现方法有
  • 两学一做 网站交换友情链接的渠道
  • 网站做端口是什么国家高新技术企业
  • html5网站开发环境天津网站排名提升
  • 企业宣传网站源码网络推广预算方案
  • 网站制作排版软件推广平台有哪些