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

LeetCode-739 Daily Temperatures Solution (with Java)

LeetCode 739. 每日温度 Daily Temperatures (Medium)