劍指offer-數組中出現次數超過一半的數字

題目類型

數組

題目描述

數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。

code

  • 用c++ count函數統計次數
class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        int n=numbers.size();
        for(int i=0; i<n; i++){
            if(count(numbers.begin(),numbers.end(),numbers[i])>n/2)
                return numbers[i];
        }
        return 0;
    }
};
運行時間:3ms
佔用內存:608k
  • 用sort然後取中位數:因爲某數個數佔到總數一半以上,則中央的數字一定是該數;否則無滿足條件的數字,返回0
class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        sort(numbers.begin(),numbers.end());
        int n=numbers.size();
        int mid=numbers[n/2];//取中位數
        int count=0;
        for(int i=0; i<n; i++){
            if(numbers[i]==mid)
                count++;
        }
        if(count>n/2)
            return mid;
        else 
            return 0;
    }
};
運行時間:3ms
佔用內存:616k
  • 排序然後計數
class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        sort(numbers.begin(), numbers.end());
        int n=numbers.size();
        int num=numbers[0], count=1;
        if(n==1)
            return num;
        for(int i=1; i<n; i++){
            if(numbers[i]==num){
                count++;
                if(count>n/2)
                    return num;
            }
            else{
                num=numbers[i];
                count=1;
            }
        }
        return 0;
    }
};
運行時間:3ms
佔用內存:484k
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章