题目
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sliding-window-maximum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
c#
思路
这道题我并没有运行成功,运行中出现的错误提示我觉得可能是系统本身的问题,具体我也不清楚。题解和评论处我也没有找到正确的用c#解决问题的方法。我就大致讲一下我的思路,就是先将特殊情况不符合要求的数组直接给出返回值,接着利用队列的方式进行出队和入队,比较每一组大小时我直接利用数组的方式进行的比较,好像这样用队列就没有什么必要了…
public class Solution {
public int[] MaxSlidingWindow(int[] nums, int k) {
int n=0;
n=nums.Length;
if (nums == null || n== 0)
{
return new int[0];
}
if(nums.Length==1)
{return nums;}
Queue<int> que=new Queue<int>();
int[] Max = new int[nums.Length - k + 1];
max=nums[0];
for(int i=0;i<k;i++)
{
que.Enqueue(nums[i]);
if(max<nums[i])
max=nums[i];
}
Max[0]=max;
int k=1;
for(int j=k-1;j<n-k+1;j++)
{
temp=que.Dequeue();
que.Enqueue(nums[j]);
if(temp==max)
{
for(int i=0;i<k;i++)
{
if(max<nums[j+i])
{
max=nums[j+i];
Max[k]=max;
k++;
}
}
}
else
{
Max[k]=max;
k++;
}
}
return Max;
}
}