滑动窗口最大值

xiaoxiao2021-02-28  118

//分三种情况讨论 //首先当前窗口中新添加的值s大于前一个窗口最大值m,则当前窗口最大值为k //当前窗口新添加的至的值s小于最大的值m,且m在当前窗口中,则为m //s小于m并且m被滑走了,则重新再找 public ArrayList<Integer> maxInWindows(int [] num, int size) { int len = num.length; if(num==null||len<size||size<=0){ return null; } ArrayList<Integer> list = new ArrayList<Integer>(); int max = findMax(num,0,size-1); list.add(num[max]); for(int i = size;i<len;i++){ if(num[i]>num[max]){ max= i; }else{ if(max==i-size) max = findMax(num,i-size+1,i); } list.add(num[max]); } return list; } int findMax(int[] num, int start,int end){ int max = start; for(int i = start+1;i<=end;i++){ if(num[i]>num[max]) max = i; } return max; }
转载请注明原文地址: https://www.6miu.com/read-37860.html

最新回复(0)