题目描述:

image-20250311151410976

解析:

对于取值为 2 的情况,我们总共需要两次遍历,第一次遍历判断某个值是否大于前面所有的值,第二次倒序遍历判断某个值是否小于后面所有的值。
对于取值为 1 的情况,在第二次遍历时排除取值为 2 后判断即可。

/**
* @author hxw
* @version 1.0
* @date 2025/3/11 14:36
* @description: 2012. 数组美丽值求和 中等
*/
public class eleven {
public static void main(String[] args) {
int result = Solution.sumOfBeauties(new int[]{1, 2, 3});
System.out.println(result);


}

static class Solution {
public static int sumOfBeauties(int[] nums) {
int n = nums.length;
int[] state = new int[n];
int pre_max = nums[0];
for (int i = 1; i < n - 1; i++) {
if (nums[i] > pre_max) {
state[i] = 1;
pre_max = nums[i];
}
}
int suf_min = nums[n - 1];
int res = 0;
for (int i = n - 2; i > 0; i--) {
if (state[i] == 1 && nums[i] < suf_min) {
res += 2;
} else if (nums[i - 1] < nums[i] && nums[i] < nums[i + 1]) {
res += 1;
}
suf_min = Math.min(suf_min, nums[i]);
}
return res;
}
}
}