给你一个长度为 n 的整数数组 nums ,和一个长度为 m 的整数数组 queries 。
返回一个长度为 m 的数组 answer ,其中 answer[i] 是 nums 中 元素之和小于等于 queries[i] 的 子序列 的 最大 长度 。
子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。
示例 1:
输入:nums = [4,5,2,1], queries = [3,10,21]
输出:[2,3,4]
解释:queries 对应的 answer 如下:
输入:nums = [2,3,4,5], queries = [1]
输出:[0]
解释:空子序列是唯一一个满足元素和小于或等于 1 的子序列,所以 answer[0] = 0 。
提示:
n == nums.length
m == queries.length
1 <= n, m <= 1000
1 <= nums[i], queries[i] <= 106
public int[] answerQueries(int[] nums, int[] queries) {Arrays.sort(nums);for (int i = 1; i < nums.length; i++) {nums[i]+=nums[i-1];}for (int i = 0; i < queries.length; i++) {int left=0,right=nums.length-1;int mid=(left+right)/2;while (leftif (queries[i]==nums[mid]){break;}if (queries[i]>nums[mid]){left=mid;}else {right=mid-1;}mid=(left+right+1)/2;}queries[i]=queries[i]>=nums[mid]?mid+1:mid;}return queries;}
func answerQueries(nums []int, queries []int) []int {sort.Ints(nums)for i := 1; i < len(nums); i++ {nums[i]+=nums[i-1]}for i := 0; i < len(queries); i++ {left,right:=0, len(nums)-1mid:=(left+right)/2for leftif queries[i]==nums[mid]{break}if queries[i]>nums[mid]{left=mid}else {right=mid-1}mid=(left+right+1)/2}if queries[i]>=nums[mid]{queries[i]=mid+1}else {queries[i]=mid}}return queries
}