如何在华为OD机试中获得满分?Java实现【寻找两个正序数组的中位数】一文详解!

news2025/5/21 17:36:33

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
    • 2. 输入描述
    • 3. 输出描述
    • 4. Java算法源码
    • 5. 测试
    • 6.解题思路

1. 题目描述

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为O(log (m+n))

2. 输入描述

nums1 = [1,3], nums2 = [2]

3. 输出描述

2.00000

4. Java算法源码

public double findMedianSortedArrays(int[] nums1, int[] nums2) {
    int m = nums1.length;
    int n = nums2.length;
    
    // 确保 nums1 的长度小于等于 nums2 的长度
    if (m > n) {
        int[] temp = nums1;
        nums1 = nums2;
        nums2 = temp;
        
        int tempLen = m;
        m = n;
        n = tempLen;
    }
    
    int iMin = 0, iMax = m, halfLen = (m + n + 1) / 2;
    while (iMin <= iMax) {
        int i = (iMin + iMax) / 2;
        int j = halfLen - i;
        
        if (i < iMax && nums2[j - 1] > nums1[i]) {
            iMin = i + 1; // i 太小,增大它
        } else if (i > iMin && nums1[i - 1] > nums2[j]) {
            iMax = i - 1; // i 太大,减小它
        } else { // i 是完美的
            int maxLeft;
            if (i == 0) {
                maxLeft = nums2[j - 1];
            } else if (j == 0) {
                maxLeft = nums1[i - 1];
            } else {
                maxLeft = Math.max(nums1[i - 1], nums2[j - 1]);
            }
            
            if ((m + n) % 2 == 1) {
                return maxLeft;
            }
            
            int minRight;
            if (i == m) {
                minRight = nums2[j];
            } else if (j == n) {
                minRight = nums1[i];
            } else {
                minRight = Math.min(nums1[i], nums2[j]);
            }
            
            return (maxLeft + minRight) / 2.0;
        }
    }
    
    return 0.0;
}

5. 测试

在这里插入图片描述

6.解题思路

在这里插入图片描述

  1. 需要确保 nums1 的长度小于等于 nums2 的长度,这样可以保证在进行二分查找时,时间复杂度最低。

  2. 定义两个指针 iMiniMax,分别表示在 nums1 中进行二分查找的最小索引和最大索引。初始时,将 iMin 设置为 0,将 iMax 设置为 nums1 的长度。

  3. 需要计算切分点 ij。切分点 i 表示在 nums1 中的分割点,切分点 j 表示在 nums2 中的分割点。根据 ij 的值,我们可以将两个数组分为左右两部分。

  4. 在二分查找的过程中,需要不断调整 i 的值,使得 nums1[i-1] 小于等于 nums2[j],并且 nums2[j-1] 小于等于 nums1[i]。这样,可以确保左半部分的所有元素都小于等于右半部分的所有元素。

  5. 需要根据数组的长度奇偶性来计算中位数。如果 (m + n) 是奇数,中位数就是左半部分的最大值;如果 (m + n) 是偶数,中位数就是左半部分的最大值和右半部分的最小值的平均值。

在这里插入图片描述

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

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

相关文章

3.数据结构期末复习之栈和队列

1.栈的应用 1.括号匹配问题(还有确定他们的符号优先级) 如 2((32) * 3) /3 扫描到左括号入栈,右括号入另外一个栈,如果两个栈数量相同,则是匹配的,不保存,不然去找最少的栈,出来提示报错2.十进制转2进制 如 23转二进制10111&#xff0c;需要栈辅助 每次除2的余数倒过来写3.mai…

Vue3(一):创建vue3工程、setup、vue3响应式原理、computed和watch

Vue3&#xff1a;第一章 一、创建Vue3.0工程1.使用vue-cli创建2.使用vite创建 二、Vue3中的响应式1.拉开序幕的setup2.ref函数3.reactive函数4.vue3中响应式的原理&#xff08;1&#xff09;vue2中响应式原理&#xff08;2&#xff09;Vue3中的Proxy 5.reactive和ref的对比6.se…

性能测试如何做?超详细性能测试-测试策略总结,新人进阶之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试出现的初…

YOLOv5【训练train.py逐行源码及参数调参解析】超详细解读!!!建议收藏✨✨!

之前的文章介绍了YOLOv5的网络结构&#x1f680;与目录结构源码&#x1f680;以及detect.py&#x1f680;的详细解读&#xff0c;今天带来的是YOLOv5的 train.py 代码参数逐行解读以及注释&#xff0c;废话不多说&#xff0c;让我们一起学习YOLOv5的 train.py 源码吧&#xff0…

功能测试和自动化测试的差距在哪里?

一直以来&#xff0c;软件的测试主要是以手工测试为主&#xff0c;但是随着现代软件的复杂程度的加深&#xff0c;人们对使用手工方式来完成软件测试感到的越来越力不从心&#xff0c;同时因为在软件测试中存在着大量的重复性工作&#xff0c;而这种工作是比较适合机器而不是人…

rsync

配置rsync源服务器&#xff1a; #建立/etc/rsyncd.conf 配置文件 vim /etc/rsyncd.conf #添加以下配置项 uid root gid root use chroot yes #禁锢在源目录 address 192.168.80.10 …

​Kali-linux无线网络嗅探工具Kismet​

如果要进行无线网络渗透测试&#xff0c;则必须先扫描所有有效的无线接入点。刚好在Kali Linux中&#xff0c;提供了一款嗅探无线网络工具Kismet。使用该工具可以测量周围的无线信号&#xff0c;并查看所有可用的无线接入点。本节将介绍使用Kismet工具嗅探无线网络。 &#xf…

