【leetcode】力扣 --- 日积月累,每日一题——3 寻找两个正序数组的中位数

简介: 寻找两个正序数组的中位数一、题目二、代码及思路思路:代码:

一、题目


题目来源

等 级 : 困 难


给定两个大小分别为 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
示例 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


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


二、代码及思路


说是困难,但是确实是“不简单”


思路:


审题发现:最后得到的结果是一个double类型的


这 一 定 要 注 意 , 我 之 前 提 交 都 是 因 为 这 个 问 题 , 导 致 错 误


整体的一个思路:将两个数组合并,然后取中位数(科普一下中位数:当总数量为奇数时,中位数是中间的值,当总数量为偶数时,中位数是中间两个数的一半。这个你知道吗?/滑稽)


代码:


class Solution {
    public double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int len = nums1.length + nums2.length;
        int len2, i = 0, j = 0, n = 0;
        double result;
        int[] nums = new int[len];
        while(i < nums1.length && j < nums2.length){
            if(nums1[i] < nums2[j]){
                nums[n] = nums1[i];
                n++;
                i++;
            }else{
                nums[n] = nums2[j];
                n++;
                j++;
            }
        }
        if(i == nums1.length){
            for(int k = j; k < nums2.length; k++){
                nums[n] = nums2[k];
                n++;
            }
        }else if(j == nums2.length){
            for(int k = i; k < nums1.length; k++){
                nums[n] = nums1[k];
                n++;
            }
        }
        if(len % 2 == 1){
            len2 = len / 2 + 1;
            result = nums[len2 - 1];
        }else{
            len2 = len / 2;
            result = (double)(nums[len2] + nums[len2 - 1]) / 2;
        }
        return result;
    }
}


各位小伙伴,如果有更好的思路或者代码优化欢迎一起讨论

目录
打赏
0
0
0
0
1
分享
相关文章
|
5月前
|
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
67 0
|
5月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
42 4
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
5月前
|
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
46 0
Leetcode第三十三题(搜索旋转排序数组)
LeetCode第81题搜索旋转排序数组 II
文章讲解了LeetCode第81题"搜索旋转排序数组 II"的解法,通过二分查找算法并加入去重逻辑来解决在旋转且含有重复元素的数组中搜索特定值的问题。
LeetCode第81题搜索旋转排序数组 II
|
5月前
|
力扣(LeetCode)数据结构练习题(3)------链表
力扣(LeetCode)数据结构练习题(3)------链表
137 0
|
5月前
力扣(LeetCode)数据结构练习题(2)
力扣(LeetCode)数据结构练习题(2)
47 0
|
5月前
|
力扣(LeetCode)数据结构练习题
力扣(LeetCode)数据结构练习题
84 0
|
5月前
|
Leetcode第53题(最大子数组和)
这篇文章介绍了LeetCode第53题“最大子数组和”的动态规划解法,提供了详细的状态转移方程和C++代码实现,并讨论了其他算法如贪心、分治、改进动态规划和分块累计法。
105 0
|
5月前
|
C++
【LeetCode 12】349.两个数组的交集
【LeetCode 12】349.两个数组的交集
38 0