Maximum Sum Obtained of Any Permutation - Line Sweep w/ Prefix Sum [JS]
Solution: Line Sweep w/ Prefix Sum
- Count the number of requests for each index in nums using line sweep and prefix sum.
- Filter out the indexes with at least 1 request and sort them in desc order based on the number of requests.
- Sort
nums
in desc order. - Assign each number (from largest to smallest) to the sorted indexes.
n = length of nums
, m = number of requests
Time Complexity: O(n log(n) + m)
609ms
Space Complexity: O(n)
80.8MB
var maxSumRangeQuery = function(nums, requests) {
let n = nums.length, sum = Array(n).fill(0);
for (let [start, end] of requests) {
sum[start]++;
sum[end + 1]--;
}
for (let i = 1; i < n; i++) {
sum[i] += sum[i - 1];
}
let indexes = sum.filter((num) => num > 0).sort((a, b) => b - a);
nums.sort((a, b) => b - a);
let ans = 0, MOD = 10 ** 9 + 7;
for (let i = 0, j = 0; i < indexes.length; i++) {
ans = (ans + indexes[i] * nums[j]) % MOD;
j++;
}
return ans;
};
Comments
Post a Comment