zoukankan      html  css  js  c++  java
  • Microsoft中位数

    #pragma once
    #include<vector>
    #include<list>
    class Solution
    {
    public:
        Solution() :members(NULL) {};
        std::vector<double> flowmedian(std::vector<std::vector<int> >& operations);
        void BinaryTree(int left,int right, int num);
        std::vector<int> members;
    };
    
    
    #include "Solution.h"
    
    std::vector<double> Solution::flowmedian(std::vector<std::vector<int>>& oper)
    {
        std::vector<double> retVec;
        for (auto member : oper)
        {
            if (member.size() == 1)
            {
                if (member.front() == 2 && members.size() > 0)
                {
                    double median = 0;
                    if (members.size() & 0x01 == 1)
                        retVec.push_back(members[members.size() >> 2]);
                    else {
                        median = static_cast<double>(members[members.size() >> 2] + members[members.size() >> 2 - 1]) / 2;
                        retVec.push_back(median);
                    }
                }
                else
                    retVec.push_back(-1);
            }
            if (member.size() == 2)
            {
                BinaryTree(0, members.size() - 1, member[1]);
            }
        }
        return retVec;
    
    }
    
    void Solution::BinaryTree(int left, int right ,int num)
    {
        auto it = members.begin();
        if (members.size() == 0)
        {
            members.insert(it, num);
            return;
        }
        if(left > right)
            return;
        
        if (left == right)
        {            
            if (num > members[left])
                members.insert(it + left + 1, num);
            else
                members.insert(it + left, num);
        }
        
        if (left < right)
        {
            if (num < members[(left + right) / 2])
            {
                BinaryTree(left, (left + right) / 2,num);
            }
            else if (num > members[(left + right) / 2])
            {
                BinaryTree((left + right) / 2+1, right, num);
    
            }
            else {
                members.insert(it + (left + right) / 2, num);
            }
        }
        
    }
    
    // ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <iostream>
    #include "Solution.h"
    int main()
    {
        int arr[10] = { 7,3,9,8,7,4,2,9,8,1 };
        Solution so;
        int siz = sizeof(arr)/sizeof(int);
        for (int i=0; i<siz;i++)
        {
            so.BinaryTree(0, i-1, arr[i]);
        }
       
        std::cout << "Hello World!
    ";
    }

    描述(考察的是堆排序)用堆排序再实现一下

    有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。
    [要求]
    1. 如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)。
    2. 取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1)
     
    每行有一个整数
  • 相关阅读:
    jsonp与promise封装
    屏幕自适应问题与tab状态更新数据问题
    插槽问题
    如何封装一个组件
    在url中带参数
    vuex中mapGetters,mapActions
    eventBus 与 this.$emit
    4.24上交作业
    4.23作业
    4.17作业
  • 原文地址:https://www.cnblogs.com/hitzzq/p/14900143.html
Copyright © 2011-2022 走看看