面试题:找两个有序数组所有数第K小的数

给定两个有序数组arr1和arr2,再给定一个整数k,返回两个数组中所有数中第k小的数。要求:如果arr1的长度为N,arr2的长度为M,时间复杂度请达到O(log(min{M, N}) )

例如:
arr1 = {1,2,3,4,5}
arr2 = {3,4,5}
k = 1;
因为1为所有数中最小的,所以返回1
arr1 = {1,2,3}
arr2 = {3,4,5,6}
k = 4
因为3为所有数中第4小的数,所以返回3
#include <iostream>
#include <assert.h> 
#include <vector>
using namespace std;int FindKthNum(int* arr1, int len1, int* arr2, int len2, int k)
{assert(k >= 0 && len1 + len2 >= k);if(len1 > len2){return FindKthNum(arr2, len2, arr1, len1, k);}if(len1 == 0)return arr2[k-1];if(k == 1)return min(arr1[0], arr2[0]);                          int range1 = min(k/2, len1), range2 = k - range1;// arr1[0,range1) + arr2[0,range2) 是两个数组的前k个数// 1.arr1[range1-1] == arr2[range2-1],则这个两个数其中一个就是第k个// 2.arr1[range1-1] < arr2[range2-1],则排除arr1[0,range1)这一部分// 3.arr1[range1-1] > arr2[range2-1],则排除arr2[0,range2)这一部分if(arr1[range1-1] == arr2[range2-1])return min(arr1[range1-1], arr2[range2-1]);else if(arr1[range1-1] < arr2[range2-1])//去掉range1个return FindKthNum(arr1+range1, len1-range1, arr2, len2, k-range1);elsereturn FindKthNum(arr1, len1, arr2+range2, len2-range2, k-range2);}void test()
{int a1[5] = {1,2,3,4,5};int a2[3] = {3,4,5};cout<<FindKthNum(a1, 5, a2, 3, 1)<<endl;int a11[3] = {1,2,3};int a22[4] = {3,4,5,6};vector<int> arr11(a11, a11+3);vector<int> arr22(a22, a22+4);cout<<FindKthNum(a11, 3, a22, 4, 4)<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ros 开源物体检测_ROS kinetic + Realsens D435i + ORK + LINEMOD 物体识别

1. ORKORK (Object Recognition Kitchen) 是 ROS 集成的物体识别库&#xff0c;当前 Kinetic 版本的 ROS 只集成了部分功能包的二进制安装文件&#xff0c;所以需通过源码编译安装。安装依赖库sudo apt-get installmeshlabsudo apt-get install libosmesa6-devsudo apt-get ins…

雪碧图sprity 合并多图使用心得

介绍 sprity 是一个模块化的雪碧图生成工具会根据目录中的图片生成相应的雪碧图和样式文件&#xff0c;支持retina图&#xff0c;可以内嵌base64 编码格式的图&#xff0c;支持不同的图片格式和有不同的图片引擎可以选择。sprity 的前身是css-sprite,sprity的 git地址 sprity的…

团队项目第二次冲刺(4)

已经做到两个界面的链接。 今天对用到的数据进行定义及对程序进行完善。 遇到的问题&#xff1a;在进行页面之间的连接时用到的intent语句运用不好。出现了很多次的bug。转载于:https://www.cnblogs.com/cuipengbo/p/4586519.html

itil v4和v3的区别_ITIL从v3到v4 - 这是新的ITIL

ITIL 4即将发布(原计划2019年1月到3月)&#xff0c;v4的领域要大得多&#xff0c;重点放在业务和技术领域&#xff0c;比如我们要如何运作&#xff0c;以及如何通过敏捷&#xff0c;DevOps和数字化转型在未来发挥作用?十年前&#xff0c;比特币推出&#xff0c;詹姆斯卡梅隆发…

面试题:根据Unix时间戳计算时间

根据Unix时间戳计算时间&#xff0c;不分年月大小&#xff0c;每月三十天&#xff0c;每年按360天计算。开始时间1970/01/01 00:00:00,输入秒数&#xff0c;显示时间 思路一&#xff1a;进位&#xff0c;60秒进1分钟&#xff0c;60分进1小时&#xff0c;24小时进1天&#xff0…

华为荣耀6 H60-L02/L12(联通版)救砖包【适用于无限重启】

本帖最后由 HOT米粒 于 2014-11-16 20:43 编辑 华为荣耀6 H60-L02/L12&#xff08;联通版&#xff09;救砖包【适用于无限重启】说明&#xff1a; 1、本工具包用于华为荣耀6 H60-L02&#xff08;联通版&#xff09;&#xff1b; 2、本工具适用于在Honor Logo 无限重启的童鞋恢复…

linux常用命令技巧--更新中

cp –a ojects objects.ori 复制备份目录cp –r 123 123 如果含有子目录一并复制 cp –p 保留文件属性转载于:https://blog.51cto.com/beautifual/1733232

找出无序数组最小的K个数(基于快排,效率高)

快排&#xff1a; void QuickSort(int array[], int low, int high) { if (low > high) //为了防止无限递归下去&#xff0c;导致栈溢出&#xff0c;设置此条件 { return; } int pivotkey array[low]; //设置一个对照元素&#xff0c;把这个元素先暂时拿出来&…

php mysql 存储过程_php调用MySQL存储过程方法

php与mysql是天生的一对,下面我来介绍在php中怎么调用mysql存储过程并执行返回结果,下面我总结了一些常用的php调用MySQL存储过程的方法,有需要了解的同学可参考.MySQL从5.0开始才引入存储过程,反正以前做应用的时候从没碰过,不过现在因为主要作内部系统&#xff0c;所以很多应…

Mysql存储引擎中InnoDB与Myisam的区别

为什么80%的码农都做不了架构师&#xff1f;>>> 1. 事务处理 innodb 支持事务功能&#xff0c;myisam 不支持。 Myisam 的执行速度更快&#xff0c;性能更好。 2. select ,update ,insert ,delete 操作 MyISAM&#xff1a;如果执行大量的SELECT&#xff0c;MyISA…

Android AsyncTask 详解

在Android中实现异步任务机制有两种方式&#xff0c;Handler和AsyncTask。 Handler模式需要为每一个任务创建一个新的线程&#xff0c;任务完成后通过Handler实例向UI线程发送消息&#xff0c;完成界面的更新&#xff0c;这种方式对于整个过程的控制比较精细&#xff0c;但也是…

mysql的rows大小超过8126_mysql大字段(Row size too large8126)

使用mysql并写入数据时发生错误&#xff1a;Row size too large (> 8126).Changing some columns to TEXT or BLOB or using ROW_FORMATDYNAMIC or ROW_FORMATCOMPRESSED may help. In current row format,BLOB prefix of 768 bytes is stored inline.因为表中有多个text字段…

一步步学习javascript基础篇(8):细说事件

终于学到事件了&#xff0c;不知道为何听到“事件”就有一种莫名的兴奋。可能是之前的那些知识点过于枯燥无味吧&#xff0c;说起事件感觉顿时高大上了。今天我们就来好好分析下这个高大上的东西。 可以说&#xff0c;如果没有事件我们的页面就只能阅读了。有了事件&#xff0c…

剑指offer:二叉树中和为某一值的路径

题目描述&#xff1a;输入一颗二叉树和一个整数&#xff0c;打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 分析&#xff1a;路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。…

android mysql 数据库文件_android mysql数据库文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

js常用DOM操作

在博客园看到了苏夏写的常用DOM整理文章&#xff0c;地址&#xff1a;http://www.cnblogs.com/cabbagen/p/4579412.html&#xff0c;然后抽时间都试了一下这些常用的DOM操作。在这里记录一下。 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 &…

android传递数据bundle封装传递map对象

android开发默认情况下&#xff0c;通过Bundle bundlenew Bundle();传递值是不能直接传递map对象的&#xff0c;解决办法&#xff1a; 第一步&#xff1a;封装自己的map,实现序列化即可 ?12345678910111213141516/*** 序列化map供Bundle传递map使用* Created on 13-12-9.*/pu…

求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))

题目描述&#xff1a; 给定一个数字n&#xff0c;统计1&#xff5e;n之间的n个数字的二进制的1的个数 int Nums_Of_Bit_1(int num) { int* number new int[num]; int pow 1,before 1; int count 0; for(int i1; i<num; i){ if (i pow){ …

mysql支持cube_mysql聚合函数rollup和cube

一、with rollup&#xff1a;with rollup通常和group by语句一起使用&#xff0c;是根据维度在分组的结果集中进行聚合操作。——对group by的分组进行汇总。假设用户需要对N个纬度进行聚合查询操作&#xff0c;普通的groupby语句需要N个查询和N次group by操作。而rollup的有点…

域名详解

定义 是由一串用 “.” 分割的字符组成的Internet上某一台计算机或计算机组的名称&#xff0c;域名的本质是IP地址的一个映射&#xff0c;域名的目的是便于记忆和沟通的一组服务器的地址。 域名解析 域名解析的过程实际上是将域名还原为IP地址的过程 &#xff08;1&#xf…