vs做的本地网站网站设计广州量计价格
2026/4/15 14:17:22 网站建设 项目流程
vs做的本地网站,网站设计广州量计价格,企业网页制作方案,微信微网站制作教程#x1f525;个人主页#xff1a;Milestone-里程碑 ❄️个人专栏: 力扣hot100 CLinux GitMySQL #x1f31f;心向往之行必能至 核心思路#xff1a;单调队列 我们可以用一个 ** 双端队…个人主页Milestone-里程碑❄️个人专栏: 力扣hot100 CLinuxGitMySQL心向往之行必能至核心思路单调队列我们可以用一个 ** 双端队列deque** 来维护一个单调递减的序列让队列的头部始终是当前窗口的最大值。这样每个元素最多入队和出队一次整体时间复杂度可以优化到O(n)。具体步骤如下入队维护单调性当新元素进入窗口时从队列尾部开始把所有小于等于它的元素都弹出再将它入队。这样能保证队列从队头到队尾是单调递减的。出队维护窗口边界检查队列头部的元素下标是否已经不在当前窗口范围内如果是就将其弹出。记录结果当窗口形成即left 0时队列头部就是当前窗口的最大值将其加入结果数组。完整代码cppclass Solution { public: vectorint maxSlidingWindow(vectorint nums, int k) { int n nums.size(); vectorint ans(n - k 1); // 结果数组大小为窗口数量 dequeint q; // 双端队列存储元素下标 for (int i 0; i n; i) { // 1. 维护队列的单调递减性 while (!q.empty() nums[q.back()] nums[i]) { q.pop_back(); } q.push_back(i); // 2. 移除窗口外的元素 int left i - k 1; // 当前窗口的左边界 if (q.front() left) { q.pop_front(); } // 3. 当窗口形成时记录最大值 if (left 0) { ans[left] nums[q.front()]; } } return ans; } };示例验证以题目中的示例 1 为例输入nums [1,3,-1,-3,5,3,6,7], k 3我们的算法会依次维护队列窗口[1,3,-1]→ 队列[1]→ 最大值3窗口[3,-1,-3]→ 队列[1,2]→ 最大值3窗口[-1,-3,5]→ 队列[4]→ 最大值5最终输出结果[3,3,5,5,6,7]与示例完全一致。复杂度分析时间复杂度O(n)。每个元素最多被加入队列一次弹出队列一次总操作次数为2n。空间复杂度O(k)。队列中最多存储k个元素。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询