跳到主要内容

1508.子数组和排序后的区间和

链接:1508.子数组和排序后的区间和
难度:Medium
标签:数组、双指针、二分查找、排序
简介:请你返回在新数组中下标为  left  到  right (下标从 1 开始)的所有数字和(包括左右端点)。由于答案可能很大,请你将它对 10^9 + 7 取模后返回。

题解 1 - typescript

  • 编辑时间:2021-05-13
  • 执行用时:436ms
  • 内存消耗:75.2MB
  • 编程语言:typescript
  • 解法介绍:排序。
function rangeSum(nums: number[], n: number, left: number, right: number): number {
const prefixSumList: number[] = [];
let sum = 0;
nums.forEach(v => prefixSumList.push((sum += v)));
const list: number[] = nums.slice();
for (let i = 0; i < n; i++) {
for (let j = 0; j < i; j++) {
list.push(prefixSumList[i] - (prefixSumList[j - 1] ?? 0));
}
}
return (
list
.sort((a, b) => a - b)
.slice(left - 1, right)
.reduce((total, cur) => total + cur, 0) %
(10 ** 9 + 7)
);
}