【CT】LeetCode手撕—4. 寻找两个正序数组的中位数

news2024/11/19 10:37:09

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐4. 寻找两个正序数组的中位数——题解思路
  • 3- ACM 实现


题目

  • 原题连接:4. 寻找两个正序数组的中位数

1- 思路

思路

  • 将寻找中位数 ——> 寻找两个合并数组的第 K 大 (K代表中位数)

实现

  • ① 遍历两个数组 :通过比较两个数组的第 [k/2] 个元素 ,如果 numsA[k/2] < numsB[k/2] 的时候,删除 numsA 的前半部分元素。
  • ② 找剩余的 k/2 个元素

2- 实现

⭐4. 寻找两个正序数组的中位数——题解思路

在这里插入图片描述

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        // 定义 
        int n = nums1.length;
        int m = nums2.length;

        // 用来将 奇数长度 和 偶数长度合并
        int left = (n+m+1)/2;
        int right = (n+m+2)/2;
        return (getKth(nums1,0,n-1,nums2,0,m-1,left)+getKth(nums1,0,n-1,nums2,0,m-1,right))*0.5;
    }

    public int getKth(int[] nums1,int start1,int end1,int[] nums2,int start2,int end2,int k){
        int len1 = end1-start1+1;
        int len2 = end2-start2+1;
        // 始终让 len1 < len2
        if(len1>len2) return getKth(nums2,start2,end2,nums1,start1,end1,k);

        // 1. 递归终止条件
        if(len1 == 0 ) return nums2[start2+k-1];
        if(k==1) return Math.min(nums1[start1],nums2[start2]);

        // 2. 递归逻辑
        // 2.1 更新start用于递归:保证尽可能不越界 
        int i = start1 + Math.min(len1,k/2) -1;
        int j = start2 + Math.min(len2,k/2) -1;

        // 2.2 删除逻辑
        if(nums1[i] > nums2[j]){
            return getKth(nums1,start1,end1,nums2,j+1,end2,k-(j - start2 + 1));
        }else{
            return getKth(nums1,i+1,end1,nums2,start2,end2,k-(i-start1+1));
        }
    }
}

3- ACM 实现


public class midNum {
    public static double twoNumMid(int[] nums1,int[] nums2){
        int len1 = nums1.length;
        int len2 = nums2.length;

        int left = (len1+len2+1)/2;
        int right = (len1+len2+2)/2;

        return (getKth(nums1,0,len1-1,nums2,0,len2-1,left)+getKth(nums1,0,len1-1,nums2,0,len2-1,right))*0.5;
    }

