zoukankan      html  css  js  c++  java
  • 数据结构-数组中出现次数超过一半的数字

    题目:数字中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。

    分析:首先进行排序,因为大于一半,所以说经过排序之后的数组,如有次数大于的话说明那个数肯定是数组中间的那个数。

    /*
    剑指offer面试题29
    */
    #include <iostream>
    
    using namespace std;
    
    void QickSort(int *a,int n,int low,int high){
        int i=low;
        int j=high;
        int tmp = a[i];
    
        if(j <= i){
            return;
        }
    
        while(j !=  i){
            while(a[j] >= tmp && j > i){
                j--;
            }
            a[i] = a[j];
            while(a[i] <= tmp && j > i){
                i++;
            }
            a[j] = a[i];
        }
        a[i] = tmp;
    
        QickSort(a,n,low,i-1);
        QickSort(a,n,i+1,high);
    }
    
    int CountThanHalf(int* a,int n){
        if(a == NULL || n <= 0){
            return 0;
        }
    
        int low = 0;
        int high = n-1;
    
        QickSort(a,n,low,high);
    
        int count = 0;
        int tmp = a[n/2];
        for(int i=0;i<n;i++){
            if(a[i] == tmp){
                count++;
            }
        }
    
        if(count >= n/2){
            return tmp;
        }
        else{
            return 0;
        }
    }
    
    int main()
    {
        int a[] = {1,2,3,2,2,2,5,4,2};
        int n = sizeof(a)/sizeof(*a);
    
        int result = CountThanHalf(a,n);
    
        cout << result << endl;
    
        return 0;
    }
  • 相关阅读:
    计算机网络知识 第一部分
    LAMP环境安装
    Axure RP 交互设计
    Axure RP 界面功能
    Axure RP 界面功能介绍
    Axure RP 第一部分
    Grub管理修改root口令
    MYSQL 部分练习题
    工作日志示例
    计算机网络的分类
  • 原文地址:https://www.cnblogs.com/wn19910213/p/3751161.html
Copyright © 2011-2022 走看看