最近刷了兩題力扣題,一題是二這題,是屬於困難題系列。作完了發現困難題就是和簡單題有不同的地方,考慮的角度都不同了。java
題目要求很簡單,滑動窗口最大值,有點像操做系統裏的最小窗口置換和工做集頁面置換方法。測試
下面是方法一:一看這個循環裏面套循環,最底層還有一個有個條件語句,誰看了這種代碼,不搖頭,不嘆氣,這種代碼不用算都知道時間複雜度超級高。好吧,就是力扣過不去,力扣要求一分鐘。進行了改進。操作系統
class Solution { public int[] maxSlidingWindow(int[] nums, int k) { int len,count; len=nums.length; int data[] = new int[len-k+1]; for(int i=0;i<len-k+1;i++) { int max=nums[i]; for(int j=i;j<i+k;j++) { if(nums[j]>max) { max=nums[j]; } } data[count]=max; count++; } return data; } }
方法二:十分努力盡可能的減小了雙重循環裏的語句數,可是仍是沒法經過一分鐘測試(小聲嗶嗶,我十分懷疑是電腦問題)blog
class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if (nums == null || nums.length == 0) return new int[0]; int data[] = new int[nums.length-k+1]; for(int i=0;i<nums.length-k+1;i++) { int max=nums[i]; for(int j=1;j<k;j++) { max=Math.max(max,nums[i+j]); } data[i]=max; } return data; } }
而後我去看了大佬的解析,大佬們使用的是雙端隊列,我那時候以爲聽起來就很高大上,而後我今天遇到了,LinkedList就是一種雙端隊列。等過幾天再去仔細從新思考這一題,擱置。隊列