    // 递归
    public static int getKth(int[] nums1,int start1,int end1,int[] nums2,int start2,int end2,int k){
        // 找len
        int len1 = end1-start1+1;
        int len2 = end2-start2+1;

        if(len1>len2) return getKth(nums2,start2,end2,nums1,start1,end1,k);

        // 2. 终止条件
        if(len1 == 0) return nums2[start2+k-1];
        if(k == 1) return Math.min(nums1[start1],nums2[start2]);

        // 3.单层递归
        int i = start1 + Math.min(k/2,len1)-1;
        int j = start2 + Math.min(k/2,len2)-1;

        // 删 nums2
        if(nums1[i]>nums2[j]){
            return getKth(nums1,start1,end1,nums2,j+1,end2,k-(j-start2+1));
        }else{
            return getKth(nums1,i+1,end1,nums2,start2,end2,k-(i-start1+1));
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入数组1的长度");
        int n = sc.nextInt();
        int[] nums1 = new int[n];
        System.out.println("输入数组1元素");
        for(int i = 0 ; i < n ; i ++){
            nums1[i] = sc.nextInt();
        }

        System.out.println("输入数组2的长度");
        int m = sc.nextInt();
        int[] nums2 = new int[m];
        System.out.println("输入数组2元素");
        for(int j = 0 ; j < m;j++){
            nums2[j] = sc.nextInt();
        }

        double res = twoNumMid(nums1,nums2);
        System.out.println("中位数是"+res);

    }
}

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

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

相关文章

天润融通分析AI技术助力客户服务,实现满意度三倍增长

如今&#xff0c;客户体验越来越成为影响客户决策的核心要素。 对于企业来讲&#xff0c;客户在不同触点的每一次互动体验&#xff0c;都成为塑造品牌声誉的“Aha时刻”。但同时&#xff0c;随着社会的发展的加速&#xff0c;客户的需求也在日新月异&#xff0c;给企业带来挑战…

【Linux】静态库的制作和使用详解

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

超融合服务器挂载硬盘--linux系统

项目中需要增加服务器的硬盘容量&#xff0c;通过超融合挂载了硬盘后&#xff0c;还需要添加到指定的路径下&#xff0c;这里记录一下操作步骤。 一&#xff1a;通过管理界面挂载硬盘 这一步都是界面操作&#xff0c;登录超融合控制云台后&#xff0c;找到对应的服务器&#…

python自动化办公之BeautifulSoup爬取并解析html文本

用到的库&#xff1a;BeautifulSoup 实现效果&#xff1a;爬取网站内容&#xff0c;拿到html文本并解析html文本 代码&#xff1a; 先爬取 # 先导入requests包 import requests urlhttps://www.baidu.com responserequests.get(url) # 做1个断言&#xff0c;如果执行成功&a…

视频号矩阵源码:构建短视频生态的基石

在数字化时代&#xff0c;视频内容已成为连接品牌与消费者的重要桥梁。视频号矩阵源码&#xff0c;作为短视频营销自动化的创新引擎&#xff0c;正在帮助内容创作者和营销团队以前所未有的效率和智能&#xff0c;管理和扩展他们的视频内容。本文将深入探讨视频号矩阵源码的核心…

解答 | http和https的区别,谁更好用

TTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;安全超文本传输协议&#xff09;的主要区别在于安全性和数据传输的方式。 一、区别 1、协议安全性&#xff1a; HTTP&#xff1a;使用明文形式传输数据&#xff0c;不提供数据加密功能&#xff0c;数据在传输过…

LeetCode-刷题记录-滑动窗口合集(本篇blog会持续更新哦~)

一、滑动窗口概述 滑动窗口&#xff08;Sliding Window&#xff09;是一种用于解决数组&#xff08;或字符串&#xff09;中子数组&#xff08;或子串&#xff09;问题的有效算法。 Sliding Window核心思想&#xff1a; 滑动窗口技术的基本思想是维护一个窗口&#xff08;一般…

汇川H5U小型PLC不用写程序测试EC总线电机

目录 新建工程添加EtherCAT组态添加运动控制轴仿真测试 新建工程 新建一个H5U工程&#xff0c;不使用临时工程 系列选择H5U即可 添加EtherCAT组态 这里在EC总线中添加了一个汇川660的伺服 驱动参数使用默认 添加运动控制轴 新建一个轴Axis_0 将新建的轴和EC组态的660驱动…

springboot中国女篮资讯平台-计算机毕业设计源码12641

目录 1 绪论 1.1 研究背景 1.2 研究现状 1.3论文结构与章节安排 2平台分析 2.1 系统可行性分析 2.1.1硬件可行性分析 2.1.2软件可行性分析 2.1.3经济可行性 2.1.4 操作可行性 2.2系统功能分析 2.3 系统用例分析 2.4本章小结 3平台总体设计 3.1 系统架构设计 3.2…

录屏怎么有声音?录屏声音,2个小技巧

在数字化浪潮中&#xff0c;录屏早已不再是简单的屏幕录制&#xff0c;而是成为了内容创作、教学分享、游戏直播等领域的重要工具。然而&#xff0c;很多人在录屏时常常面临一个问题&#xff1a;录制好的视频没有声音。面对这个难题&#xff0c;录屏怎么有声音&#xff1f;怎样…

Oracle 解决4031错误

一、问题描述 什么是4031错误和4031错误产生的原因: 简单一个句话概括: 由于服务器一直在执行大量的硬解析,导致Oracle 的shared pool Free空间碎片过多,大的chunk不足, 当又一条复杂的sql语句要硬解析时, 缺少1个足够大的Free chunk, 通常就会报4031错误. 二、解决方法 临…

智能合约与企业数字化转型:案例分析与未来展望

随着区块链技术的快速发展&#xff0c;智能合约作为其重要应用之一&#xff0c;正逐渐成为推动企业数字化转型的关键工具。智能合约不仅可以自动执行和验证合同&#xff0c;还能够增强数据安全性、优化业务流程&#xff0c;并提升企业间的信任和透明度。本文将深入探讨智能合约…

PostgreSQL数据库通过索引优化查询

文章目录 1.使用EXPLAIN分析查询计划1.1 Seq Scan&#xff1a;全表顺序扫描&#xff0c; 表示数据库将按顺序扫描整个表&#xff0c;适用于小表或无索引的情况。1.2 Index Scan&#xff1a; 基于索引扫描&#xff0c;但不只是返回索引列的值。1.3 IndexOnly Scan&#xff1a;基…

MySQL数据库-Windows部署MySQL环境

Windows部署MySQL环境​​​​​​ 一、下载mysql数据库 进入MySQL官方网站&#xff08;MySQL :: MySQL DownloadsMySQL&#xff09;&#xff0c;随后按如下红框方式操作&#xff1a; ​ ​ ​ ​ 这里选择的是离线安装&#xff0c;第一个是在线安装 下载好安装包后开始…

昇思25天学习打卡营第十二天|Diffusion扩散模型

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第十二天了。 今天是第十二天&#xff0c;从第十天开始&#xff0c;进入了应用实战阶段&#xff0c;前九天都是基础入门阶段&#xff0c;具体的学习内容可以看链接 基础学习部分 昇思25天学习打卡…

使用 OpenCV 和 Python 进行车道检测和物体检测(YOLO)

本项目旨在开发一个集车道检测与物体检测功能于一体的智能视觉分析系统&#xff0c;利用先进的计算机视觉技术和深度学习模型&#xff0c;实现实时的道路场景理解和目标识别。系统主要依托OpenCV这一强大的计算机视觉库&#xff0c;以及Python作为编程语言&#xff0c;融合了车…

【笔试记录】腾讯音乐 | 20230903 | cpp (更新ing)

1 完美数 1.1 题目描述 小红定义一个数为“完美数”&#xff0c;当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200 都是完美数。 小红拿到了一个大小为 n&#xff08;2 < n < 2000&#xff09;的数组 a&#xff0c;她希望选择数组中的两个元素&#xff08;1 …

KEYSIGHT N1092系列,DCA-M系列采样示波器连接与自检?

KEYSIGHT N1092系列 采样示波器&#xff0c;虽然省去了屏幕和操作系统&#xff0c;但根据不同的型号&#xff0c;可以配备不同数量的光口和电口&#xff0c;满足各种测试需求。本次介绍的具体型号为N1092D&#xff0c;它拥有4个光口&#xff0c;能够进行多种测试。 测试步骤详解…

14-26 剑和侠客 – 预训练模型三部曲3 – 机器人时代来临

概述 在第 1 部分和第 2 部分中&#xff0c;我们讨论了适用于文本和图像任务的预训练模型&#xff0c;并探索了当今常用的模型。我们分析了这些模型的架构以及如何将它们用于特定任务。实现 AGI 所需的两个主要支柱是语言理解和机器的视觉能力。有许多任务与这两种能力有关。 …

日本最新型高达式巨型机器人承担铁路维护任务

日本有制造现实生活中的高达式巨型机器人的历史&#xff0c;但它们往往是用于娱乐目的&#xff0c;而不是实际应用。不过&#xff0c;日本刚刚开始使用一个 40 英尺高的人形机器人来维护铁路线。 大约两年前&#xff0c;西日本铁路公司&#xff08;JR 西日本&#xff09;制造了…