2026/6/10 11:06:17
网站建设
项目流程
哈尔滨城市建设局网站,dedecms网站布局的模版修改方法,国际市场那个app可以看,如何看出网站用的是什么cms程序题目链接#xff1a;2389. 和有限的最长子序列#xff08;简单#xff09; 算法原理#xff1a; 解法#xff1a;二分查找 8ms击败25.52% 时间复杂度O(Nlogn) ①由于 结果数组存的是子序列 的 最大 长度#xff0c;而不是子序列#xff0c;所以可以打乱顺序#xff0c;…题目链接2389. 和有限的最长子序列简单算法原理解法二分查找8ms击败25.52%时间复杂度O(Nlogn)①由于 结果数组存的是子序列的最大长度而不是子序列所以可以打乱顺序因此可以排序进而使用二分②由于结果数组是nums中 元素之和小于等于queries[i]的长度所以用到的模型是求最右端点模型③由于算的是累加和所以可以用前缀和的思想排序后求对应前缀和在找到最右端点后其下标就是咱们需要的下标④小细节最终left和right停留的位置是≤queries[i]的位置但如果这个位置queries[i]则说明left和right一直在第一个位置且第一个位置就queries[i]符合条件的个数是0Java代码class Solution { public int[] answerQueries(int[] nums, int[] queries) { int nnums.length,mqueries.length; int[] retnew int[m];int index0; //定义前缀和数组 int[] prenew int[n]; Arrays.sort(nums); pre[0]nums[0]; for(int i1;in;i) pre[i]pre[i-1]nums[i]; for(int x:queries){ int left0,rightn-1; //找最右端点 while(leftright){ int midleft(right-left1)/2; if(pre[mid]x) rightmid-1; else leftmid; } ret[index]pre[left]x?left1:0; } return ret; } }