首页 > 其他分享 >力扣4. 寻找两个正序数组的中位数

力扣4. 寻找两个正序数组的中位数

时间:2023-01-31 20:55:58浏览次数:54  
标签:正序 int 中位数 力扣 数组 nums1 nums2

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

 

提示:

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

直接合并后计算中位数即可

 1 class Solution {
 2 public:
 3     
 4     double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
 5 
 6         vector<double> merge;  //合并后数组
 7         int j=0;
 8         int m=nums1.size();
 9         int n=nums2.size();
10         nums2.push_back(-1);
11         //合并
12         for (int i=0;i<m;++i){  //完整遍历nums1,把nums2中比nums1小的数插入
13             while (nums1[i]>nums2[j]){  //把从nums2[j]开始小于nums[i]的数都插入merge数组中
14                 if (j<n){
15                     merge.push_back(nums2[j]);
16                     ++j;
17                 }
18                 else
19                     break;
20             }
21             merge.push_back(nums1[i]);
22         }
23         for (;j<n;++j){  //把num2中剩下比num1大的数插入
24             merge.push_back(nums2[j]);
25         }
26         //合并完成后直接计算中位数
27         if ((n+m)%2==0)
28             return (merge[(n+m)/2-1]+merge[(n+m)/2])/2;
29         else
30             return merge[(n+m)/2];
31 
32     }
33 };

 

标签:正序,int,中位数,力扣,数组,nums1,nums2
From: https://www.cnblogs.com/coderhrz/p/17080734.html

相关文章

  • 力扣---1581. 进店却未进行过交易的顾客
    表:Visits+-------------+---------+|ColumnName|Type   |+-------------+---------+|visit_id   |int    ||customer_id|int    |+-----------......
  • 力扣257 二叉树的所有路劲
    题目:给你一个二叉树的根节点root,按任意顺序,返回所有从根节点到叶子节点的路径。叶子节点是指没有子节点的节点。示例:输入:root=[1,2,3,null,5]输出:["1->2->......
  • 力扣110 平衡二叉树
    题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例:输入:root......
  • 力扣222 完全二叉树
    题目:给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面......
  • 力扣-82-删除排序链表中的重复元素Ⅱ
    这个删除重复不太常规的是:它不是删除多出来的剩下一个,而是比如有三个1,1重复了,那这三个1节点都不要 ListNode*deleteDuplicates(ListNode*head){ if(!head)returnh......
  • 力扣---2315. 统计星号
    给你一个字符串s,每两个连续竖线'|'为一对。换言之,第一个和第二个'|'为一对,第三个和第四个'|'为一对,以此类推。请你返回不在竖线对之间,s中'*'的数目。注意......
  • 力扣-56-合并区间
    好吧,上一题排序的思路其实是这一题的…......
  • 力扣-57-插入区间
    采用最直接的思路,if-else去考虑每一种情况并做出操作(比如找到新区间左端点落在哪个位置,几种情况,然后再去考虑右端点的几种情况)是非常细致繁琐的,以至于很容易出错考虑三种......
  • 力扣每日一题2023.1.28---1664. 生成平衡数组的方案数
    给你一个整数数组nums。你需要选择恰好一个下标(下标从0开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。比方说,如果nums=[6,1,7,4,1]......
  • 力扣111 二叉树的最小深度
    题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:输入:root=[3,9,20,nul......