每日温度

请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。

例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。

解题思路

一、针对数组中每个数据依次向后遍历,找到比当前温度更高的值,这样的时间复杂度是O(n2)

	public static int[] dailyTemperatures(int[] T) {
int flag;
for (int i=0;i<T.length;i++){
flag=0;
for (int j = i+1; j < T.length; j++) {
if (T[j]>T[i]){
T[i]=j-i;
flag=1;
break;
}
}
if (flag==0){
T[i]=0;
}
}
return T;
}

二、使用堆栈,遍历数组,将小于等于栈顶的元素放入栈中,出现大于栈顶数据的元素,就出栈并计算出升温天数。(只有比上一个元素小或者等于的元素放入栈中,所以栈中序列是一个有序序列)。
时间复杂度是O(n)

	public static int[] dailyTemperatures(int[] T) {
Deque<Integer> deque = new ArrayDeque<>();
deque.push(0);
for (int i = 1; i < T.length; i++) {
if (deque.isEmpty()){
deque.push(i);
}else if (T[deque.peek()]>=T[i]){
deque.push(i);
}else {
while (true){
if (deque.isEmpty()||T[deque.peek()]>=T[i]){
deque.push(i);
break;
}
T[deque.peek()]=i-deque.pop();
}
}
}
while (!deque.isEmpty()){
T[deque.pop()]=0;
}
return T;
}

最新文章

  1. xp搭建IIS出现HTTP 500错误-2147467259 (0x80004005)
  2. Thisgood
  3. Javascript中数组与字典(即map)的使用
  4. SQL Server 2008R2 禁用远程连接
  5. ImageMagick使用小节
  6. 两种Makefile
  7. VR元年,VR虚拟现实这只风口上的猪有怎样的变化?
  8. 一个web应用的诞生--美化一下
  9. Linux的安装和使用技巧
  10. JS刷新当前页面的几种方法总结
  11. gitlab之三: gitlab邮件通知的配置
  12. python 基础 内置函数 和lambda表达式
  13. 解析H5本地储存Web Storage
  14. jquery插件的几种写法
  15. 动态链接库DLL导出函数并导入使用
  16. ArrayList的源码分析
  17. 可重入读写锁ReentrantReadWriteLock基本原理分析
  18. Go第十篇之反射
  19. JQCloud: 一个前端生成美化标签云的简单JQuery插件
  20. [UVALive 2678] Subsequence

热门文章

  1. [刘阳Java]_CSS数字分页效果
  2. maven添加阿里云镜像
  3. React中组件之间通信的方式
  4. windows系统下 PHP怎么安装redis扩展
  5. vue tab实现右定位
  6. HashSet 的实现原理
  7. .NET5控制台程序使用EF连接MYSQL
  8. Java互联网架构师系统进阶课程 (一)【享学】
  9. C++ 打印乘法口诀
  10. linux50个常用命令