文章目录
一,滑动窗口最大值
1,程序简介
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
示例 1:
- 输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
- 输出:[3,3,5,5,6,7]
- 解释:
滑动窗口的位置 最大值
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
示例 2:
- 输入:nums = [1], k = 1
- 输出:[1]
示例 3:
- 输入:nums = [1,-1], k = 1
- 输出:[1,-1]
示例 4:
- 输入:nums = [9,11], k = 2
- 输出:[11]
示例 5:
- 输入:nums = [4,-2], k = 2
- 输出:[4]
提示:
- 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
- − 104 < = n u m s [ i ] < = 1 0 4 -104 <= nums[i] <= 10^4 −104<=nums[i]<=104
- 1 <= k <= nums.length
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 4 23:00:42 2022
Function: 滑动窗口最大值
@author: 小梁aixj
"""
class Solution(object):
def maxSlidingWindow(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
if len(nums) == 0:
return []
if k == 1:
return nums
res = []
res.append(max(nums[:k]))
for i in range(1, len(nums) - k + 1):
m = max(nums[i : i + k])
res.append(m)
return res
#%%
s = Solution()
print(s.maxSlidingWindow(nums = [1,-1], k = 1))
3,运行结果
二,反转链表
1,程序简介
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
- 输入:head = [1,2,3,4,5]
- 输出:[5,4,3,2,1]
示例 2:
- 输入:head = [1,2]
- 输出:[2,1]
示例 3:
- 输入:head = []
- 输出:[]
提示:
- 链表中节点的数目范围是 [0, 5000]
- -5000 <= Node.val <= 5000
进阶:
- 链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 4 23:01:12 2022
Function: 反转链表
@author: 小梁aixj
"""
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
current = head
nextNode = None
h = head
while current is not None and current.next is not None:
nextNode = current.next
if nextNode.next is not None:
tmpNode = current.next
current.next = nextNode.next
tmpNode.next = h
else:
current.next = None
nextNode.next = h
h = nextNode
return h
三,移除链表元素
1,程序简介
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
- 输入:head = [1,2,6,3,4,5,6], val = 6
- 输出:[1,2,3,4,5]
示例 2:
- 输入:head = [], val = 1
- 输出:[]
示例 3:
- 输入:head = [7,7,7,7], val = 7
- 输出:[]
提示:
- 列表中的节点数目在范围 [0, 104] 内
- 1 <= Node.val <= 50
- 0 <= val <= 50
2,程序代码
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 4 23:01:28 2022
Function: 移除链表元素
@author: 小梁aixj
"""
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
p = ListNode(0)
p.next = head
while p.next:
if p.next.val == val:
if p.next == head:
head = head.next
p.next = head
else:
p.next = p.next.next
else:
p = p.next
return head