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

如何做明星的个人网站wordpress文章编辑插件

如何做明星的个人网站,wordpress文章编辑插件,0基础如何做网站,北京seo营销公司给定两个以 非递减顺序排列 的整数数组 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.yayakq.cn/news/244877/

相关文章:

  • 网站建设模式什么网站做弹窗广告好
  • 上海备案证查询网站查询网站模拟登录wordpress
  • 淘宝客网站做百度竞价抖音seo优化系统招商
  • 手机网站 建设烟台城乡建设学校96级给排水网站
  • 本地网站做淘宝客佛山网站建设公司-印象互动
  • 建设旅游网站的市场分析怎么自己做网站卖东西
  • 二维码导航网站源码四大免费网站
  • 固始做网站成都营销型网站公司电话
  • 孝感网站建设公司wordpress显示多少页
  • 网站维护费大概多少广西网站建设原创
  • 企业公司网站校区网站建设
  • 网站备案号如何查询密码百度推荐现在为什么不能用了
  • 小型网站建设费用手机微信一体网站建设
  • 网站制作软件图标天琥设计培训学校官网
  • 我做的网站服务器别人没法左键点击下载呢网站制作方案和主要内容
  • 网站开发还是做数据库开发常用免费ppt模板
  • 上海市建设安全协会网站打不开白云区建网站
  • 网站宣传文案泰州网站建设外包
  • 站长源码网页链接下载
  • 为什么要建设医院网站兼职网网站建设方案
  • 专业微网站开发网站怎么做网页
  • 个人网站设计总结信息发布网站推广技巧
  • 人力资源三网站建设跨境电商一件代发货源平台
  • 网站备案号如何获得南通宏仁建设工程有限公司招聘网站
  • 做效果图比较好的模型网站建设电影网站代码
  • 郑州高新区建设环保局网站关键词seo排名怎么样
  • 自己做视频网站会不会追究版权wordpress 设置语言
  • 优化网站排名方法建设公司网站需要钱吗
  • 域名还在备案可以做网站吗网页制作公司广州
  • 本地做的网站怎么放到网上去英语培训