力扣刷题笔记(二)(待完善)
最近刷了两题力扣题,一题是二这题,是属于困难题系列。做完了发现困难题就是和简单题有不一样的地方,考虑的角度都不一样了。
题目要求很简单,滑动窗口最大值,有点像操作系统里的最小窗口置换和工作集页面置换方法。
下面是方法一:一看这个循环里面套循环,最底层还有一个有个条件语句,谁看了这种代码,不摇头,不叹气,这种代码不用算都知道时间复杂度超级高。好吧,就是力扣过不去,力扣要求一分钟。进行了改进。
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就是一种双端队列。等过几天再去仔细重新思考这一题,搁置。

浙公网安备 33010602011771号