1 Star 0 Fork 0

唐梓迅/leetcode题解

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
剑指offer59 1.21 KB
一键复制 编辑 原始数据 按行查看 历史
唐梓迅 提交于 2022-04-04 15:26 . add 剑指offer59.
int* maxSlidingWindow(int* nums, int numsSize, int k, int* returnSize){
*returnSize = 0;
if (numsSize == 0) {
return NULL;
}
// 1、使用数组模拟队列
int *queue = (int*)malloc(sizeof(int) * numsSize);
if (queue == NULL) {
return NULL;
}
memset(queue, 0, sizeof(int) * numsSize);
// 2、对前k个元素,模拟双端队列找出第一个最大值
int head = 0, rear = 0;
for (int i = 0; i < k; i++) {
while (head < rear && nums[i] > nums[queue[rear - 1]]) {
rear--;
}
queue[rear++] = i;
}
int* res = (int*)malloc(sizeof(int) * (numsSize - k + 1));
res[(*returnSize)++] = nums[queue[head]];
// 3、滑动窗口,模拟双端队列找出滑动中的最大值
for (int i = k; i < numsSize; i++) {
// 1)窗口向前滑动,移入新数字
while (head < rear && nums[i] > nums[queue[rear - 1]]) {
rear--;
}
queue[rear++] = i;
// 2)移出旧数字
while (queue[head] <= i - k) {
head++;
}
// 3)更新当前窗口的最大值
res[(*returnSize)++] = nums[queue[head]];
}
return res;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/Tang-CMer/leetcode-problem-solving.git
git@gitee.com:Tang-CMer/leetcode-problem-solving.git
Tang-CMer
leetcode-problem-solving
leetcode题解
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385