4:寻找两个正序数组的中位数

This commit is contained in:
huangge1199 2021-06-07 10:14:35 +08:00
parent cc218a7962
commit 62d6782d60
2 changed files with 148 additions and 0 deletions

View File

@ -0,0 +1,90 @@
//给定两个大小分别为 m n 的正序从小到大数组 nums1 nums2请你找出并返回这两个正序数组的 中位数
//
//
//
// 示例 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
//
//
// 示例 3
//
//
//输入nums1 = [0,0], nums2 = [0,0]
//输出0.00000
//
//
// 示例 4
//
//
//输入nums1 = [], nums2 = [1]
//输出1.00000
//
//
// 示例 5
//
//
//输入nums1 = [2], nums2 = []
//输出2.00000
//
//
//
//
// 提示
//
//
// nums1.length == m
// nums2.length == n
// 0 <= m <= 1000
// 0 <= n <= 1000
// 1 <= m + n <= 2000
// -106 <= nums1[i], nums2[i] <= 106
//
//
//
//
// 进阶你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗
// Related Topics 数组 二分查找 分治算法
// 👍 4167 👎 0
package leetcode.editor.cn;
import java.util.Arrays;
//4:寻找两个正序数组的中位数
public class MedianOfTwoSortedArrays{
public static void main(String[] args) {
//测试代码
Solution solution = new MedianOfTwoSortedArrays().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] result = Arrays.copyOf(nums1,nums1.length+nums2.length);
System.arraycopy(nums2,0,result,nums1.length,nums2.length);
Arrays.sort(result);
double num;
int length = result.length;
if(length%2==0){
num = (result[length/2-1]+result[length/2])/2.0;
}else{
num = result[length/2];
}
return num;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}

View File

@ -0,0 +1,58 @@
<p>给定两个大小分别为 <code>m</code><code>n</code> 的正序(从小到大)数组 <code>nums1</code> 和 <code>nums2</code>。请你找出并返回这两个正序数组的 <strong>中位数</strong></p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums1 = [1,3], nums2 = [2]
<strong>输出:</strong>2.00000
<strong>解释:</strong>合并数组 = [1,2,3] ,中位数 2
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums1 = [1,2], nums2 = [3,4]
<strong>输出:</strong>2.50000
<strong>解释:</strong>合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums1 = [0,0], nums2 = [0,0]
<strong>输出:</strong>0.00000
</pre>
<p><strong>示例 4</strong></p>
<pre>
<strong>输入:</strong>nums1 = [], nums2 = [1]
<strong>输出:</strong>1.00000
</pre>
<p><strong>示例 5</strong></p>
<pre>
<strong>输入:</strong>nums1 = [2], nums2 = []
<strong>输出:</strong>2.00000
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>nums1.length == m</code></li>
<li><code>nums2.length == n</code></li>
<li><code>0 <= m <= 1000</code></li>
<li><code>0 <= n <= 1000</code></li>
<li><code>1 <= m + n <= 2000</code></li>
<li><code>-10<sup>6</sup> <= nums1[i], nums2[i] <= 10<sup>6</sup></code></li>
</ul>
<p> </p>
<p><strong>进阶:</strong>你能设计一个时间复杂度为 <code>O(log (m+n))</code> 的算法解决此问题吗?</p>
<div><div>Related Topics</div><div><li>数组</li><li>二分查找</li><li>分治算法</li></div></div>\n<div><li>👍 4167</li><li>👎 0</li></div>