题目描述:

解析:
对于取值为 2 的情况,我们总共需要两次遍历,第一次遍历判断某个值是否大于前面所有的值,第二次倒序遍历判断某个值是否小于后面所有的值。
对于取值为 1 的情况,在第二次遍历时排除取值为 2 后判断即可。
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; } } }
|