牛客网在线编程:n个数中出现次数大于等于n/2的数

Posted zlz099

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客网在线编程:n个数中出现次数大于等于n/2的数相关的知识,希望对你有一定的参考价值。

题目描述:

输入n个整数,输出出现次数大于等于数组长度一半的数。
输入描述:
每个测试输入包含 n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
输出描述:
输出出现次数大于等于n/2的数。
示例1
输入

3 9 3 2 5 6 7 3 2 3 3 3
输出

3

思路:

每次输入,使用数组a[n]记录n出现的次数,num记录总数。然后判断a[i]是否大于等于num/2。是的话返回i即可
剑指offer上的思路是保存两个值,当接下来出现的下一个数与前一个数相同时,计数加一,否则减一。当计数为0时,保存下一个数字,并把计数记为1.由于
要找的数出现的次数比其他数的和还要多,所有要找的数就是最后一次把数设为1的那个数字。

 1 import java.util.*;
 2 public class Chuxiancishu {
 3 
 4     public static void main(String[] args) {
 5         // TODO Auto-generated method stub
 6 //        Scanner sc = new Scanner(System.in);
 7 //        int[] a = new int[100];
 8 //        int num = 0;
 9 //        while(sc.hasNext()){
10 //            int n = sc.nextInt();
11 //            a[n]++;
12 //            num++;
13 //        }
14 //        for(int i = 0; i < num; i++){
15 //            if(a[i]>=(num/2)){
16 //                System.out.println(i);
17 //            }
18 //        }
19 
20     Scanner sc = new Scanner(System.in);
21     int[] a = new int[100];
22     int i =0;
23     
24     while(sc.hasNext()){
25         a[i]=sc.nextInt();
26         i++;
27     }
28     int count = 0;
29     int num = a[0];
30     for(int j = 0; j < i;j++){
31         //System.out.println(a[j]);
32         if(a[j]==num) count++;
33         else if(count>0) count--; 
34         else num =a[j];
35     }
36     System.out.println(num);
37     }
38 
39 }

 

以上是关于牛客网在线编程:n个数中出现次数大于等于n/2的数的主要内容,如果未能解决你的问题,请参考以下文章

牛客网上的java编程题,自己电脑运行没问题,但是在牛客网上运行失败,不知道原因在哪里

牛客网在线编程:分苹果

牛客网 珂朵莉与宇宙(思维)

给你一个长度为 n 的数组,其中只有一个数字出现了大于等于 n/2 次,问如何使用优秀的 时空复杂度快速找到这个数字。

编程题#3:整数的个数

LeetCode-169找出数组中出现次数大于? n/2 ?次的数