LeetCode题目----求中位数---标签:Array
题目难度---困难
题目要求:
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
思路:第一眼看到题目两个数组求中位数,看似很复杂,但是仔细一想,两个数组合在一块不久行了?然后合并后的数组给他排序,进而判断是奇数位数组还是偶数位数组
ok!代码奉上:
public static double findMedianSortedArrays(int[] nums1, int[] nums2) {
int[] result = new int[nums1.length + nums2.length];// 首先初始化合并数组的大小
List list = new LinkedList();// 建立新数组,目的是list集合插入方便
if (result.length == 0) {// 判断数组是否为空
return 0;
}
// 将两个数组中的值放入list集合中
for (int i : nums1) {
list.add(i);
}
for (int j : nums2) {
list.add(j);
}
// 这部很关键--因为后面遍历整个数组排序数组会因为这部操作而大大简化
for (int i = 0; i < list.size(); i++) {
result[i] = (Integer) list.get(i);// 很简单的将list集合的元素一个个遍历到result数组中
}
// 下面就是新数组及合并后的数组排序
for (int i = 0; i < result.length; i++) {
for (int j = i + 1; j < result.length; j++) {
if (result[i] >= result[j]) {
int temp = result[i];
result[i] = result[j];
result[j] = temp;
}
}
}
// -----------------这个地方就是判断数组的元素是奇数偶数,奇数取最中间的数就可以了,偶数就中间俩位取平均了
double answer = 0;
if (result.length % 2 == 1) {
int q = result.length / 2;
answer = result[q];
} else {
int p = result.length / 2;
for (int i = 0; i < result.length; i++) {
if (p - 1 == i) {
answer = result[i];
break;
}
}
answer = (answer + result[p]) / 2;
}
// 上边注意的地方:数组元素计算奇数偶数后取值时应注意遍历是从0开始,因此result.length/2的值要比遍历变量大1
return answer;
}

看似很完美是吧!但是!!!时间复杂度的要求O(log (m+n)) 。
因为题目难度属于“困难”,因此不会这么简单,在参考了好多人的答案后,慢慢理解了。
思路:
LeetCode题目----求中位数---标签:Array的更多相关文章
- leetcode题目4.寻找两个有序数组的中位数(困难)
题目描述: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 ...
- LeetCode 697. Degree of an Array (数组的度)
Given a non-empty array of non-negative integers nums, the degree of this array is defined as the ma ...
- LeetCode题目解答
LeetCode题目解答——Easy部分 Posted on 2014 年 11 月 3 日 by 四火 [Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复 ...
- POJ 2388 Who's in the Middle(水~奇数个数排序求中位数)
题目链接:http://poj.org/problem?id=2388 题目大意: 奇数个数排序求中位数 解题思路:看代码吧! AC Code: #include<stdio.h> #in ...
- LeetCode Two Sum II - Input array is sorted
原题链接在这里:https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/ 题目: Given an array of intege ...
- [Leetcode 216]求给定和的数集合 Combination Sum III
[题目] Find all possible combinations of k numbers that add up to a number n, given that only numbers ...
- [Leetcode 90]求含有重复数的子集 Subset II
[题目] Given a collection of integers that might contain duplicates, nums, return all possible subsets ...
- [Leetcode 78]求子集 Subset
[题目] Given a set of distinct integers, nums, return all possible subsets (the power set). Note: The ...
- LeetCode K-diff Pairs in an Array
原题链接在这里:https://leetcode.com/problems/k-diff-pairs-in-an-array/#/description 题目: Given an array of i ...
随机推荐
- 说一说Java的Unsafe类
最近在看Java并发包的源码,发现了神奇的Unsafe类,仔细研究了一下,在这里跟大家分享一下. Unsafe类是在sun.misc包下,不属于Java标准.但是很多Java的基础类库,包括一些被广泛 ...
- 201621123057 《Java程序设计》第1周学习总结
1.本周学习总结 .java - - 源程序 .class - - 字节码文件 JVM - - 虚拟机 JRE - - 执行环境 JDK - - 开发工具包 其中,运行的是.class,而非.java ...
- Flask 应用最佳实践
一个好的应用目录结构可以方便代码的管理和维护,一个好的应用管理维护方式也可以强化程序的可扩展性 应用目录结构 假定我们的应用主目录是"flask-demo",首先我们建议每个应用都 ...
- axios封装
前言 作为出入vue的小萌新,我在写请求的时候,也是毫不犹豫写了ajax,结果肯定是不行的... Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2. ...
- 关于APIcloud对应C#的 wcf框架作为后台,实现多库功能
首先,我是使用ajax原来的请求方式,并没有使用apicloud中封装的请求方式. 前端代码: function makeRequest() { //alert("inside makeRe ...
- 腾讯云服务器上安装phstudy和lnmp
phpstudy的安装:wget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin #权限设置./phpstudy.bin ...
- MSIL实用指南-生成接口
本篇讲解怎么样生成接口,即interface. 一.创建类型创建一个接口类型依旧用ModuleBuilder的DefineType方法,但是它的第二个参数必须要有TypeAttributes.Inte ...
- 利用封装、继承对Java代码进行优化
注:本文实例分别可以在oldcastle(未优化的代码)和newcastle(优化后的代码)中查看,网址见文末 城堡游戏: 城堡中有多个房间,用户通过输入north, south, east, wes ...
- FTP传输文件被破坏的问题(Linux、Busybox)
在网络设备上抓包后,通过FTP传输到本机,发现抓包文件破坏.更换tftp后文件正常,定位问题在FTP上. FTP的传输模式有两种:①ASCII ②二进制 ①ASCII: 以ASCII编码的方式传输文 ...
- js 开发注意事项
涉及api post 请求的, 涉及sqlite 存储的, conent 用encodeURIComponent, decodeURIComponent ,处理 JSON.parse 最好加上try ...