-
我做过的第一道单调栈,平心而论还是很难的。这道题想法太妙,找时间一定重新提交一下!!!认真体会单调栈的思想!另,今天太困了,宜早睡。加把劲儿努力学习啊!!
class Solution { Deque<Integer> res = new LinkedList<>(); private void pop(int value){ if(!res.isEmpty() && value == res.getFirst()){ res.removeFirst(); } } private void push(int value){ while(!res.isEmpty() && res.getLast() < value){ res.removeLast(); } res.addLast(value); } private int peek(){ return res.peek(); } public int[] maxSlidingWindow(int[] nums, int k) { int len = nums.length, num = 0; int[] arr = new int[len-k+1]; for(int i = 0; i < len; ++i){ if(i >= k){ pop(nums[i-k]); push(nums[i]); arr[i-k+1] = peek(); }else{ push(nums[i]); if(i == k-1) arr[0] = peek(); } } return arr; } }
这题的实现简单粗暴,还能这么骚…
算法:建立一个map,map元素名称到元素出现个数。之后,把所有元素倒腾到一个priority queue里,按照出现次数进行大小排列。
pop出头k个,装到一个数组里即可。
博客分享了两道LeetCode算法题。一是Sliding Window Maximum,作者认为是第一道单调栈题且有难度,想重新提交体会思想;二是Top K Frequent Elements,实现方法是用map记录元素出现个数,再将元素放入priority queue按次数排序,取出前k个装到数组。

被折叠的 条评论
为什么被折叠?



