力扣刷題筆記(二)(待完善)

最近刷了兩題力扣題,一題是二這題,是屬於困難題系列。作完了發現困難題就是和簡單題有不同的地方,考慮的角度都不同了。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就是一種雙端隊列。等過幾天再去仔細從新思考這一題,擱置。隊列

相關文章
相關標籤/搜索