編程演算法 - 數組中出現次數超過一半的數字 代碼(C)

來源:互聯網
上載者:User

標籤:mystra   編程演算法   數組超過一半   代碼   c   

數組中出現次數超過一半的數字 代碼(C)


本文地址: http://blog.csdn.net/caroline_wendy


題目: 數組中有一個數字出現的次數超過數組長度的一半, 請找出這個數字.


1. 使用快速排序(QuickSort)的方法, 把中值(middle)和索引(index)匹配, 輸出中值, 並檢測是否符合要求.

2. 使用計數方法依次比較.


代碼: 

方法1:

/* * main.cpp * *  Created on: 2014.6.12 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <stdio.h>#include <stdlib.h>int RandomInRange(int min, int max){    int random = rand() % (max - min + 1) + min;    return random;}void Swap(int* num1, int* num2){    int temp = *num1;    *num1 = *num2;    *num2 = temp;}int Partition(int data[], int length, int start, int end){    if(data == NULL || length <= 0 || start < 0 || end >= length) {    return -1;    }    int index = RandomInRange(start, end);    Swap(&data[index], &data[end]);    int small = start - 1;    for(index = start; index < end; ++ index)    {        if(data[index] < data[end])        {            ++ small;            if(small != index)                Swap(&data[index], &data[small]);        }    }    ++ small;    Swap(&data[small], &data[end]);    return small;}bool CheckMoreThanHalf (int* numbers, int length, int number){int times = 0;for (int i=0; i<length; ++i) {if (numbers[i] == number)++times;}if (times*2 <= length) {return false;}return true;}int MoreThanHalfNum(int* numbers, int length) {if (numbers == NULL || length <= 0)return 0;int middle = length >> 1;int start = 0;int end = length-1;int index = Partition(numbers, length, start, end);while (index != middle) {if (index > middle) { //前面部分的數字多end = index-1;index = Partition(numbers, length, start, end);} else {start = index+1;index = Partition(numbers, length, index+1, start);}}int result = numbers[middle];if (!CheckMoreThanHalf(numbers, length, result))return 0;return result;}int main(void){    int str[] =  {1, 2, 3, 4, 4, 4, 5, 4, 4};    int result = MoreThanHalfNum(str, 9);    printf("reuslt = %d\n", result);    return 0;}


方法2:

/* * main.cpp * *  Created on: 2014.6.12 *      Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <stdio.h>#include <stdlib.h>bool CheckMoreThanHalf (int* numbers, int length, int number) {int times = 0;for (int i=0; i<length; ++i) {if (numbers[i] == number)times++;}if (times*2 < length)return false;return true;}int MoreThanHalfNum (int* numbers, int length) {if (numbers == NULL || length <= 0)return 0;int result = numbers[0];int times = 1;for (int i=0; i<length; ++i) {if (times == 0) {result = numbers[i];times = 1;}if (numbers[i] == result) times++;else times--;}if (!CheckMoreThanHalf(numbers, length, result))return 0;return result;}int main(void){    int str[] =  {1, 2, 3, 2, 2, 2, 5, 2, 4};    int result = MoreThanHalfNum(str, 9);    printf("reuslt = %d\n", result);    return 0;}



輸出:

reuslt = 4






相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.