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;
                    }
                }
            }
        }
  • 相关阅读:
    kali linux之wireshark/tcpdump
    kali linux之netcat
    kali 插耳机没声音
    php代码审计10审计会话认证漏洞
    php代码审计9审计反序列化漏洞
    php代码审计8审计文件上传漏洞
    Python opencv 形态学
    图像与轮廓检测-轮廓检测
    Python操作Excel,openpyxl模块,画折线图
    Pthon强制删除非空文件夹
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8313564.html
Copyright © 2011-2022 走看看