zoukankan      html  css  js  c++  java
  • 剑指offer 面试题64 数据流的中位数

    struct cmp
    {
    	bool operator()(double a, double b)
    	{
    		return a > b;
    	}
    };
    class Solution {
    public:
       void Insert(int num)
    {
    	if (((maxHeap.size() + minHeap.size()) & 1 )== 0)//如果是偶数,插入到最大堆里面
    	{
    		if (minHeap.size()>0&&num > minHeap.top())
    		{
    			int numtmp = minHeap.top();
    			minHeap.pop();
    			minHeap.push(num);
    			num = numtmp;
    		}
    		maxHeap.push(num);
    	}
    	else
    	{
    		if (maxHeap.size()>0&&num < maxHeap.top())
    		{
    			int numtmp = maxHeap.top();
    			maxHeap.pop();
    			maxHeap.push(num);
    			num = numtmp;
    		}
    		minHeap.push(num);
    	}
    }
    
    double GetMedian()
    {
    	if (((maxHeap.size() + minHeap.size()) & 1) == 0)//如果是偶数
    	{
    		if (maxHeap.size() + minHeap.size() == 0) return 0;
    		return (minHeap.top() + maxHeap.top()) / 2;
    	}
    	else
    	{
    		return maxHeap.size() > minHeap.size() ? maxHeap.top() : minHeap.top();
    	}
    }
    
    private :
        priority_queue<double> maxHeap;
    	priority_queue<double,vector<double>,cmp> minHeap;
    };
    

      数组中出现次数超过一半的数

    class Solution {
    public:
        int MoreThanHalfNum_Solution(vector<int> numbers) {
        	if(numbers.size()==0) return 0;
            int pre=numbers[0];
            int cnt=1;
            for(int i=1;i<numbers.size();i++)
            {
                if(cnt==0)
                {
                    pre=numbers[i];
                    cnt=1;
                }
                else if(numbers[i]==pre)
                {
                    cnt++;
                }
                else
                {
                    cnt--;
                }
            }
            cnt=0;
            for(int i=0;i<numbers.size();i++)
            {
                if(numbers[i]==pre)
                    cnt++;
            }
            if(cnt>(numbers.size())/2)
                return pre;
            else return 0;
        }
    };
    

      

  • 相关阅读:
    hdu 2647 Reward
    hdu 2094 产生冠军
    hdu 3342 Legal or Not
    hdu 1285 确定比赛名次
    hdu 3006 The Number of set
    hdu 1429 胜利大逃亡(续)
    UVA 146 ID Codes
    UVA 131 The Psychic Poker Player
    洛谷 P2491消防 解题报告
    洛谷 P2587 [ZJOI2008]泡泡堂 解题报告
  • 原文地址:https://www.cnblogs.com/wuxiangli/p/6094056.html
Copyright © 2011-2022 走看看