力扣最热一百题——每日温度

2023-11-09 22:13

本文主要是介绍力扣最热一百题——每日温度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python后面的文章,内容都比较多,但是同时我又想保持每天更新的速度,所以Python的文章我继续打磨打磨,先更新一篇算法的文章。

一身正气报国家,旁无乱境不恋她

ヾ(◍°∇°◍)ノ゙


力扣题号:739. 每日温度 - 力扣(LeetCode)

下述题目描述和示例均来自力扣

题目描述

给定一个整数数组 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

上嘴脸!!!!

思路

Java解法一:直接暴力

这里直接两层for循环挨个找就行

class Solution {public int[] dailyTemperatures(int[] temperatures) {int length = temperatures.length;int[] answer = new int[length];for (int i = 0; i < length; i++) {int far = 1;for (int j = i + 1; j < length; j++) {if (temperatures[i] < temperatures[j]){answer[i] = far;break;}else {far++;}}}return answer;}
}

但是不好意思,超时了

因为没过我就不提供另外的语法了

Java解法二:栈

这里我们可以采用一个栈,来记录之前的温度(记录的是低温),然后遍历数组,发现如果今天的温度大于栈顶存储的温度,则将今天温度的数组下标和栈顶的相减获得天数差值,然后存入answer数组即可。

class Solution {public int[] dailyTemperatures(int[] temperatures) {public int[] dailyTemperatures(int[] temperatures) {// 记录数组长度int length = temperatures.length;// 准备需要返回的数组int[] answer = new int[length];// 准备一个栈来存储Deque<Integer> stack = new LinkedList<>();for (int i = 0; i < length; i++) {// 获取每次的温度int temperature = temperatures[i];// 若栈不为空而且,当前温度大于栈顶的温度(这里会一直查找)弹出栈,获取下标差值while (!stack.isEmpty() && temperature > temperatures[stack.peek()]) {// 获取栈顶元素int preIndex = stack.pop();// 取得下标差值,写入answer数组answer[preIndex] = i - preIndex;}// 存入栈stack.push(i);}return answer;}
}

C++解法二:栈

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int length = temperatures.size();vector<int> answer(length);stack<int> stack;for(int i = 0; i < length; i++){int temperature = temperatures[i];while(!stack.empty() && temperature > temperatures[stack.top()]){int preIndex = stack.top();answer[preIndex] = i - preIndex;stack.pop();}stack.push(i);}return answer;}
};

对于C++比Java算法题跑的慢这个事情我已经习以为常了。

Python解法二:栈

class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:length = len(temperatures)# python的列表初始化answer= [0] * lengthstack = []for i in range(length):temperature = temperatures[i]while stack and temperature > temperatures[stack[-1]]:prev_index = stack.pop()answer[prev_index] = i - prev_indexstack.append(i)return answer

 果然是发展越来越好的语言,速度越来越快了奥!

结语

就这样

再见ヾ( ̄▽ ̄)Bye~Bye~

这篇关于力扣最热一百题——每日温度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378746

相关文章

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1(错误经验) #include <iostream>#include <string>using namespace std;int main() {string s;string ret;int count = 0;while(cin >> s)for(auto a : s){if(count == 0){if( a <=

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

【每日刷题】Day113

【每日刷题】Day113 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 91. 解码方法 - 力扣(LeetCode) 2. LCR 098. 不同路径 - 力扣(LeetCode) 3. 63. 不同路径 II - 力扣(LeetCode) 1. 91. 解码方法 - 力扣(LeetCode) //思路:动态规划。 cl

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

力扣接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2: 输入:height

每日一题——第八十一题

打印如下图案: #include<stdio.h>int main() {int i, j;char ch = 'A';for (i = 1; i < 5; i++, ch++){for (j = 0; j < 5 - i; j++){printf(" ");//控制空格输出}for (j = 1; j < 2 * i; j++)//条件j < 2 * i{printf("%c", ch