刷题之路第四题--取两个顺序数组的数值的中位数

Median of Two Sorted Arrays

简介:取两个顺序数组的数值的中位数

问题详解:

给定两个排序的数组nums1和nums2分别为m和n,我们需要的是两个数组中所组成一个数列的中位数.

注意:

1.需要判断数组NPE

2.结果不是int

举例

1:

nums1 = [1, 3]

nums2 = [2]

中位数是 2.0

2:

nums1 = [1, 2]

nums2 = [3, 4]

中位数是 (2 + 3)/2 = 2.5

JAVA 实现方法一:

通过NPE判断后将两个数组插入到一个集合里,然后通过toArray()转换为数组,用Arrays.sort()排序再求出中位数

官方实现一 : Recursive Approach

了解中位数有什么用,在统计中,中位数用于将一组分成两个相等长度的子集,一个子集总是大于另一个子集

如果我们利用中位数来划分两个数组

复杂度分析:

时间复杂度: O(log?(min(m,n)))

空间复杂度; O(1)

注:

1.toAraay()

*toArray();

报错:Exception in thread “main” java.lang.ClassCastException: java.lang.Object; cannot be cast to java.lang.String;

*toArray(T[]a);转换为指定类型

String[] array =new String[list.size()];

list.toArray(array);

数组的定义不能用基本类型 只能用包装类型

2.数组的动态初始化 时new int [ ] 不是 new [ ] int

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

原文地址:https://www.cnblogs.com/lalalaczq/p/10675447.html

时间: 2024-10-02 10:01:57

刷题之路第四题--取两个顺序数组的数值的中位数的相关文章

经典算法题每日演练——第四题 最长公共子序列

原文:经典算法题每日演练--第四题 最长公共子序列 一: 作用 最长公共子序列的问题常用于解决字符串的相似度,是一个非常实用的算法,作为码农,此算法是我们的必备基本功. 二:概念 举个例子,cnblogs这个字符串中子序列有多少个呢?很显然有27个,比如其中的cb,cgs等等都是其子序列,我们可以看出 子序列不见得一定是连续的,连续的那是子串. 我想大家已经了解了子序列的概念,那现在可以延伸到两个字符串了,那么大家能够看出:cnblogs和belong的公共子序列吗? 在你找出的公共子序列中,你

取两个String数组的交集

1 import org.testng.annotations.Test; 2 import java.util.HashMap; 3 import java.util.LinkedList; 4 import java.util.List; 5 import java.util.Map; 6 7 8 public class test { 9 @Test//测试程序 10 public void test(){ 11 String[] arr1 = {"112","wqw&

算法实战(四)寻找两个有序数组的中位数

一.前言 今天开始第四题,寻找两个有序数组的中位数.这个题leetcode的标记难度是困难,这一看可把我吓坏了,之前还没做过困难的题目.但是进去一看,感觉题目挺简单的,还小小的高兴了一会儿,以为是自己的水平变高了.结果打脸来的太快,漏看了一个条件,要求时间复杂度为O(log(n+m)),果然还是有难度的.话不多说.来看题目. 二.题目 题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))

取牌求顺序数组

一副从1到n的牌,每次从牌顶取一张放桌子上,再取一张放牌堆底,直到牌堆没牌,最后桌子上底牌是从1到n有序,设计程序,输入n,输出牌堆到顺序数组. 解:"取一个1~n到数组.这里为了说明取n=5.按照题目中到规则变换,得到数组:[1 3 5 4 2],将该数组下标与值互换得到[1 5 2 4 3],即为答案.解释:[1 3 5 4 2]的意义是,经过变换,原数组中3号位置的数字现在2号槽,原数组中5号位置的数字现在3号槽...现在已知变换后的槽存放的是1~n,故只需将下标与值互换即可得到待求数组.

调整数组顺序使奇数位于偶数前面 【微软面试100题 第五十四题】

题目要求: 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 要求时间复杂度为O(n). 参考资料:剑指offer第14题. 题目分析: 使用两个指针,pBegin和pEnd,pBegin从开头往后遍历,pEnd从结尾往前遍历,当pBegin遇到偶数和pEnd遇到奇数时,交换两个数,然后继续遍历,直到pBegin>pEnd,则结束. 代码实现: #include <iostream> using namespace std; void

数组中超过出现次数一半的数字 【微软面试100题 第七十四题】

问题要求: 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字. 参考资料:编程之美2.3 寻找发帖水王 问题分析: 方法1 对数组排序,然后顺次查找其中最多的: 方法2 对数组排序,最中间一个肯定为要找的数字,时间复杂度O(NlogN): 方法3 每次消去数组中两个不同的数,最后剩下的肯定为要找的数字,时间复杂度O(N). 方法3代码1如下,以下是图解代码1 代码实现: //代码1#include <stdio.h> int Find(int* ID, int N); int ma

现代软件工程作业第十二题(原十四题)

12. 开发软件有很多种方式,从软件运行的平台来看,可以在下面的平台运行: 网页 (只要有浏览器就可以访问软件或服务) Windows 平台 (例如最新的Windows 10 支持 PC,Surface,Mobile,甚至Xbox 运行) 安卓平台 iOS 平台 (Mac 和 iPhone) 请找一个同学结对 (参看本书结对编程的内容),两人共同工作 (不能分开干活),从上面的列表中选取两个平台,在每个平台上,写一个最简单的 "Hello World" 类型的程序,把写程序的经历写成博

leetcode 刷题之路 78 Binary Tree Postorder Traversal

Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [3,2,1]. Note: Recursive solution is trivial, could you do it iteratively? 非递归方式实现二叉树的后序遍历. 思路:使用栈辅助实现,首先将根节点入栈,然后以栈是否为

leetcode 刷题之路 83 Maximum Subarray

Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [?2,1,?3,4,?1,2,1,?5,4], the contiguous subarray [4,?1,2,1] has the largest sum = 6. 输入一个整形数组,数组里有正数也有负数,求所有子数组的和的最大