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 ... 
随机推荐
- hibernate框架学习笔记12:查询优化
			类级别查询优化: 创建一个实体类: package domain; import java.util.HashSet; import java.util.Set; //客户实体 public clas ... 
- 201621123068 Week04-面向对象设计与继承
			1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:继承.多态.重载.关键字.父类与子类 1.2 尝试使用思维导图将这些关键词组织起来. 2. 书面作业 1. 面向对象设计(大 ... 
- python 判断变量是否是 None 的三种写法
			代码中经常会有变量是否为None的判断,有三种主要的写法:第一种是`if x is None`:第二种是 `if not x:`:第三种是`if not x is None`(这句这样理解更清晰`if ... 
- 容器化的 DevOps 工作流
			对于 devops 来说,容器技术绝对是我们笑傲江湖的法宝.本文通过一个小 demo 来介绍如何使用容器技术来改进我们的 devops 工作流. devops 的日常工作中难免会有一些繁琐的重复性劳动 ... 
- 阿里云API网关(5)用户指南(调用 API)
			网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ... 
- 使用 Angular CLI 和 Webpack 分析包尺寸
			使用 Angular CLI 和 Webpack 分析包尺寸 对于 Web app 来说,高性能总是最高优先级,对于 Angular 也不例外.但是随着应用复杂度的不断增长,我们如何才能知道哪些内容打 ... 
- jprofiler配置
			cataline.sh JAVA_OPTS="$JAVA_OPTS -agentlib:jprofilerti=port=8849"JAVA_OPTS="$JAVA_OP ... 
- GNU/Linux需要特别注意的目录
			/bin 存放大多数系统命令,如cat.mkdir.mv.cp.tar.chmod等 /boot 存放开机所需要的文件,开机时载入开机管理程序(bootloader),并映 ... 
- SpringBoot(一):使用eclipse/idea创建springboot helloword工程
			eclipse如何创建spring boot工程: 第一步:首先打开eclipse,找到图中的下图的中“下三角”符号,选中"working sets"(表示将会把eclipse中的 ... 
- 【转】python3 urllib.request 网络请求操作
			python3 urllib.request 网络请求操作 基本的网络请求示例 ''' Created on 2014年4月22日 @author: dev.keke@gmail.com ''' im ... 
