首页 > 试题广场 >

找出重复数最多

[编程题]找出重复数最多
  • 热度指数:621 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
一个数量为N的整数数组,其中有很多重复,其中一个数字出现次数超过N/2,请将该数字找出来。

输入描述:
输入包含两行:
第一行有两个整数n(1 ≤ n ≤ 100000),表示数组数字个数n
第二行为n个整数,范围均在32位整数,以空格分隔,保证输入数据合法


输出描述:
输出出现次数最多的那个数
示例1

输入

7 3 2 3 3 1 3 12

输出

3
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/**
 * Created by 15040 on 2017/10/21.
 * 找出数组中出现最多的数
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int []a=new int [n];
        Map<Integer,Integer> map=new HashMap<>();
        for (int i=0;i<n;i++){
            a[i]=sc.nextInt();
            if (map.containsKey(a[i])){
                map.put(a[i],map.get(a[i])+1);
            }else {
                map.put(a[i],1);
            }
        }
        int temp=Integer.MIN_VALUE;
        int result=temp;
        for(Map.Entry<Integer,Integer> i:map.entrySet()){
            if(i.getValue()>temp){
                result =i.getKey();
                temp=i.getValue();
            }
        }
        System.out.println(result);
    }
}

发表于 2017-10-21 10:57:40 回复(0)
#include<stdio.h>
int main(){
    int x,i,times=0,card,n,cnt=0;
    for(scanf("%d",&n),i=0;i<n;i++){
        scanf("%d",&x);
        if(!times) card=x,times=1;
        else if(x-card) times--;
        else times++;
    }
    printf("%d\n",card);
}

编辑于 2017-10-21 16:47:21 回复(1)
import java.util.*;
public class Main{
    public static int findNumber(int[] nums){
        if(nums==null||nums.length==0){
            return 0;
        }
        int N=nums.length;
        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int num:nums){
            map.put(num,map.getOrDefault(num,0)+1);
        }
        for(int cur:nums){
            if(map.get(cur)>N/2){
                return cur;
            }
        }
        return 0;
    }
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        String[] str=new String[n];
        int[] num=new int[n];
        for(int i=0;i<n;i++){
            str[i]=sc.next();
        }
        for(int i=0;i<n;i++){
            num[i]=Integer.parseInt(str[i]);
        }
        Main main=new Main();
        System.out.println(main.findNumber(num));
    }
}
发表于 2020-02-27 22:31:07 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    int x;
    int n;
    cin>>n;
    int temp,times=0;
    vector<int> num;
    while(cin>>x)
        num.push_back(x);
    
    for(int i=0;i<num.size();i++)
    {
        if(times==0)//重新初始化temp
        {
            temp=num[i];
            times=1;
        }
        else
        {
            if(num[i]!=temp)
                times--;
            else
                times++;
        }
        
    }
    cout<<temp;
    return 0;
    
}

编辑于 2020-02-15 22:21:11 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] a=new int[n];
        for(int i=0;i<n;i++)
            a[i]=sc.nextInt();
        int x=0,times=0;
        for(int i=0;i<n;i++){
            if(times==0){
                x=a[i];
                times=1;
            }else{
                if(x==a[i])
                    times++;
                else times--;
            }
        }
        System.out.println(x);
    }
}

发表于 2019-10-05 08:43:06 回复(0)
def f(s):
    d={}
    n=len(s)
    for i in s:
        if i in d:
            d[i]+=1
        else:
            d[i]=1
    for i in d.keys():
        if d[i]>= n//2:
            return int(i)
    return 0


if __name__=="__main__":
    k=int(input())
    s=list(input().strip().split(" "))
    print(f(s))

发表于 2019-09-12 14:51:40 回复(0)