Longest Subsequence With Limited Sum
EasyArrayBinary SearchGreedySortingPrefix Sum
Solution
import { range } from '@algorithm/lib';
export function answerQueries(nums: number[], queries: number[]): number[] {
nums.sort((a, b) => a - b);
const n = nums.length;
const prefixSum = Array.from(nums);
for (const i of range(1, n)) {
prefixSum[i] += prefixSum[i - 1];
}
const binarySearch = (query: number) => {
let [start, end] = [0, n];
while (start < end) {
const mid = Math.floor((start + end) / 2);
if (prefixSum[mid] <= query) {
start = mid + 1;
} else {
end = mid;
}
}
return start;
};
return queries.map(binarySearch);
}