Skip to content

2012. Sum of Beauty in the Array

Description

You are given a 0-indexed integer array nums. For each index i (1 <= i <= nums.length - 2) the beauty of nums[i] equals:

  • 2, if nums[j] < nums[i] < nums[k], for all 0 <= j < i and for all i < k <= nums.length - 1.
  • 1, if nums[i - 1] < nums[i] < nums[i + 1], and the previous condition is not satisfied.
  • 0, if none of the previous conditions holds.

Return the sum of beauty of all nums[i] where 1 <= i <= nums.length - 2.

 

Example 1:

Input: nums = [1,2,3]
Output: 2
Explanation: For each index i in the range 1 <= i <= 1:
- The beauty of nums[1] equals 2.

Example 2:

Input: nums = [2,4,6,4]
Output: 1
Explanation: For each index i in the range 1 <= i <= 2:
- The beauty of nums[1] equals 1.
- The beauty of nums[2] equals 0.

Example 3:

Input: nums = [3,2,1]
Output: 0
Explanation: For each index i in the range 1 <= i <= 1:
- The beauty of nums[1] equals 0.

 

Constraints:

  • 3 <= nums.length <= 105
  • 1 <= nums[i] <= 105

 

Solutions

Solution: Prefix and Suffix

  • Time complexity: O(n)
  • Space complexity: O(n)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @return {number}
 */
const sumOfBeauties = function (nums) {
  const size = nums.length;
  const rightMinValues = new Array(size).fill(0);
  let maxValue = nums[0];
  let result = 0;

  rightMinValues[size - 1] = nums[size - 1];
  for (let index = size - 2; index >= 0; index--) {
    rightMinValues[index] = Math.min(rightMinValues[index + 1], nums[index]);
  }
  for (let index = 1; index < size - 1; index++) {
    const value = nums[index];

    if (value > maxValue && value < rightMinValues[index + 1]) {
      result += 2;
      maxValue = value;
      continue;
    }
    maxValue = Math.max(value, maxValue);
    if (value <= nums[index - 1]) continue;
    if (value >= nums[index + 1]) continue;
    result += 1;
  }
  return result;
};

Released under the MIT license