LeetCode 每日一题 345. + 739

121 阅读1分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

345. 反转字符串中的元音字母

编写一个函数,以字符串作为输入,反转该字符串中的元音字母。

示例 1:

输入:"hello"
输出:"holle"

示例 2:

输入:"leetcode"
输出:"leotcede"

提示:

  • 元音字母不包含字母 "y" 。

方法一

双指针:

设置两个指针,分别置于字符串的头和尾

  • 当头指针不是元音字母时,往后移,直到指向的是元音字母;
  • 当尾指针不是元音字母时,往前移,直到指向的是元音字母;
  • 交换头尾指针指向的两个元音字母

重复上述步骤,直到头指针在尾指针的后面;

class Solution {
    public String reverseVowels(String s) {
        String set = "aeiouAEIOU";
        char[] ch = s.toCharArray();
        int n = ch.length;
        for (int i = 0, j = n - 1; i < j; i ++, j --) {
            while (i < n && set.indexOf(ch[i]) < 0) i ++;
            while (j > i && set.indexOf(ch[j]) < 0) j --;
            if (i >= j) break;
            char tmp = ch[i];
            ch[i] = ch[j];
            ch[j] = tmp;
        }
        return new String(ch);
    }
}

时间复杂度: O(n)

空间复杂度: O(n)

739. 每日温度

请根据每日 气温 列表 temperatures ,请计算在每一天需要等几天才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 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

方法一

单调栈:

根据题意,转换一下,就是让我们求在当前元素的右边,第一个比其大的元素的位置和他之间的距离;

求右边第一个比自己大的元素,这句话,一下子就能让我们想到可以使用单调栈来求解;

从右往左遍历,维护一个栈;

  • 当前元素比栈顶元素小时,计算和栈顶元素之间的距离;
  • 当前元素比栈顶元素大时,将栈顶元素出栈,直到栈顶元素比自己大或者栈为空;若还有元素,则计算距离;否则,为0;
class Solution {
    public int[] dailyTemperatures(int[] temp) {
        LinkedList<Integer> stk = new LinkedList<>();
        int n = temp.length;
        int[] res = new int[n];
        for (int i = n - 1; i >= 0; i -- ) {
            if (stk.size() == 0) {
                stk.add(i);
                res[i] = 0;
            }
            else {
                while(stk.size() > 0 && temp[stk.getLast()] <= temp[i]) stk.removeLast();
                if (stk.size() == 0) res[i] = 0;
                else res[i] = stk.getLast() - i;
                stk.add(i);
            }
        }
        return res;
    }
}

时间复杂度: O(n)

空间复杂度: O(n)