zoukankan      html  css  js  c++  java
  • 80. 中位数

    给定一个未排序的整数数组,找到其中位数。

    中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。

    样例

    给出数组[4, 5, 1, 2, 3], 返回 3

    给出数组[7, 9, 4, 5],返回 5

    挑战 

    时间复杂度为O(n)

    这道题难易度定为简单是建立在“直接排序然后取中位数”的基础上的,这个解法很无脑,确实没什么好说的

    你甚至不用自己实现快排,绝大多数语言都有自己的排序方法

    所以问题就在于怎样在O(n)内解出来

    首先就应该想到用空间换时间,这已经不算是思路而是套路了

    用什么数据结构?hash_map

    key就是数,value就是这个数出现的次数

    这个可以通过一次遍历来构建这个map。同时在遍历的时候我们可以得到数组中的最大最小值

    现在我们有所有数出现的次数,有最大最小值,那么就可以在最大最小值的范围内遍历map,获得中位数

    int median(vector<int> &nums) {
            // write your code here
            map<int, int> record;
            int num_max=nums[0], num_min=nums[0];
            for(int num:nums){
                record[num]++;
                num_max=max(num_max, num);
                num_min=min(num_min, num);
            }
            int mid=(nums.size()%2)?nums.size()/2+1:nums.size()/2;
            for(int i=num_min;i<=num_max;i++){
                while(record[i]>0){
                    record[i]--;
                    mid--;
                    if(mid==0){
                        return i;
                    }
                }
            }
        }
  • 相关阅读:
    Vue.js的组件化思想--下
    Vue.js的组件化思想--上
    Git常用命令总结
    vue基础语法
    ES6基础语法
    Vue笔记
    Vue的基本使用(一)
    es6的基本用法
    Django-admin管理工具
    Django组件-中间件
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8313564.html
Copyright © 2011-2022 走看看