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或隐式转换自动处理),但指针值本身可能改变。

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

感谢大家的三连支持!

相关推荐
汉克老师17 分钟前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程
程序猿编码23 分钟前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
leihefeng29 分钟前
手写数字识别:KNN vs 逻辑回归实战
python·算法·机器学习·逻辑回归·scikit-learn
影视飓风TIM1 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
全栈技术负责人1 小时前
DeepSeek Harness 业务工具权限插件 dsh-tool-permission设计思路
网络·算法·ai·ai编程
mmmmath_31 小时前
面试题 02.07. 链表相交
算法·链表
C++ 老炮儿的技术栈1 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
residual_fan2 小时前
特征级SMOTE(Feature-level SMOTE)论文分享
人工智能·算法·数据挖掘·数据分析
xxwxx__2 小时前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
wuminyu2 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++