程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 數組中有一個數字出現的次數超過了數組長度的一半,找出這個數

數組中有一個數字出現的次數超過了數組長度的一半,找出這個數

編輯:關於C語言

這道題實際上不難,用很笨的方法也是能解答出來的,但是浪費了程序的時間和空間,從網上查到一種思路,覺得不錯。
        有個數字出現的次數超過了數組長度的一半,也就是,有個數字出現的次數比其他所有數字出現次數的和還要多。遍歷數組時保存連個值,一個是數組中的數字,一個是出現的次數,遍歷到一個數字時,如果該數字和之前保存的數字相同,則次數加一,如果該數字和之前保存的數字不同,則次數減一,如果次數為零,遍歷下一個數組元素,並把次數設為一。要找的數字肯定是最後一次把次數設為1時對應的數字。
 
#include   <iostream> 
using   namespace   std; 
bool g_bInputInvalid = false; 
int MoreThanHalfNum(int* numbers, unsigned int length) 

    if(numbers == NULL && length == 0) 
    { 
        g_bInputInvalid = true; 
        return 0; 
    } 
    g_bInputInvalid = false; 
    int result = numbers[0]; 
    int times = 1; 
    for(int i = 1; i < length; ++i) 
    { 
        if(times == 0) 
        {   result = numbers[i]; 
            times = 1; 
        } 
        else if(numbers[i] == result) 
            times++; 
        else
            times--; 
    } 
    // verify whether the input is valid 
    times = 0; 
    for( int i = 0; i < length; ++i) 
    { 
        if(numbers[i] == result) 
            times++; 
    } 
    if(times * 2 <= length) 
    { 
        g_bInputInvalid = true; 
        result = 0; 
    } 
    return result; 

void main() 

    int a[]={1,2,2,3,4,5,2,2,2}; 
    int re=MoreThanHalfNum(a,9); 
    cout<<re; 

作者“菜鳥變身記”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved