本文共 1322 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要找到一个整数数组 nums 中元素之和小于等于给定查询数组 queries 中每个元素的最长子序列的长度。子序列是可以删除不连续元素,但顺序不变。
import java.util.Arrays;public class Solution { public int[] answerQueries(int[] nums, int[] queries) { Arrays.sort(nums); int n = nums.length; int[] prefix = new int[n + 1]; for (int i = 1; i <= n; i++) { prefix[i] = prefix[i - 1] + nums[i - 1]; } int m = queries.length; int[] result = new int[m]; for (int i = 0; i < m; i++) { int q = queries[i]; int low = 0, high = n; int k = 0; while (low <= high) { int mid = low + (high - low) / 2; if (prefix[mid] > q) { high = mid - 1; } else { k = mid; low = mid + 1; } } result[i] = k; } return result; }} Arrays.sort(nums) 对 nums 进行排序。prefix,其中 prefix[i] 表示前 i 个元素的和。这种方法的时间复杂度是 O(n log n + m log n),其中 n 是 nums 的长度,m 是 queries 的长度。这种复杂度在处理大规模数据时非常高效。
转载地址:http://eohfk.baihongyu.com/