两组有序数列的中位数

两组升序排列的数组A[m]和B[n], 求他们的中位数。

注意,中位数的概念哦~相信你会百度一下的~

格式:

第一行输入数字m,接下来一行输入数组A[m], 第三行输入数字n,第四行输入数组B[n],接下来输出中位数。两个数组的长度都不超过1000。

注意,需要保留5位小数哦~所以,你设计函数的时候请设计成double类型哦~

样例输入

1
3
5
1 2 4 5 6

样例输出

3.50000
package jsk;

import java.util.Scanner;

public class Main23 {
	private static Scanner input;
	public static void main(String[] args) {
		//两组升序排列的数组A[m]和B[n],求他们的中位数
		input = new Scanner(System.in);
		int m = input.nextInt();
		int [] array1 =new int[m];
		init(array1);
		int n = input.nextInt();
		int [] array2 = new int[n];
		init(array2);
		//把这两个数组合并起来
		mearge(array1,array2);
	}
	private static void init(int [] array) {
		for (int i =0;i<array.length;i++) {
			array[i] = input.nextInt();
		}
	}
	public static void mearge(int[]array1,int[]array2){
		int p1 = array1.length-1;
		int p2 = array2.length-1;
		//循环遍历array1,array2,然后合并起来
		int newLength = array1.length+array2.length-1;
		int [] newArray = new int[newLength+1];
		while (p1 >= 0 && p2 >= 0) {//二者长度相等部分
			if (array1[p1] >= array2[p2]) {
				newArray[newLength] = array1[p1];
				p1--;
				newLength--;
			} else {
				newArray[newLength] = array2[p2];
				newLength--;
				p2--;
			}
		}
		//假设a数组多出来
		while (p1 >=0) {
			newArray[newLength] = array1[p1];
			newLength--;
			p1--;

		}
		//假设b数组多出来
		while (p2 >=0) {
			newArray[newLength] = array2[p2];
			newLength--;
			p2--;
		}
		//求中位数,如果这这个中位数是奇数的,直接取中间的数,如果是偶数的话取中间减一,加一两个数的平均数
		if (newArray.length%2 == 1) {
			System.out.println(newArray[newArray.length/2+1]);
		}else{
			int number1 = newArray[newArray.length/2];
			int number2 = newArray[newArray.length/2-1];
			System.out.printf("%.5f",(double)(number1+number2)/2);
		}

	}

}
时间: 2024-12-25 22:14:35

两组有序数列的中位数的相关文章

logn+m复杂度找两个有序数列的中位数

class Solution { public: double fun(vector<int> nums1,int n,vector<int> nums2,int m,int k) { if(nums1.size()-n>nums2.size()-m) return fun(nums2,m,nums1,n,k); if(n==nums1.size()) return nums2[k-1+m]; if(k==1) return min(nums1[n],nums2[m]); i

[LeetCode] 4. Median of Two Sorted Arrays 两个有序数组的中位数

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 求两个有序数组的中位数,并限制了时间复杂度O(log (m+n)),看到这个时间复杂度,自然想到用二分搜索Binary Search. 对于一个长度为n的已

leetcode第四题:两个有序数组的中位数

给定两个大小为 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 代码如下: def median(A, B): m, n = len(A), le

【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 分析:给定两个有序的数组,求中位数,难度系数给的是 Hard,希望的复杂度是 lo

寻找两个有序数组的中位数

题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2.          请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)).          你可以假设 nums1 和 nums2 不会同时为空.          示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 var findMedianSortedArrays = function(nums1, nums2) { var arr = Array

leetcode刷题四&lt;寻找两个有序数组的中位数&gt;

给定两个大小为 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 思路简单直接撸代码吧 double findMedianSortedArrays(

LeetCode刷题:第四题 寻找两个有序数组的中位数

题目描述: 给定两个大小为 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 直接上代码: double findMedianSortedArray

[LeetCode] 4. 寻找两个有序数组的中位数

题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/ 题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例: 示例 1: nums1 = [1, 3] nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2] n

寻找两个有序数组的中位数 C++实现leetcode系列(四)

给定两个大小为 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 这道题让我们求两个有序数组的中位数,而且限制了时间复杂度为 O(log (m+n))