核心思路
与找朋友一致,单调栈解决,注意单调栈中存放的是数组元素的下标。
算法设计流程
当遇到比栈顶元素小的元素的时候,就将元素的下标出栈,保存进入结果数组的下标中,结果数组的元素值是比当前栈顶元素小的元素的下标。
代码细节
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String[] str=scanner.nextLine().split(" ");
int[] num=new int[str.length];
for (int i = 0; i < str.length; i++) {
num[i]=Integer.parseInt(str[i]);
}
Stack<Integer> stack=new Stack<>();
int[] res=new int[num.length];
for (int i = 0; i < num.length; i++) {
while (!stack.isEmpty()&&num[i]<num[stack.peek()]){
res[stack.pop()]=i;
}
stack.push(i);
}
int[] ans=new int[res.length];
for (int i = 0; i < res.length; i++) {
if (res[i]==i){
ans[i]=num[i];
}else {
ans[i]=num[i]+num[res[i]];
}
}
System.out.println(Arrays.toString(ans));
}
}