1. 每日温度
(1)暴力(从左往右)
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int len = temperatures.length;
int[] res = new int[len];
int index = 0; //其实没必要用index计数,只是为了更加清晰
for (int i = 0; i < len; i++) {
//每次跳出循环置0
index = 0;
for (int j = i + 1; j < len; j++) {
index++;
if (temperatures[j] > temperatures[i]) {
res[i] = index;
break;
}
}
}
return res;
}
}
其实没必要用index计数,只是为了更加清晰
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int len = temperatures.length;
int[] res = new int[len];
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (temperatures[j] > temperatures[i]) {
res[i] = j - i;
break;
}
}
}
return res;
}
}
(2)从右往左(减少判断)
如果我们先从计算右边,那么我们计算过的位置就不需要重复计算,如图所示:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int len = temperatures.length;
int[] res = new int[len];
//从右往左遍历
for (int i = len - 2; i >= 0; i--) {
// j+= res[j]是利用已经有的结果进行跳跃
for (int j = i + 1; j < len; j += res[j]) {
if (temperatures[j] > temperatures[i]){
res[i] = j - i;
break;
}
else if (res[j] == 0) { //遇到0表示后面不会有更大的值,那当然当前值就应该也为0
res[i] = 0;
break;
}
}
}
return res;
}
}