1.18 - 滑动窗口最大值 && 子类的指针转换为父类的指针,指针的值是否会改变

目录

1.滑动窗口最大值

a.核心思想

b.思路

c.步骤

2.子类的指针转换为父类的指针,指针的值是否会改变


1.滑动窗口最大值

239. 滑动窗口最大值 - 力扣(LeetCode)https://leetcode.cn/problems/sliding-window-maximum/

cpp 复制代码
class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        deque<int> dq;
        vector<int> result;
        
        for (int i = 0; i < nums.size(); ++i) 
        {
            // 移除不在窗口范围内的索引
            if (!dq.empty() && dq.front() < i - k + 1) 
                dq.pop_front();
            
            // 移除比当前元素小的索引
            while (!dq.empty() && nums[dq.back()] < nums[i]) 
            {
                dq.pop_back();
            }
            
            // 添加当前索引到队列尾部
            dq.push_back(i);
            
            // 如果形成完整窗口,添加最大值到结果
            if (i >= k - 1) 
                result.push_back(nums[dq.front()]);
        }
        
        return result;
    }
};

a.核心思想

利用双端队列(deque)来维护一个滑动窗口中的潜在最大值的索引,使得队列中的索引对应的元素是单调递减的。这样,队列的头部始终是当前窗口中的最大值的索引。

b.思路

① 初始化一个双端队列 deque 和一个结果数组 result。

② 遍历数组 nums,对于每个元素:

  • 移除队列中不在当前窗口范围内的索引。

  • 移除队列中对应元素小于当前元素的索引,因为这些元素不可能再成为后续窗口的最大值。

  • 将当前元素的索引添加到队列尾部。

  • 如果已经形成了一个完整的窗口(即遍历的元素数量大于等于 k),将队列头部的元素(即当前窗口的最大值)添加到结果数组中。

③ 返回结果数组。

c.步骤

① 定义一个双端队列 dq 和一个结果向量 result。

② 遍历 nums 数组,索引为 i:

  • 移除 dq 中所有索引小于 i - k + 1 的元素(这些元素已经不在当前窗口中)。

  • 移除 dq 中所有对应元素小于 nums[i] 的元素。

  • 将 i 添加到 dq 的尾部。

  • 如果 i >= k - 1,将 nums[dq.front()] 添加到 result 中。

③ 返回 result。

2.子类的指针转换为父类的指针,指针的值是否会改变

在C++中,单继承时子类指针转父类指针地址通常不变(指向同一基地址);多重继承或虚继承时,若父类子对象存在偏移,地址可能被调整(通过static_cast或隐式转换自动处理),但指针值本身可能改变。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

相关推荐
2601_967979121 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
程序猿打工仔1 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
通信小呆呆2 小时前
电子战干扰技术:从“蛮力压制”到“精准欺骗”,再到“认知博弈”
算法·通信·isac
老师我太想进步了20262 小时前
【数据结构-6】算法美学之单链表(1)
数据结构·算法
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
希望我万事顺遂3 小时前
力扣hot100-滑动窗口最大值
数据结构·算法·leetcode
꧁细听勿语情꧂4 小时前
二叉树余题,排序、直接插入排序、希尔排序
c语言·开发语言·数据结构·算法
是main不是漫4 小时前
【双指针|LeetCode1089 复写零】巧用逆向思路,破解原地覆盖陷阱
数据结构·算法·leetcode
是main不是漫4 小时前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++
专注仿真13 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法