LeetCode 739. 每日温度(C++)*

思路:可以用暴力搜索,时间复杂度为O(n2);或者使用递减栈:用栈存储每天温度的索引,如果新的一天的温度高于栈顶的就一直pop,并且存储索引的差保存到answer中,否则就push,注意栈中存储的是索引而非温度
原题链接:https://leetcode.cn/problems/daily-temperatures/description/?favorite=2cktkvj

1.题目如下:

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3:

输入: temperatures = [30,60,90]
输出: [1,1,0]
 

提示:

1 <= temperatures.length <= 105
30 <= temperatures[i] <= 100

2.代码如下:

class Solution {
public:
//方案一:暴力搜索;时间复杂度O(n2)

//方案二:使用递减栈
/*
    主要是用栈存储每天温度的索引,如果新的一天的温度高于栈顶的就一直pop,否则就push
    注意栈中存储的是索引而非温度
*/
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        
        int n=temperatures.size();
        vector<int> ans(n,0);
        stack<int> stackTemp;
        for(int i=0;i<n;i++){
            //注意这里一定要把判断栈是否为空放在前面,因为如果栈为空的话,则无法比较元素大小
            while(!stackTemp.empty()&&temperatures[i]>temperatures[stackTemp.top()] ){
                //栈存储的是每个元素的索引,而非元素值
                auto idx=stackTemp.top();
                stackTemp.pop();
                ans[idx]=i-idx;
            }
            stackTemp.push(i);
            
        }
        return ans;
    }
};
<think>好的,用户想找LeetCode热度前100题目的C++题解。首先我需要确认用户的具体需求。用户可能正在准备面试,需要高效的解题方法,或者想通过经典题目提升编程能力。用户提到的“热度排名前100”可能指的是LeetCode官方的热门题目,或者是根据频率统计的高频面试题。 接下来,我需要回忆LeetCode上常见的top 100问题列表。通常这些题目包括两数之和、反转链表、合并区间、最长子串等。不过具体列表可能随时间变化,需要确保信息的最新性。但用户可能不需要最新的,而是普遍认可的热门题目。 然后,用户需要C++的解决方案。我需要确认是否有可靠的资源提供这些题解。比如官方题解、知名博客或GitHub仓库。引用中提到的几个例子,比如引用1、2、3、4都是C++代码,说明站内有相关资源。需要检查这些引用是否覆盖了top 100中的题目。 比如引用1是二进制求和,引用2是旋转数组,引用3是子集II,引用4是每日温度。这些题目可能属于top 100。但需要综合判断是否有足够的覆盖范围。此外,用户可能需要知道如何找到这些题解,比如通过LeetCode的讨论区、官方解答,或者第三方整理。 可能用户不知道如何高效搜索,或者希望直接获得资源链接。因此,我应该建议几种方法:官方题解、GitHub仓库、书籍《剑指Offer》和《程序员面试金典》的C++版本,以及在线学习平台。 同时,用户可能希望了解哪些题目是必须掌握的,比如两数之和、LRU缓存、合并K个排序链表等。需要列出一些典型题目,并说明它们的考察点,帮助用户有针对性地准备。 最后,要确保回答结构清晰,分点列出方法和示例题目,并附上引用来源,如引用中的代码示例。还要提醒用户注意题目列表的动态变化,建议结合多个来源。</think>### LeetCode Top 100 热门题目的 C++ 题解资源 LeetCode 热度排名前 100 的题目通常涵盖高频算法与数据结构问题,以下是获取 C++ 题解的主要途径和相关示例: --- #### **1. 官方题解与讨论区** LeetCode 官方为每道题目提供多种语言的题解(包括 C++),通常标注为“Solution”。例如: - **两数之和**(No. 1):哈希表实现,时间复杂度 $O(n)$[^1]。 - **LRU 缓存**(No. 146):结合哈希表和双向链表实现 $O(1)$ 操作[^2]。 - **合并 K 个升序链表**(No. 23):优先队列或分治法优化[^3]。 --- #### **2. GitHub 开源项目** 多个 GitHub 仓库系统整理了 LeetCode 题解,例如: - **LeetCode-CPP**:按题目分类提供 C++ 实现,包含代码注释。 - **LeetCode-Solutions**:部分题目提供多种解法(如动态规划、单调)[^4]。 **示例代码片段**(反转链表,No. 206): ```cpp class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *prev = nullptr, *curr = head; while (curr) { ListNode* next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } }; ``` --- #### **3. 书籍与在线课程** - **《剑指 Offer》**:C++ 版本涵盖链表、树等高频题型[^2]。 - **《程序员面试金典》**:包含字符串操作、动态规划等题目的 C++ 实现。 --- #### **4. 典型题目与考察点** | 题目编号 | 题目名称 | 核心算法 | 相关引用 | |----------|-------------------------|--------------------|-----------| | 3 | 无重复字符的最长子串 | 滑动窗口 | [^1] | | 5 | 最长回文子串 | 动态规划/中心扩展 | | | 15 | 三数之和 | 双指针 | [^3] | | 53 | 最大子数组和 | 动态规划 | | | 70 | 爬楼梯 | 斐波那契数列 | | --- #### **注意事项** - **动态更新**:LeetCode 热门题目列表可能随面试趋势变化,建议结合最新企业题库。 - **复杂度优化**:部分题目需注意 C++ 容器特性(如 `vector` 预分配内存提升性能)。 --- §§ 相关问题 §§ 1. 如何选择 LeetCode 题目的最优解法? 2. 动态规划在 LeetCode 高频题中的应用场景? 3. C++ 中如何实现链表和树的通用模板?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_panbk_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值