#leetcode刷题之路4-寻找两个有序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。
你可以假设 nums1 和 nums2 不会同时为空。
示例 1:
nums1 = [1, 3]
nums2 = [2]
则中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
则中位数是 (2 + 3)/2 = 2.5
思路:计算两个数组的长度,按照依次对比大小的方式把两个数组合并成一个,按照长度求出计算中位数的是哪两个(长度和为偶数)或一个(长度和为奇数)。然后普通思路进行。。。
#include <iostream>
#include <vector> double findMedianSortedArrays(std::vector<int>& nums1, std::vector<int>& nums2) {
int len1 = nums1.size();
int len2 = nums2.size();
int a = , b = ;
int count = ;
if (((len1 + len2) % ) == )
{
int num1 = (len1 + len2) / ;
int num2 = (len1 + len2) / + ;
double *s = new double[num2];
while (count<num2)
{
if ((a<len1&&b<len2&&nums1[a]<=nums2[b]) || (a<len1&&b == len2))
{
s[count] = nums1[a];
a++;
}
else if ((a<len1&&b<len2&&nums1[a]>nums2[b]) || (b < len2&&a == len1))
{
s[count] = nums2[b];
b++;
}
else
break;
count++;
}
double temp1 = s[num2 - ];
double temp2 = s[num1 - ];
delete[] s;
return (temp1+temp2) / ;
}
else
{
int num1 = (len1 + len2) / + ;
double *s = new double[num1 + ];
while (count<num1+)
{
if ((a<len1&&b<len2&&nums1[a]<=nums2[b]) || (a<len1&&b == len2))
{
s[count] = nums1[a];
a++;
}
else if ((a<len1&&b<len2&&nums1[a]>nums2[b]) || (b < len2&&a == len1))
{
s[count] = nums2[b];
b++;
}
else
break;
count++;
}
double temp = s[num1 - ];
delete[] s;
return temp;
}
}
int main() {
std::vector<int> a = { };
std::vector<int> b = { };
double aa = findMedianSortedArrays(a, b);
std::cout << aa << std::endl;
system("pause");
return ;
}
执行用时: 72 ms, 在Median of Two Sorted Arrays的C++提交中击败了7.44% 的用户
内存消耗: 21.8 MB, 在Median of Two Sorted Arrays的C++提交中击败了0.53% 的用户
有点垃圾。。。
改进思想参考:https://blog.csdn.net/hang404/article/details/84786904
#leetcode刷题之路4-寻找两个有序数组的中位数的更多相关文章
- #leetcode刷题之路21-合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例:输入:1->2->4, 1->3->4输出:1->1->2-&g ...
- LeetCode Golang 4. 寻找两个有序数组的中位数
4. 寻找两个有序数组的中位数 很明显我偷了懒, 没有给出正确的算法,因为官方的解法需要时间仔细看一下... func findMedianSortedArrays(nums1 []int, nums ...
- Leetcode(4)寻找两个有序数组的中位数
Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定两个大小为 m 和 n 的有序数组 nums1 和* nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O( ...
- Java实现 LeetCode 4 寻找两个有序数组的中位数
寻找两个有序数组的中位数 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 n ...
- 0004. 寻找两个有序数组的中位数(Java)
4. 寻找两个有序数组的中位数 https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 最简单的就是用最简单的,把两个数组分别抽出然 ...
- leetcode刷题四<寻找两个有序数组的中位数>
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- Leetcode题库——4.寻找两个有序数组的中位数
@author: ZZQ @software: PyCharm @file: findMedianSortedArrays.py @time: 2018/10/10 19:24 说明:给定两个大小为 ...
- 【LeetCode】寻找两个有序数组的中位数【性质分析+二分】
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...
- leetcode题目4.寻找两个有序数组的中位数(困难)
题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 ...
随机推荐
- 如何恢复sqlserver误删除的数据(摘)
一.借助第三方工具 1.sqlserver2005: Log Explorer http://www.cnblogs.com/whitney/archive/2008/08/22/1273879.ht ...
- 码农的好助手:版本管理工具git的使用
一.什么是github? GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub. GitHub 于 2008 年 4 月 10 日 ...
- Python contextlib.contextmanager
看着代码又发现了一个奇怪的东西: @contextlib.contextmanager def __call__(self, incoming): result_wrapper = [] yield ...
- csharp: ClientScript.RegisterStartupScript int net4.0
//彈出提示 ClientScriptManager cs = Page.ClientScript; StringBuilder sb = new StringBuilder(); sb.Append ...
- linux里终端安转视频播放器的操作及显示
[enilu@enilu ~]$ mplayerbash: mplayer: command not found[enilu@enilu ~]$ yum list | grep mplayer^C^C ...
- Internet Of Things
- 缩短移动开发周期的ApiCloud
ApiCloud百度百科介绍: ApiCloud 官网 官方论坛 APICloud经典O2O案例APP视频教程
- 【IOS】Mac和IOS开发资源汇总
本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按**command+D**). 今天收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大家有知道不错的站点,可 ...
- 深入JDK源码,这里总有你不知道的知识点!
Java的基础知识有很多,但是我认为最基础的知识应该要属jdk的基础代码,jdk的基础代码里面,有分了很多基础模块,其中又属jdk包下面的lang包最为基础. 我们下面将总结和分析一下lang包下面最 ...
- adb工具包究竟能帮我们做什么?
adb工具包主要作用于什么呢?应该有很多用户都不了解adb,那就一起来了解一下吧!adb的全称为Android Debug Bridge,就是起到调试桥的作用. 借助adb工具,我们可以管理设备或手机 ...