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

Leetcode4(寻找两个正序数组的中位数)

题目描述

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

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

提示:

nums1.length == m
nums2.length == n
0 <= m <= 1000
0 <= n <= 1000
1 <= m + n <= 2000
-106 <= nums1[i], nums2[i] <= 106

题解

如果对时间复杂度的要求有 log,通常都需要用到二分查找,这道题也可以通过二分查找实现。

debug半天写边界,还可以优化
明天优化一下,然后实现一下方法二

package com.example;class Solution {public int[] nums1,nums2;public double findMedianSortedArrays(int[] nums1, int[] nums2) {this.nums1=nums1;this.nums2=nums2;int n1=nums1.length,n2=nums2.length;if((n1+n2)%2==1){return find((n1+n2)/2+1);}return (find((n1+n2)/2+1)+find((n1+n2)/2))*1.0/2;}public int find(int k){int l1=0,l2=0;int n1=nums1.length,n2=nums2.length;while(true){if(l1==n1) return nums2[l2+k-1];if(l2==n2) return nums1[l1+k-1];if(k==1){return nums1[l1]>nums2[l2]?nums2[l2]:nums1[l1];}int mid=(k/2)-1;if(l1+mid>=n1&&n1<=n2){mid=n1-l1-1;}if(l2+mid>=n2&&n1>=n2){mid=n2-l2-1;}if(nums1[l1+mid]>=nums2[l2+mid]){l2+=mid+1;k-=mid+1;}else{l1+=mid+1;k-=mid+1;}}}
}

相关文章:

  • Windows11 WSL2 Ubuntu编译安装perf工具
  • VSCode 没有添加Windows右键菜单
  • Java图形编程实战:从基础绘制到高级动画实现
  • 函数01 day10
  • 【PostgreSQL安装】保姆级安装教程+特性详解
  • 深入理解Go并发模型:从CSP理论到生产实践的完整指南
  • encodeURIComponent和decodeURIComponent
  • OpenHarmony按键分发流程(60%)
  • 安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
  • 云安全与网络安全:核心区别与协同作用解析
  • Android Jetpack Compose开发纯自定义表盘【可用于体重,温度计等项目】
  • 设置Outlook关闭时最小化
  • TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
  • Haption 力反馈遥操作机器人:6 自由度 + 低延迟响应,解锁精准远程操控体验
  • omi开源程序是AI 可穿戴设备的源码。戴上它,说话,转录,自动完成
  • USB Over IP专用硬件的5个特点
  • C/CPP 结构体、联合体、位段内存计算 指南
  • 从面试角度回答Android中ContentProvider启动原理
  • 网络六边形受到攻击
  • EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
  • 网站制作视频课程/百度竞价排名是哪种方式
  • 怎么在工商局网站做股东变更/专业的制作网站开发公司
  • 新网站做seo优化步骤/企业qq
  • 做任务的设计网站/企业网站推广注意事项
  • 电商网站建设思维导图/seo网站优化方法
  • 自己可以做防伪网站吗/百度seo插件