Lake's Blog Lake's Blog
首页
HCFrame
  • 博客搭建

    • 搜索引擎
    • SEO优化
    • 问题记录
  • Vue

    • 问题记录
  • uni-app
  • 开发

    • Spring
  • 数据库及中间件

    • Elasticsearch
    • SQL
  • 杂谈

    • 杂谈
  • 微服务

    • nacos
    • CAS
  • 算法说明

    • algorithm
  • leetCode

    • leetCode
  • 代理

    • Nginx
  • Linux

    • ubuntu
  • Docker
  • 数据库
  • 消息队列
  • openwrt
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub

Lake Liu

很菜的程序员
首页
HCFrame
  • 博客搭建

    • 搜索引擎
    • SEO优化
    • 问题记录
  • Vue

    • 问题记录
  • uni-app
  • 开发

    • Spring
  • 数据库及中间件

    • Elasticsearch
    • SQL
  • 杂谈

    • 杂谈
  • 微服务

    • nacos
    • CAS
  • 算法说明

    • algorithm
  • leetCode

    • leetCode
  • 代理

    • Nginx
  • Linux

    • ubuntu
  • Docker
  • 数据库
  • 消息队列
  • openwrt
  • 友情链接
关于
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub
  • 算法说明

  • leetCode

    • 01.两数之和
    • 02.两数相加
    • 03.无重复字符的最长子串
    • 04.寻找两个正序数组的中位数
      • 04.寻找两个正序数组的中位数
      • 暴力
        • 思路
        • 代码
      • 二分法

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

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

难度:困难

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

进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?

示例 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 示例 3:

输入:nums1 = [0,0], nums2 = [0,0] 输出:0.00000 示例 4:

输入:nums1 = [], nums2 = [1] 输出:1.00000 示例 5:

输入:nums1 = [2], nums2 = [] 输出:2.00000

提示:

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

# 暴力

# 思路

先将两个数组合成一个数组,进行遍历

# 代码

class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m = nums1.length, n = nums2.length;
        if (m == 0) {
            return getMid(nums2);
        }
        if (n == 0) {
            return getMid(nums1);
        }
        int[] temp = new int[m + n];
        int i = 0, j = 0, count = 0;
        while (count != (m + n)) {
            if (i == m) {
                while (j != n) {
                    temp[count++] = nums2[j++];
                }
                break;
            }
            if (j == n) {
                while (i != m) {
                    temp[count++] = nums1[i++];
                }
                break;
            }
            if (nums1[i] < nums2[j]) {
                temp[count++] = nums1[i++];
            } else {
                temp[count++] = nums2[j++];
            }
        }
        return getMid(temp);
    }

    public double getMid(int[] nums) {
        if (nums.length % 2 == 0) {
            return (nums[nums.length / 2] + nums[nums.length / 2 - 1]) / 2.0;
        } else {
            return nums[nums.length / 2];
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

# 二分法

待补充

编辑
#leetCode#算法
上次更新: 2021/01/05, 01:59:46
03.无重复字符的最长子串

← 03.无重复字符的最长子串

最近更新
01
IDEA行号太宽
03-11
02
uniapp中实现h5扫码功能(微信版)
08-12
03
Docker安装Rabbitmq
07-22
更多文章>
本站总访问量次 | 您是本站第位访问者
Theme by Vdoing | Copyright © 2020-2024 Lake Liu | MIT License | 背景图、Logo、头像设计@Drrizzee
  • 跟随系统
  • 深色模式
  • 浅色模式
  • 阅读模式