每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/daily-temperatures
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Stack<Integer> stack = new Stack<>();
int[] res = new int[temperatures.length];
Arrays.fill(res, 0);
for (int i = 0; i < temperatures.length; i++) {
if (stack.isEmpty() || temperatures[i] <= temperatures[stack.peek()]) {
stack.push(i);
} else {
while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
res[stack.peek()] = i - stack.peek();
stack.pop();
}
stack.push(i);
}
}
return res;
}
}
去除重复字母
给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
输入:s = “bcabc”
输出:“abc”
class Solution {
public String removeDuplicateLetters(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
Character c = s.charAt(i);
if (stack.contains(c)) {
continue;
}
while (!stack.isEmpty() && stack.peek() > c && s.indexOf(stack.peek(), i) != -1) {
stack.pop();
}
stack.push(c);
}
char[] chars = new char[stack.size()];
for (int i = 0; i < stack.size(); i++) {
chars[i] = stack.get(i);
}
return new String(chars);
}
}
移除K位数字
给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
输入:num = “1432219”, k = 3
输出:“1219”
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。
class Solution {
public String removeKdigits(String num, int k) {
if (num.length() == k) {
return "0";
}
Stack<Character> stack = new Stack<>();
for (int i = 0; i < num.length(); i++) {
while (!stack.isEmpty() && num.charAt(i) < stack.peek() && k > 0) {
k--;
stack.pop();
}
stack.push(num.charAt(i));
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < stack.size() - k; i++) {
sb.append(stack.get(i));
}
String s = sb.toString().replaceAll("^0+", "");
return "".equals(s) ? "0" : s;
}
}