首页 > 试题广场 >

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

[问答题]
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。(注:不能使用本地IDE)
先将数组排序,取出下标为长度一半的数字,将其遍历并进行计数,如果计数的结果大于数组长度的一半,就返回该值,否则返回0

import java.util.*;
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
       java.util.Arrays.sort(array);
        int count = 0;
        for(int i =0;i<array.length;i++){
            if(array[i] == array[array.length/2])
            {count++;}     
        }
         if(count>array.length/2){
                return array[array.length/2];
            }
                return 0;
    }
}
发表于 2018-07-30 22:20:30 回复(7)
int MoreThanHalfNum_Solution(vector<int> numbers) 
{
	map<int, int>M;
	for (int i = 0; i < numbers.size(); i++)
	{
		M[numbers[i]]++;
	}
	for (int i = 0; i < M.size(); i++)
	{
		if (M[numbers[i]]>(numbers.size() / 2))
		{
			return numbers[i];
		}
	}
	return 0;
}

发表于 2020-04-18 10:47:02 回复(0)
#include<iostream>
using namespace std;
 
 int find(int array[],int len);
 
 int main()
 {
  int arr[9]={1,2,3,2,2,2,5,4,2};
  int result=find(arr,5);
  cout<<result<<endl;
 }
 int find(int array[],int len)
 {
  if(array==NULL)
   return -1;
  
 int count=0;
 int res;
  for(int i=0;i<len;i++)
  {
   if(count==0)
   {
    res=array[i];
    count=1;
   }
    
   else if(array[i]==res)
    count++;
   else
    count--;
  }
  return res;
 }
发表于 2019-05-28 15:49:52 回复(0)