力扣刷题笔记(二)(待完善)

最近刷了两题力扣题,一题是二这题,是属于困难题系列。作完了发现困难题就是和简单题有不同的地方,考虑的角度都不同了。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就是一种双端队列。等过几天再去仔细从新思考这一题,搁置。队列

相关文章
相关标签/搜索