首页 > 编程语言 >LetCode算法--3.找找两个正序数组的中位数

LetCode算法--3.找找两个正序数组的中位数

时间:2022-08-28 18:15:12浏览次数:43  
标签:正序 -- int length totalnums LetCode nums1 nums2

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/median-of-two-sorted-arrays

写法一:

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int num1 = nums1.length;
        int num2 = nums2.length;
        int[] totalnums = new int[num1 + num2];
        for (int i = 0; i < num1; i ++){
            totalnums[i] = nums1[i];
        }
        for (int i = 0; i <num2; i ++){
            totalnums[num1 + i] = nums2[i];
        }
        for (int  i = 0; i < totalnums.length; i ++ ){
            for (int j = 0;j < totalnums.length - 1 - i; j ++){
                if (totalnums[j] > totalnums[j + 1]){
                    int temp = totalnums[j];
                    totalnums[j] = totalnums[j + 1];
                    totalnums[j + 1] = temp;
                }
            }
        }

        if ((totalnums.length) % 2 == 1){
            return totalnums[(totalnums.length)/2];
        }else {
            return (double) (totalnums[(totalnums.length)/2] + totalnums[(totalnums.length)/2-1])/2;
        }
    }
}

写法二:

二分查找法(官方解)

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        if (nums1.length > nums2.length) {
            return findMedianSortedArrays(nums2, nums1);
        }

        int m = nums1.length;
        int n = nums2.length;
        int left = 0, right = m;
        // median1:前一部分的最大值
        // median2:后一部分的最小值
        int median1 = 0, median2 = 0;

        while (left <= right) {
            // 前一部分包含 nums1[0 .. i-1] 和 nums2[0 .. j-1]
            // 后一部分包含 nums1[i .. m-1] 和 nums2[j .. n-1]
            int i = (left + right) / 2;
            int j = (m + n + 1) / 2 - i;

            // nums_im1, nums_i, nums_jm1, nums_j 分别表示 nums1[i-1], nums1[i], nums2[j-1], nums2[j]
            int nums_im1 = (i == 0 ? Integer.MIN_VALUE : nums1[i - 1]);
            int nums_i = (i == m ? Integer.MAX_VALUE : nums1[i]);
            int nums_jm1 = (j == 0 ? Integer.MIN_VALUE : nums2[j - 1]);
            int nums_j = (j == n ? Integer.MAX_VALUE : nums2[j]);

            if (nums_im1 <= nums_j) {
                median1 = Math.max(nums_im1, nums_jm1);
                median2 = Math.min(nums_i, nums_j);
                left = i + 1;
            } else {
                right = i - 1;
            }
        }

        return (m + n) % 2 == 0 ? (median1 + median2) / 2.0 : median1;
    }
}

 

标签:正序,--,int,length,totalnums,LetCode,nums1,nums2
From: https://www.cnblogs.com/xinger123/p/16633280.html

相关文章

  • PerfView专题 (第十二篇):对 C# 下的 SDK 类库进行监控(大结局)
    一:背景本篇是我们系列文章的最后一篇,前面的文章中大多是在CLRRuntime以及OS层面进行监控来发现各种可疑的程序问题,除了这两个层面,其实我们还可以对SDK中一些类进行......
  • Python入门系列(三)一学就会-基础数据类型
    数据类型您可以使用type()函数获取任何对象的数据类型。x=5print(type(x))数字类型x=1#inty=2.8#floatz=1j#complexInt,或integer,是一个长度不......
  • 设置nvim与vs code自动切换输入法
    ~/.vimrc避免切换模式时卡顿:setttimeoutlen=100~/.config/nvim/init.vim让nvim共享vim的配置setruntimepath^=~/.vimruntimepath+=~/.vim/afterlet&packpath=&r......
  • Fiddler学习笔记--基础了解(7)
    首次打开Fiddler默认是不会捕获HTTPS,需要配置后方可捕获HTTPStools--FiddlerOptions--HTTPS,然后将界面选项全部勾选上如果我们有远程监控需求,需要切换值connections,......
  • Github
    下载仓库中指定分支下的指定目录以https://github.com/spring-projects/spring-boot.git仓库的2.5.x分支为例,url地址为:https://codeload.github.com/spring-proj......
  • python版本
    一个系统上可以同时安装几个python版本,不必去卸载旧的python版本;ubuntu上安装新的python版本:https://blog.csdn.net/weixin_42256557/article/details/122342614安装完成......
  • leetcode198:打家劫舍
    packagecom.mxnet;publicclassSolution198{publicstaticvoidmain(String[]args){}/***你是一个专业的小偷,计划偷窃沿街的房屋。每间......
  • vscode格式化配置
    /**安装插件*prettier、eslint、Vetur*/{"search.followSymlinks":false,//vscode默认启用了根据文件类型自动设置tabsize的选项"editor.detect......
  • umijs如何使用封装好的Lottie动画
    lottie:设计师制作动画,并提供json文件。前端可以使用对应的api操作时间流,对动画进行一些事件上的操作。官网文档: https://github.com/airbnb/lottie-web一.下载依赖 n......
  • 初学者数据科学家的课程提示
    初学者数据科学家的课程提示了解课程过滤的工作原理,以及如何为受众量身定制Photoby马库斯·温克勒on不飞溅.如果您刚开始从事数据科学,您的简历对于帮助您找到第......