2389. Longest Subsequence With Limited Sum

26 年 2 月 25 日 星期三
273 字
2 分钟

2389. Longest Subsequence With Limited Sum

Screenshot 2026-02-25 at 10.52.42 pm

注意⚠️ :数字的子序列是可以排序的

给你一个数组,让你算这个数组里面最小的 3 个数的和。这个数组是 [1,2,3,4,5] 还是 [5,4,3,2,1] 还是别的顺序,影响答案吗?不影响,我们总是可以把数组排序然后取前 3 个数的和。

对nums进行排序,取得前缀和,这样就能在前缀和上使用二分查找:找到大于 queries[i] 的第一个数的下标,由于下标是从 0 开始的,这个数的下标正好就是前缀和小于等于 queries[i] 的最长前缀的长度。

ts
const binarySearch = (left: number, right: number, target: number, arr: Array<number>): number => {
  while (left < right) {
    const mid: number = Math.floor((left + right) / 2)
    if (arr[mid] < target) {
      left = mid + 1
    } else {
      right = mid
    }
  }
  return right
}

function answerQueries(nums: number[], queries: number[]): number[] {
  // 前缀和 + 二分
  nums.sort((a, b) => a - b)

  for (let i = 0; i < nums.length; i++) {
    if (i > 0) {
      nums[i] += nums[i - 1]
    }
  }

  queries.forEach((item, idx, arr) => {
    arr[idx] = binarySearch(0, nums.length, item + 1, nums)
  })
  return queries
}

文章标题:2389. Longest Subsequence With Limited Sum

文章作者:Sirui Chen

文章链接:https://blog.siruichen.me/posts/2389_longest_subsequence_with_limited_sum[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。