MySQL_6 自连接和外连接

目录 一、自连接 1.概述 : 2.语法 : 3.演示 : 二、外连接 1.为什么需要外连接&#xff1f; 2.外连接的定义 : 3.外连接的演示 : 1 左外连接 2 右外连接 3 对部门表问题的解决 一、自连接 1.概述 : 自连接是指在同一张表上的连接查询&#xff08;将同一张看做两张表)&a…

R语言实践——rWCVP:按照物种的原生分布区清洗坐标点

rWCVP&#xff1a;按照物种的原生分布区清洗坐标点 加载库工作流&#xff08;单个物种&#xff09;1. 下载发现记录数据&#xff08;rgbif&#xff09;2. 发现记录的预备3. 获取原生区范围4. 清除非原生分布记录 加载库 library(rWCVP) library(rgbif) library(tidyverse) lib…

产品Backlog和需求管理

产品Backlog 产品backlog是一个按照价值排序的需求清单。为了达成产品目标&#xff0c;所有的需求都需要放到产品backlog中进行管理和规划。由产品负责人负责管理和维护。Leangoo为每一个里程碑建立了一个产品Backlog看板, 通过这个产品backlog看板来进行需求管理和规划。 里…

搭建服务器的主流中间件有哪些?如何在外网访问内网的服务?

计算机业内人士对于搭建服务器的中间件并不陌生&#xff0c;apache、tomcat、IIS、nginx 都是比较常用的搭建服务器的中间件&#xff0c;它们之间还是有一些区别差异的。今天就说说这些中间件之间有哪些区别&#xff0c;以及如何利用快解析实现内网主机应用让外网访问。 首先说…

大数据入门(六)- UCloud创建云服务器

一.注册UCloud账户 使用UCloud的服务&#xff0c;首先需要注册账户 账户注册非常简单&#xff0c;在UCloud网站首页&#xff08;https://www.ucloud.cn/&#xff09;右上角点击快速注册 二.创建VPC 1.注册成功后&#xff0c;选择全部产品 2.选择私有网络UVPC 3.区域选择华北…

uni-app开发小程序使用uni.chooseMedia选择图片,安卓手机无法选择图片

uni-app开发小程序时&#xff0c;使用uni.chooseMedia选择图片&#xff0c;苹果手机是正常的&#xff0c;安卓手机无法打开手机选择图片 问题复现解决方法&#xff01;&#xff01;我的反思与总结 问题复现 一、在小程序中&#xff0c;选择图片并上传&#xff0c;是一个很常见…

[Python报错] ImportError: cannot import name ‘timer’ from ‘timer’

[Python报错] ImportError: cannot import name ‘timer’ from ‘timer’ 前言 我最近遇到这个报错&#xff0c;卡了我好长时间去解决&#xff0c;我在互联网上找了很多资料&#xff0c;遗憾的是&#xff0c;我没找到有其他人遇到的类似的问题。所以在这里做一下记录。事实上…

两年外包,从4K涨到了15K....

我18年毕业于一个普通二本学校&#xff0c;电子信息工程学院&#xff0c;是一个很不出名的小本科。大学期间专业知识也没有去认真的学习&#xff0c;所以毕业的时候就随便找了一份工作&#xff0c;在一个外包公司做功能测试。 记得那时候薪资大概是4k左右&#xff0c;因为是以…

神经网络实验---人工神经网络(2)

本实验目的主要是掌握梯度下降法的优化算法&#xff1b;能够使用tf.keras构建Sequential模型&#xff0c;完成多分类任务。 1. 实验目的 ①掌握梯度下降法的优化算法&#xff1b; ②能够使用tf.keras构建Sequential模型&#xff0c;完成多分类任务。 2. 实验内容 ①下载MNIS…

架构设计之复用性概谈

作为开发人员&#xff0c;你对复用这个概念一定不陌生。在开发过程中&#xff0c;我们把系统中通用的代码逻辑抽取出来&#xff0c;变成公共方法或公共类&#xff0c;然后在多个地方调用&#xff0c;这就是最简单的技术上的复用。 但一开始&#xff0c;我们不会过多地考虑复用&…

迭代后首波实测!360智脑一键联网,代码超强,AI诈骗一眼看穿

360大模型&#xff08;又&#xff09;交卷了&#xff01;作为国内首个能联网的大模型&#xff0c;360智脑给了我们怎样的惊喜&#xff1f;话不多说&#xff0c;新鲜出炉的第一手实测来了。 不得不说&#xff0c;自从GPT大模型混战开赛之后&#xff0c;教主周鸿祎可谓是存在感十…

易观分析:消费金融机构以APP为触点,创新消费场景,激发消费活力

易观&#xff1a;随着“用好消费金融、释放消费潜力”等金融支持扩内需的持续深入&#xff0c;消费金融APP活跃用户规模将保持稳健增长的态势&#xff0c;进而在拉动内需、促进消费升级、服务实体经济中扮演更重要的角色。 一、疫情防控较快平稳转段&#xff0c;激发消费市场活…

总结button,input type=“button“,input type=“text“中:[在value添加值] 和 [标签内添加值]的区别

1.如果是需要一个 普通文本框 <input></input>和<input type"text"></input>外观相同 都是 2.对比button,input type"button",input type"text"中&#xff1a;在value添加值 和 标签内 添加值 html中&#xff1a; &l…