当前位置: 首页 > news >正文

提升网站响应时间广州网站优化价格

提升网站响应时间,广州网站优化价格,wordpress 增加js,怎样做百度推广网站给定两个以 非递减顺序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。 定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。 请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。 示例 1: 输入: nums1 [1,7,11], nums2 …

给定两个以 非递减顺序排列 的整数数组 nums1 和 nums2 , 以及一个整数 k 。

定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2 。

请找到和最小的 k 个数对 (u1,v1), (u2,v2) … (uk,vk) 。

示例 1:
输入: nums1 = [1,7,11], nums2 = [2,4,6], k = 3
输出: [1,2],[1,4],[1,6]
解释: 返回序列中的前 3 对数:
[1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],[11,4],[11,6]

示例 2:
输入: nums1 = [1,1,2], nums2 = [1,2,3], k = 2
输出: [1,1],[1,1]
解释: 返回序列中的前 2 对数:
[1,1],[1,1],[1,2],[2,1],[1,2],[2,2],[1,3],[1,3],[2,3]

在这里插入图片描述

二分

class Solution {
public:vector<vector<int>> kSmallestPairs(vector<int>& nums1, vector<int>& nums2, int k) {int m = nums1.size();int n = nums2.size();auto count = [&](int target){int start = 0;int end = n - 1;long long cnt = 0;while(start < m && end >= 0){if(nums1[start] + nums2[end] > target){end--;}else{cnt += end + 1;start++;}}return cnt;};int left = nums1[0] + nums2[0];int right = nums1[m-1] + nums2[n-1];while(left < right){int mid = (left + right) >> 1;if(count(mid) < k){left = mid + 1;}else{right = mid;}}vector<vector<int>> ans;int pos = n - 1;for(int i = 0; i < m; i++){while(pos >= 0 && nums1[i] + nums2[pos] >= left){pos--;}for(int j = 0; j <= pos && k > 0; k--, j++){ans.push_back({nums1[i], nums2[j]});}}pos = n - 1;for(int i = 0; i < m && k > 0; i++){int start1 = i;while(i < m - 1 && nums1[i] == nums1[i+1]){i++;}while(pos >= 0 && nums1[i] + nums2[pos] > left){pos--;}int start2 = pos;while(pos > 0 && nums2[pos] == nums2[pos-1]){pos--;}if(nums1[i] + nums2[pos] != left){continue;}int count = min((long)k, (long)(i - start1 + 1) * (start2 - pos + 1));for(int j = 0; j < count && k > 0; j++, k--){ans.push_back({nums1[i], nums2[pos]});}}return ans;}
};

使用二分法实际上就是另外一种使用试探的方式。nums1[0] + nums2[0]是两个数组元素和的最小值,组成二分下界,nums1[m-1] + nums2[n-1]组成二分上界。我们使用二分查找,查找出当和为多少的时候,刚好是第k对数字。

我们定义一个count函数,count函数的目的实际上就是计算出小于等于我们传入的mid的组合一共有多少个,以便与k进行比较,从而找出我们最终需要的和是多少。

最终二分查找结束,left便是和第k小的元素对的和。由于我们最终要返回的是前k小的所有的数组对。那么我们在代码中首先先要找出和比left小的数组对是什么。

vector<vector<int>> ans;int pos = n - 1;for(int i = 0; i < m; i++){while(pos >= 0 && nums1[i] + nums2[pos] >= left){pos--;}for(int j = 0; j <= pos && k > 0; k--, j++){ans.push_back({nums1[i], nums2[j]});}}

接下来我们要查找出和等于left的元素对

pos = n - 1;for(int i = 0; i < m && k > 0; i++){int start1 = i;while(i < m - 1 && nums1[i] == nums1[i+1]){i++;}while(pos >= 0 && nums1[i] + nums2[pos] > left){pos--;}int start2 = pos;while(pos > 0 && nums2[pos] == nums2[pos-1]){pos--;}if(nums1[i] + nums2[pos] != left){continue;}int count = min((long)k, (long)(i - start1 + 1) * (start2 - pos + 1));for(int j = 0; j < count && k > 0; j++, k--){ans.push_back({nums1[i], nums2[pos]});}}

最后返回ans即是答案

http://www.mmbaike.com/news/66034.html

相关文章:

  • 温州网站制作的公司北京seo顾问服务
  • 泉州市网站设计企业网络广告策划与制作
  • wordpress账号登录怎样优化网站关键词排名靠前
  • 做外贸网站空间多少g网络优化公司哪家好
  • 高密哪里有做网站的赣州网站seo
  • 做网站制作百度竞价广告推广
  • 类似于wordpress的网站百度网页版 入口
  • 佛山优秀网站建设百度查重免费
  • 淄博淘宝网站建设深圳最新疫情
  • iis建立网站竞价推广什么意思
  • 已购买域名 如何做网站优化服务内容
  • 中国风手机网站模板凡科建站代理登录
  • 德州加盟网站建设app开发公司
  • 企业网站必须做可信认证吗中国站长之家
  • 瑞丽航空公司官方网站最好的免费信息发布平台
  • 企业网站建设个人博客汽车推广软文
  • h5模板下载有哪些网站seo建站公司推荐
  • 商务咨询公司网站制作模板在线工具seo
  • 网站建设优化公司招聘西安百度代运营
  • 茂名优化网站建设宁波seo推广推荐
  • 杭州网站开发公司市场调研报告范文
  • 个人简历模板免费下载网站长春关键词优化排名
  • 学软件工程有前途吗网络推广和seo
  • 池州专业网站建设怎么样精准营销通俗来说是什么
  • 内蒙古建设工程社会保障费退费网站网站seo哪家做的好
  • 可靠的镇江网站建设三亚百度推广开户
  • 网站服务器有哪些青岛百度竞价
  • 网站字体标准网页怎么做
  • 苏州网站建设业务的公司中国联通和腾讯
  • 网站制作前期所需要准备seo站长