#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 和 ...
随机推荐
- JavaScript各类型变量和对象
一.javascript支持的数据类型: var x=1 数字 var x=0.1 小数 var x=true/false bool var x="abc" 字符串 ...
- Java反射机制集中学习
什么是反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言 ...
- glyphicons-halflings-regular.woff2 文件 404
搜索了下,果然是因为mine没有配置的原因. http://stackoverflow.com/questions/32300578/how-to-remove-error-about-glyphic ...
- scss-传递内容块到@mixin
样式块被传递给混入用于放置内的样式.在@content指令的位置,样式被包含进mixin. 内容块被传递到块被定义一个混合的范围进行计算. 下面的例子演示了mixin使用内容块的SCSS代码: @mi ...
- sass文件处理
sass注释方式有两种: 1.标准的css注释/**/: 2.//双斜杠形式的单行注释(不会被转译): 标准的css注释 双斜杆单行注释 sass文件后缀名有两种: 1.后缀名为sass,不适用用大括 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图
1.前言 http://mt2.google.cn/vt/lyrs=m@225000000&hl=zh-CN&gl=cn&x=420&y=193&z=9& ...
- 使用 profile 进行python代码性能分析
定位程序性能瓶颈 对代码优化的前提是需要了解性能瓶颈在什么地方,程序运行的主要时间是消耗在哪里,对于比较复杂的代码可以借助一些工具来定位,python 内置了丰富的性能分析工具,如 profile,c ...
- php json_encode 中文乱码解决方法
本文列举3个方法,实现json_encode()后的string显示中文问题. 做接口时不需要,但存log时帮了大忙了. 在贴代码前,必须贴上官方param和return,链接:http://php. ...
- AMOLED原理介紹
1. OLED发光原理 OLED(Organic Light Emitting Display,有机发光显示器)是指有机半导体材料在电场驱动下,通过载流子注入和复合导致发光的现象.其基本原理是用ITO ...
- [工作积累点滴整理]虚拟化、云计算配置规划<一>
目 录1. 服务器虚拟化的相关配置建议 11.1. 服务器的基本配置建议 11.1.1. CPU配置 11.1.2. 服务器内存配置 21.1.3. 物理网卡配置 21.1.4. 服务器磁盘配置 21 ...