寻找两个正序数组的中位数(C++)
2023-09-14 09:05:15 时间
寻找两个正序数组的中位数
给定两个大小分别为 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
我的代码:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
// 首先按照归并排序的方法 对两个数字进行合并
vector<int> nums3;
int i = 0, j = 0;
while(i < nums1.size() && j < nums2.size())
{
if(nums1[i] < nums2[j]) nums3.push_back(nums1[i ++]);
else nums3.push_back(nums2[j ++]);
}
while(i < nums1.size()) nums3.push_back(nums1[i ++]);
while(j < nums2.size()) nums3.push_back(nums2[j ++]);
double res = 0;
if(nums3.size() % 2 == 1) res = nums3[nums3.size() / 2];
else
{
// 这里需要注意的是对于size为偶数的情况 是需要-1的
// 因为数组下标从0开始
int t = nums3.size() - 1;
res = (nums3[t / 2] + nums3[t / 2 + 1]) / 2.0;
}
return res;
}
};
对应我的掘金文章:https://juejin.cn/post/7147341453931315230
相关文章
- 【C/C++学院】0815-函数包装器/CPP类型转换/函数模块/动态数组
- 【C/C++学院】(3)二维数组/二分查找法/指针/模块注射
- C++ code:函数指针数组
- Atitit.java jna 调用c++ dll 的总结
- atitit.系统托盘图标的设计java swing c# .net c++ js
- C++:C++编程语言学习之数组/字符串/指针/引用/日期&I/O输入输出操作(I/O 库头文件/标准输出流cout/标准输入流cin/标准错误流/准日志流)的简介、案例应用之详细攻略
- 【华为OD机试 2023最新 】 组合出合法最小数(C++ 100%)
- LeetCode 4. 寻找两个正序数组的中位数(执行用时: 20 ms , 在所有 C++ 提交中击败了 94.05% 的用户)
- C++ 多个有序数组的交集
- C/C++数据对齐汇总
- C++:读写二进制bin文件到double数组
- c++ vector C++ vector存放结构体 并且排序
- C++引用入门教程(一)
- c++ 数组
- C++之类型转换void *p = str; p = p+1报错(一百一二十四)
- C++工程编译时间分析
- [C/C++ IDE] CLion 配置使用教程
- PAT 1146 C++ 版
- 整数拆分(c++,java)
- C++ Primer读书笔记——3.字符串、向量和数组
- 【跟学C++】C++动态数组——vector/deque类(Study14)