案例五
滑动窗口练习题
题干:
有一个整形数组arr和一个大小为w的窗口,从数组的最左边滑到最右边,窗口每次向右滑一个位置,返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值,以数组为[4,3,5,4,3,3,6,7],w=3为例,因为第一个窗口[4,3,5]的最大值为5,第二个窗口[3,5,4]的最大值为5,第三个窗口[5,4,3]的最大值为5,第四个窗口[4,3,3]的最大值为4,第五个窗口[3,3,6]的最大值为6,第六个窗口[3,6,7]的最大值为7,所以最终返回[5,5,5,4,6,7]
解题思路:
用队列的思想实现
class Solution():
def sliding_window(self,arr,w):
n = len(arr)
res = []
if n<=0:
return
for i in range(n-w+1):
res.append(max(arr[i:i+w]))
return res
案例7
数组变树练习题
题干:
给定一个没有重复元素的数组arr,写出生成这个数组的MaxTree的函数
要求如果数组长度为N,则时间复杂度为O(n),额外空间复杂度为O(n)
MaxTree的概念如下:
1.MaxTree是一颗二叉树,数组的每一个值对应一个二叉树结点
2.包括MaxTree在内且在其中的每一颗子树上,值最大的结点都是树的头