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

leetcode4.寻找两个正序数组中的中位数

思路源于

LeetCode004-两个有序数组的中位数-最优算法代码讲解

 基本思路是将两个数组看成一个数组,然后划分为两个部分,若为奇数左边部分个数多1,若为偶数左边部分等于右边部分个数。i表示数组1划分位置(i为4是索引4也表示i的左半部分有四个元素),j表示数组2的划分位置,i和j的划分保证左边部分的所有值都不超过右边部分的最小值,这样中位数就在i和j的附近,与i、j、i-1、j-1这四个位置上的元素有关。若总长度为奇数,则结果为左部分的最大值,若为偶数则结果为左部分的最大值和右边部分的最小值取均值

这道题目的边界条件很难判定,建议多加思索

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        if(nums1.length>nums2.length)
            return findMedianSortedArrays(nums2, nums1);
        int m = nums1.length, n = nums2.length;
        int iMin = 0, iMax = m;
        while (iMin <= iMax) {
            int i = (iMin + iMax) / 2;//数组1的分割点
            int j = (m + n + 1) / 2 - i;//数组2的分割点
            if (j!=0&&i!=m &&nums1[i] < nums2[j - 1]) {
                iMin = i + 1;
            } else if (i!=0&&j!=n && nums1[i - 1] > nums2[j]) {
                iMax = i - 1;
            } else {
                int maxOfLeft;
                if(i==0)
                    maxOfLeft=nums2[j-1];
                else if(j==0)
                    maxOfLeft=nums1[i-1];
                else
                    maxOfLeft = Math.max(nums1[i - 1], nums2[j - 1]);

                if((m+n)%2==1)
                    return maxOfLeft;

                int minOfRight;
                if(i==m)
                    minOfRight=nums2[j];
                else if(j==n)
                    minOfRight = nums1[i];
                else
                    minOfRight = Math.min(nums1[i], nums2[j]);
                return (maxOfLeft + minOfRight) / 2.0;
            }
        }
        return 0;
    }
}

 

http://www.dtcms.com/a/113225.html

相关文章:

  • 类 和 对象 的介绍
  • 2024 .11-2025.3 一些新感悟
  • 【33期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情api接口之沪深A股当天逐笔交易数据及接口API说明文档
  • 【2020】【论文笔记】相变材料与超表面——
  • 使用Cusor 生成 Figma UI 设计稿
  • 数据库并发控制问题
  • 麒麟系统桌面版本v10安装教程
  • 【动手学深度学习】卷积神经网络(CNN)入门
  • 低代码开发平台:飞帆画 echarts 柱状图
  • pygame里live2d的使用方法(live2d-py)
  • 人工智能与计算机技术赋能高中教育数字化教学模式的构建与实践
  • Git 分布式版本控制工具
  • 【ROS2】〇、ROS2的安装
  • 神经网络与深度学习:案例与实践——第三章(2)
  • 3D图像重建中Bundle Adjustment的推导与实现
  • Shell脚本笔记
  • Java第三节:新手如何用idea创建java项目
  • #SVA语法滴水穿石# (004)关于 ended 和 triggered 用法
  • Java HttpURLConnection修仙指南:从萌新到HTTP请求大能的渡劫手册
  • #SVA语法滴水穿石# (005)关于 问号表达式(condition ? expr1 : expr2)
  • Arduino示例代码讲解:ADXL3xx 加速传感器
  • Java 类型转换和泛型原理(JVM 层面)
  • 论定制开发开源 AI 智能名片 S2B2C 商城小程序源码在零售变革中的角色与价值
  • 基于sklearn实现文本摘要思考
  • Linux进程间通信——有名管道
  • 【AI论文】基础智能体(Foundation Agents)领域的进展与挑战:从类脑智能到进化型、协作型及安全型系统
  • 数据化管理(二)---寻找零售密码
  • 使用Ubuntu18恢复群晖nas硬盘数据外接usb
  • [自制调试工具]利用模板函数打造通用调试工具
  • 使用OpenFeign实现服务远程调用