#891

Sum of Subsequence Widths

Hard
ArrayMathSortingSortingCombinatorial Counting
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n log n)
Space
O(1)
O(1)
💡

Intuition

Time O(n log n)Space O(1)

The optimal solution leverages sorting and combinatorial counting. By sorting the array, we can determine how many times each element contributes as a maximum and minimum in various subsequences, allowing us to compute the total width efficiently.

⚙️

Algorithm

4 steps
  1. 1Step 1: Sort the array in ascending order.
  2. 2Step 2: For each element nums[i], calculate its contribution as a maximum and minimum in subsequences based on its position.
  3. 3Step 3: Use combinatorial counting to determine how many subsequences include nums[i] as the maximum and how many include it as the minimum.
  4. 4Step 4: Sum these contributions and return the result modulo 10^9 + 7.
solution.py11 lines
1# Full working Python code
2def sum_of_subsequence_widths(nums):
3    MOD = 10**9 + 7
4    nums.sort()
5    n = len(nums)
6    total_width = 0
7    for i in range(n):
8        max_contrib = nums[i] * (1 << i) % MOD
9        min_contrib = nums[i] * (1 << (n - 1 - i)) % MOD
10        total_width = (total_width + max_contrib - min_contrib) % MOD
11    return total_width

Complexity note: The time complexity is O(n log n) due to the sorting step, and the space complexity is O(1) since we are using a constant amount of extra space.

  • 1Sorting the array allows us to efficiently calculate contributions as max and min.
  • 2Each element's contribution can be determined using combinatorial counting.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.