01711/leetcode

/11. 盛最多水的容器.py
"""
给你一个整数数组 nums ,其中总是存在最大值或者最小值。
编写一个函数来查找数组中最大的 子数组之和 。如果你不能找到这样的可能,则返回 0 。
"""

class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if not nums:
return 0
max_sum = 0
cur_sum = 0
for i in range(len(nums)):
if cur_sum < 0:
cur_sum = 0
cur_sum += nums[i]
max_sum = max(max_sum, cur_sum)
return max_sum

/29. 两两交换链表中的节点.py
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode(next=head)
cur = dummy

while cur.next and cur.next.next:
first = cur.next
second = cur.next.next
first.next = second.next
cur.next = second
cur.next.next = first
cur = cur.next.next

return dummy.next

/48. 旋转图像.py
"""
给你一个整数数组 nums ,其中总是存在最大值或者最小值。
编写一个函数来查找数组中最大的 子数组之和 。如果你不能找到这样的可能,则返回 0 。
"""

class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if not nums:
return 0
max_sum = 0
cur_sum = 0
for i in range(len(nums)):
cur_sum += nums[i]
if cur_sum > max_sum:
max_sum = cur_sum
if cur_sum < 0:
cur_sum = 0
return max_sum

/94. 二叉树的中序遍历.py
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
self.dfs(root, res)
return res

def dfs(self, root, res):
if root:
if root.left:
self.dfs(root.left, res)
res.append(root.val)
if root.right:
self.dfs(root.right, res)

/134. 加油站.py
"""
给你一个整数数组 nums ,数组中的整数代表纸牌上的点数。
你可以从数组中删除任意数量的纸牌,每次删除时选择一个特定的索引 i ,然后将纸牌从数组中移除,同时移除所有满足 0 <= j < i 且 nums[j] > nums[i] 的纸牌。
在删除之后,你可以选择并重新排列剩余纸牌的顺序。
返回你能得到的 最大整数序列长度 。
"""

class Solution:
def maxmiumRemoval(self, nums: List[int]) -> int:
stack = []
for i in range(len(nums)):
while stack and stack[-1] < nums[i]:
stack.pop()
stack.append(nums[i])
return len(stack)

/45. 跳跃游戏 II.py
"""
给你一个整数数组 nums ,数组中的整数代表纸牌上的点数。
你可以从数组中删除任意数量的纸牌,每次删除时选择一个特定的索引 i ,然后将纸牌从数组中移除,同时移除所有满足 0 <= j < i 且 nums[j] > nums[i] 的纸牌。
在删除之后,你可以选择并重新排列剩余纸牌的顺序。
返回你能得到的 最大整数序列长度 。
"""

class Solution:
def maxmiumRemoval(self, nums: List[int]) -> int:
stack = []
for i in range(len(nums)):
while stack and stack[-1] < nums[i]:
stack.pop()
stack.append(nums[i])
return len(stack)

/77. 组合每种颜色的绳子.py
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
dummy = ListNode(next=head)
cur = dummy

while cur:
# 找到 k 个子链表的最后一个节点
for _ in range(k):
if cur.next:
cur = cur.next
else:
return dummy.next
# 逆转这 k 个子链表
new_head = cur.next
for _ in range(k):
cur.next = new_head.next
new_head.next = new_head.next.next
cur.next.next = new_head
# 移动到下一个子链表
cur = new_head
return dummy.next

/19. 删除链表的倒数第 N 个结点.py
"""
给你一个整数数组 nums ,数组中的整数代表纸牌上的点数。
你可以从数组中删除任意数量的纸牌,每次删除时选择一个特定的索引 i ,然后将纸