Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b3561ae

Browse files
committed
Add leetcode solution post for leetcode 4.
1 parent b157d18 commit b3561ae

File tree

2 files changed

+130
-1
lines changed

2 files changed

+130
-1
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
---
2+
title: leetcode4 寻找两个正序数组的中位数【困难难度】
3+
tags:
4+
- leetcode
5+
- 学习笔记
6+
- 算法
7+
---
8+
9+
### [4. 寻找两个正序数组的中位数](https://leetcode-cn.com/problems/median-of-two-sorted-arrays/)
10+
11+
### 英文题目: Median of two sorted arrays
12+
13+
<table> <tr> <td bgcolor=white width=auto>&nbsp; くろまる &nbsp;难度: </td> <td bgcolor=#D9534F width=auto><font color=white>困难</font></td> </tr></table>
14+
15+
给定两个大小分别为 `m``n` 的正序(从小到大)数组 `nums1``nums2`。请你找出并返回这两个正序数组的 **中位数**
16+
17+
18+
19+
**示例 1:**
20+
21+
```
22+
输入:nums1 = [1,3], nums2 = [2]
23+
输出:2.00000
24+
解释:合并数组 = [1,2,3] ,中位数 2
25+
```
26+
27+
**示例 2:**
28+
29+
```
30+
输入:nums1 = [1,2], nums2 = [3,4]
31+
输出:2.50000
32+
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
33+
```
34+
35+
**示例 3:**
36+
37+
```
38+
输入:nums1 = [0,0], nums2 = [0,0]
39+
输出:0.00000
40+
```
41+
42+
**示例 4:**
43+
44+
```
45+
输入:nums1 = [], nums2 = [1]
46+
输出:1.00000
47+
```
48+
49+
**示例 5:**
50+
51+
```
52+
输入:nums1 = [2], nums2 = []
53+
输出:2.00000
54+
```
55+
56+
57+
58+
**提示:**
59+
60+
- `nums1.length == m`
61+
- `nums2.length == n`
62+
- `0 <= m <= 1000`
63+
- `0 <= n <= 1000`
64+
- `1 <= m + n <= 2000`
65+
- `-106 <= nums1[i], nums2[i] <= 106`
66+
67+
68+
**进阶:**你能设计一个时间复杂度为 `O(log (m+n))` 的算法解决此问题吗?
69+
70+
<br/>
71+
72+
### 思路
73+
先合并两个有序数组,然后根据数组长度的奇偶来取到中位数。如果是偶数个,就取中间两个的平均数;如果是奇数个,直接取最中间的即可。
74+
75+
`leetcode 88. 合并两个有序数组` 类似。
76+
77+
<br/>
78+
79+
80+
### 已AC的C++代码:
81+
```cpp
82+
class Solution {
83+
public:
84+
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
85+
vector<int> nums;
86+
double res;
87+
int m = nums1.size();
88+
int n = nums2.size();
89+
int len;
90+
91+
int i = 0, j = 0;
92+
while (i < m && j < n) // 只要一个指针扫到数组末尾,循环结束
93+
{
94+
if(nums1[i] <= nums2[j])
95+
{
96+
nums.push_back(nums1[i]);
97+
i++;
98+
}
99+
else {
100+
nums.push_back(nums2[j]);
101+
j++;
102+
}
103+
}
104+
105+
while(i < m) // 数组nums1没跑完,nums2已跑完时
106+
{
107+
nums.push_back(nums1[i]);
108+
i++;
109+
}
110+
111+
while(j < n) // 数组nums2没跑完,nums1已跑完时
112+
{
113+
nums.push_back(nums2[j]);
114+
j++;
115+
}
116+
len = nums.size();
117+
if(len % 2 == 0)
118+
{
119+
res = (nums[len/2] + nums[len/2-1])/2.0;
120+
}
121+
else res = nums[len/2];
122+
123+
return res;
124+
}
125+
};
126+
```
127+

‎mkdocs.yml‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,6 @@ nav:
7777
- leetcode:
7878
- leetcode题解: solutions/intro.md
7979
- 玩转力扣Tips: solutions/tips.md
80-
- leetcode1 两数之和[简单]: solutions/leetcode1 两数之和[简单].md
80+
- leetcode1 两数之和[简单]: solutions/leetcode1 两数之和[简单].md
81+
- 寻找两个正序数组的中位数[困难]: solutions/leetcode4 寻找两个正序数组的中位数[困难].md
82+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /