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

最近刷了两题力扣题,一题是二这题,是属于困难题系列。做完了发现困难题就是和简单题有不一样的地方,考虑的角度都不一样了。

题目要求很简单,滑动窗口最大值,有点像操作系统里的最小窗口置换和工作集页面置换方法。

下面是方法一:一看这个循环里面套循环,最底层还有一个有个条件语句,谁看了这种代码,不摇头,不叹气,这种代码不用算都知道时间复杂度超级高。好吧,就是力扣过不去,力扣要求一分钟。进行了改进。

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;
    }
}

  方法二:十分努力尽量的减少了双重循环里的语句数,但是还是无法通过一分钟测试(小声哔哔,我十分怀疑是电脑问题)

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就是一种双端队列。等过几天再去仔细重新思考这一题,搁置。

posted @ 2021-01-03 23:10  LonglonglongAL  阅读(73)  评论(0)    收藏  举报