求第k小数

news/2024/9/25 23:22:03/文章来源:https://www.cnblogs.com/ALaterStart/p/18432517

https://leetcode.cn/problems/median-of-two-sorted-arrays/submissions/

/* 我们可以将取中位数问题转化为求第k小数问题:[ref_user:windliang]
由于两个数组都有序,所以我们每次可以分别在两个数组中取k/2个数:[a1~ak], [b1~bk]
然后比较ak和bk的大小,如果ak<bk,那么[a1~ak]都可以排除掉了,他们绝不会是第k小数
反之如果bk<ak,那么[b1~bk]就可以都排除掉了;如果相等,那么去掉哪一个都一样
另外就是需要注意k/2可能大于数组长度,此时直接取整个数组就可以了
*/
class Solution {
private:int getKth(vector<int> &nums1, int l1, int r1, vector<int> &nums2, int l2, int r2, int k) {int len1 = r1 - l1 + 1;int len2 = r2 - l2 + 1;// 让len1<=len2,这样如果数组长度小于k/2,一定是nums1if(len1 > len2) return getKth(nums2, l2, r2, nums1, l1, r1, k);// 递归结束的条件,要么是找到了第k小数,此时k递归为1// 要么是nums1数组长度为0,此时虽然没有找到第k小数,但是也无法继续往下递归了,也没必要继续往下递归了if(len1 == 0)   return nums2[l2 + k - 1];if(k == 1)  return min(nums1[l1], nums2[l2]);// 排除元素int i = l1 + min(len1, k / 2) - 1; // nums1[l1~i]int j = l2 + min(len2, k / 2) - 1; // nums2[l2~j]if(nums1[i] > nums2[j]) {return getKth(nums1, l1, r1, nums2, j + 1, r2, k - (j - l2 + 1));}return getKth(nums1, i + 1, r1, nums2, l2, r2, k - (i - l1 + 1));}
public:double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {int n = nums1.size(), m = nums2.size();// 注意我们规定的是下标0是第1小数if((n + m) & 1) {return getKth(nums1, 0, n - 1, nums2, 0, m - 1, (n + m) / 2 + 1);}return (getKth(nums1, 0, n - 1, nums2, 0, m - 1, (n + m) / 2) + getKth(nums1, 0, n - 1, nums2, 0, m - 1, (n + m) / 2 + 1)) * 0.5;}
};

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

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

相关文章

【算法】笔试题记录

哇今天做了道特别有意思的题。 编程就给了两道,第一题特别简单,a、b两个数,每次选其中一个数*2,这样操作两次,问最后得到的两数之和的期望值是多少。 简单吧?因为每次选择都有两种可能性,操作两次后就会有四种可能的结果(22)。其中有两个结果是重复的(2a, 2b),剩下两个…

使用AI进行需求分析的案例研究

生成式 AI 的潜在应用场景似乎无穷无尽。虽然这令人兴奋,但也可能让人不知所措。因此,团队在使用这项技术时需要有明确的目标:关键是要明确生成式 AI 在团队工作中能产生哪些实质性影响。 在软件工程中,一个引人注目的应用场景是需求分析。这是一个常常被忽视但充满挑战的环…

02 第三组(4个)进制转换

进制转换:二进制,十六进制、八进制、十进制 bin 二进制 oct 8进制 hex 十六进制 int 10进制二进制 和十进制#10进制转二进制 v1 = bin(48) print(v1)#二进制转10进制 v1 = 0b1010101 v2 = int(v1, base=2)八进制 和十进制#10进制转八进制 v1 = oct(48) print(v1)#八进制转1…

实验1_C语言输入输出和简单程序应用编程

任务一 1-1#include<stdio.h> int main() { printf(" O "); printf("<H>"); printf("I I"); printf(" O "); printf("<H>"); printf("I I"); return 0; }1-2#include<stdio.h> int main(…

2023-9-25

vscode快捷键实操练习

操作流程违规作业监测系统

操作流程违规作业监测系统基于计算机视觉深度学习技术,操作流程违规作业监测系统对石油煤矿化工等高危场景下作业人员未按照操作流程进行正常操作行为进行实时分析识别检测,如操作流程违规作业监测系统发现现场人员违规作业操作行为,不需人为干预,立即自动抓拍存档预警并同…

01 本地代码推送到码云

访问网站根据提示进行注册即可 https://gitee.com/新建仓库 注册后,进行登录,在右上角查看创建的代码仓库如果要分享别人,进行上传代码,将:https://gitee.com/jhchena/test.git 分享给别人即可 欢乐马 / test 中的test 表示在码云上面,创建存放代码的文件夹本地进行配置码云 先…

macOS 中如何调整 OBS 录制视频的窗口大小 All In One

macOS 中如何调整 OBS 录制视频的窗口大小 All In One 在 OBS 的预览界面中,按住 Option / Alt 键, 拖动红色的四个方向控制块, 动态调整所需录制的窗口大小!✅ PS: 使用 m3u8 文件的 ts 格式视频无法下载的一种视频下载的替代方案!(需后期视频剪辑)macOS 中如何调整 OBS…

9-12

9段好的,我会逐句翻译并解释其中的关键词汇及其发音。 1. **There are, of course, people belonging to all classes who do not want to be fascinated and then enslaved by Admass, and who if necessary are ready to make a few sacrifices, largely material, to achie…

“人民冻凉”简介

账号定位: 这是一个由 复旦大学 的学生运营的 非官方自媒体账号 。 它最大的标签就是 复旦。 其次是复旦附带的的 \(985\)、江浙沪、上海交大、清北华五 这类的 \(\text{tag}\) 。 可以简单理解为,这是一个上海版的 全元光滑 。但实际上,考虑到两者的差异,在很多地方与全元…

02 深浅拷贝关于 str int bool

深浅拷贝 list /set /dict 一层

河道污染物识别系统

河道污染物识别系统通过深度学习技术,河道污染物识别系统对监控画面中河道污染物以及漂浮物进行全天候实时监测,当河道污染物识别系统监测到河道水面出现污染物时,立即抓拍存档触发告警并同步通知相关人员及时处理。河道污染物识别系统利用河道两旁现场摄像头可及时发现河道…