大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > 数组中出现次数超过一半的数字

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


[摘要]本文主要是对数组中出现次数超过一半的数字的讲解,希望对大家学习数组中出现次数超过一半的数字有所帮助。

  题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

  例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.

  #include<STDIO.H>

  #include<IOSTREAM>

  void swap(int* a, int* b)

  {

  int nTemp = *a;

  *a = *b;

  *b = nTemp;

  }

  int partition(int* numbers, int start, int end)

  {

  int standard = numbers[end];

  int small = start - 1;

  for(int i = start; i<END;

  middle="length" int input!\n?);

  std::exception(?Invalid new throw <="0)" length || NULL if(numbers="=" 无效输入

  { length) numbers, moreThanHalfNumber(int*

  找排序后的中卫数,可以借鉴快速排序思想寻找中位数,复杂度为O(N)

  方法一 } small; return swap(&numbers[small],&numbers[end]);

  ++small; swap(&numbers[i],&numbers[small]);

  !="small)" if(i if(numbers[i]<standard) ++i)》 1;

  int start = 0;

  int end = length-1;

  int index = partition(numbers,start,end);

  while(index != middle)

  {

  if(index<MIDDLE) int input!\n?);

  std::exception(?Invalid new throw <="length)" length || NULL if(numbers="=" 无效输入

  { length) numbers, } return ++i) pre 0; test();

  main() printf(?%d\n?,moreThanHalfNumber2(numbers,length));

  numbers[length]="{1,2,3,2,2,2,5,4,2};" const test() void result;

  else 2 * if(times ++times; result)

  if(numbers[i]="=" i<length; i="0;" for(int times="0;" --times;

  result="numbers[middle];" 0)

  moreThanHalfNumber2(int* 复杂度为O(N) 次数设为1时对应的数字。

  次数比其他所有数字出现的次数之和还多,那么要找的数字肯定是最后一次把 为0,我们需要保存下一个数字,并把次数设为1.

  由于我们要找的数字出现的 次数加1;

  如果下一个数字和我们之前保存的数字不同,则次数减1.

  如果次数 遍历到下一个数字的时候,如果下一个数字和我们之前保存的数字相同,则、 遍历数组的时候保存两个值:一个是数组中的数字,一个是次数。

  方法2 index="partition(numbers,start,end);" end="index-1;" start="index+1;"><BR>



相关评论