Leetcode739 Daily Temperatures
Posted chason95
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode739 Daily Temperatures相关的知识,希望对你有一定的参考价值。
首先想到暴力解法,方法1:
class Solution { public int[] dailyTemperatures(int[] temperatures) { int[] results = new int[temperatures.length]; for(int i=0;i<temperatures.length;i++) { int days = 0; for(int j=i+1;j<temperatures.length;j++) { days++; if(temperatures[j]>temperatures[i]) {results[i]=days;break;} } } return results; } }
效果可以说是十分的差了,然后想办法改进,发现可以使用map存储没有处理的数,在一次遍历中完成,但是最坏的情况下时间复杂度其实并没有降低,最终实测由于set相关操作较慢,还超时了,但是有些东西还是有价值的,故记录一下,方法2(并不能AC):
class Solution { public int[] dailyTemperatures(int[] temperatures) { int[] result = new int[temperatures.length]; HashMap<Integer,Integer> map = new HashMap<>(); map.put(0, temperatures[0]); Set<Map.Entry<Integer, Integer>> set = map.entrySet(); for(int i=1;i<temperatures.length;i++) { // for(int k:set) { //java.util.ConcurrentModificationException因为之后更改了迭代条件set // if(temperatures[i]>k) { // int v = map.get(k); // result[v]=i-v; // map.remove(k); // } // } //ConcurrentModificationException Solution1:用Iterator的remove;Solution2:用/ConcurrentHashMap(貌似叫这个名字) Iterator<Map.Entry<Integer, Integer>> iter = set.iterator(); while(iter.hasNext()) { Map.Entry<Integer, Integer> n = iter.next(); int v = n.getValue(); if(temperatures[i]>v) { int k = n.getKey(); result[k] = i-k; iter.remove(); } } map.put(i, temperatures[i]); } return result; } }
这个超时搞得我很懵逼,于是学习一下solution好了。方法3:
以上是关于Leetcode739 Daily Temperatures的主要内容,如果未能解决你的问题,请参考以下文章
[栈] leetcode 739 Daily Temperatures
Leetcode739 Daily Temperatures
[LeetCode] 739. Daily Temperatures
LeetCode 739:每日温度 Daily Temperatures