2 andrew9991 andrew9991 于 2016.05.03 20:47 提问

输出array中出现次数最多的数

用类似这种的方法 不用Map

int[] a = new int[10]{1,2,3,4,5,6,7,7,7,7};

public int getPopularElement(int[] a)
{
int count = 1, tempCount;
int popular = a[0];
int temp = 0;
for (int i = 0; i < (a.length - 1); i++)
{
temp = a[i];
tempCount = 0;
for (int j = 1; j < a.length; j++)
{
if (temp == a[j])
tempCount++;
}
if (tempCount > count)
{
popular = temp;
count = tempCount;
}
}
return popular;
}

我想让this.method = 那个出现次数最多的数字 如果所有数都只出现一次的话就this.method = -1
或者出现次数相同的话也是this.method = -1 。
我照着上面的方法写的没法判断每个数只出现一次的情况 还有出现次数相同的情况
求帮忙看看怎么写

public Long getMode() {

    Vector vector = cloned();
    long [] num = vector.getElements();


    // 要写的地方


    return this.method;
    }

4个回答

havedream_one
havedream_one   2016.05.04 09:37
已采纳
 public static int getPopularElement(int[] a)
{
    if(a.length < 2){
        return a[0];
    }
    int[] t = new int[a.length];//记录每一个元素出现的次数
    int popular = -1;
    for (int i = 0; i < a.length; i++)
    {
        int temp = a[i];
        int count = 1;
        for (int j = 0; j < a.length; j++)
        {
            if(j == i){ 
                continue;
            }
            if (temp == a[j])
                count++;
        }
        t[i] = count;
    }
    //System.out.println(Arrays.toString(t));
    int first = t[0] > t[1] ? t[0] : t[1];
    int pos = t[0] > t[1] ? 0 : 1;
    int second = t[0] < t[1] ? t[0] : t[1];
    for(int i = 2; i < t.length; i++){
        if(t[i] >= first){
            first = t[i];
            pos = i;
            continue;
        }
        if(t[i] >= second){
            second = t[i];
        }
    }
    //System.out.println(first + "," + second);
    if(first == second ){
        return -1;
    }else{
        return a[pos];
    }
}
havedream_one
havedream_one 定义first表示数组中的最大值,second表示数组中的第二最大,最后比较first和second是否一样,一样表示有数据出现相同次数
大约 2 年之前 回复
andrew9991
andrew9991 那个为什么如果一组数都一样的时候会返回-1呢 比如一组全是4
大约 2 年之前 回复
CSDNXIAOD
CSDNXIAOD   2016.05.03 20:52

找出出现次数最多的数
出现次数最多的数
出现次数最多的数C++
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

ChaoBaby94
ChaoBaby94   2016.05.03 22:02

一个数组的长度为n,出现次数的和为n,不同的元素的个数为m,最大出现次数为a。出现次数最小,而没有2个或以上最大出现次数的情况:(m-1)*(a-1)+a=n ;
a = (n-1)/m + 1;
如果a为小数应该下取整。。所以上面代码需要记录不同元素的个数m。
count表示某元素的出现次数,且这个元素出现字数最大。
只要count=a说明最大的出现次数肯定不同。
如何获取不同元素的个数m?
你的代码有如果出现一次相同tempCount++,如果循环完后tempCount等于初始值(没试过代码,但我觉得是从1开始,如果有相同就已经是2了),m++;

我是为了C币来的-_,-

ChaoBaby94
ChaoBaby94 这问答的代码,用了小于大于号,提提变成蓝色字的。结论:count大于等于a说明最大次数肯定不同,count小于a表示最大次数肯定相同
大约 2 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.05.03 21:44

用一个数组 下标就是当前数据 然后数据来了就累加 最后查看各个数组元素的值

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
找到出现次数最多的数并输出次数
找到出现次数最多的数并输出次数 1.输入n 表示输入数字的个数 2.接下来输入n 个数 数之间分割用逗号分割 要求是找出这n个数中出现最多次数的数,和出现的次数 #include "stdio.h" #include "malloc.h" /* 1.C语言没有C++的动态数组,有事可以用动态数组代替 2.在括号中不要复制(int i=0),这要在cpp文件中能编译过,但是
统计数组中出现次数最多的元素并输出
实验过程中遇到一个实际问题:需要统计出10次计数的值中出现最多的一个数,比如输入34 35 35 35 34 35 35 35 34 33 十个数,要求最终输出35.如果出现两个数同样多,则输出两个元素中较小的那一个(也可以是较大的那一个,但是必须确定是其中一种)。 代码中采用5个元素以简化: #include int main() { int n = 5; int a[5] ={31,
CCF201312-1 出现次数最多的数(100分)
试题编号:201312-1试题名称:出现次数最多的数时间限制:1.0s内存限制:256.0MB问题描述:问题描述  给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。输入格式  输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。  输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相...
CCF 201312-1出现次数最多的数
一.问题描述   给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式   输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。   输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。 输出格式   输出这n个次数中出现次数最多的数。如果这样的数
numpy 统计数组每一行出现次数最多的数字
使用np.bincount()和np.argmax()函数来实现。 np.bincount()可以把数组中出现的每个数字,当做index,数字出现的次数当做value来表示。 np.argmax()可以返回数组中最大值的index。 所以经过变换,可以得到出现次数的最大值。
给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
ccf认证考试2013年12月第一题 问题描述   给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。 输入格式   输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。   输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。 输
输入10个数,找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出)
输入10个数,找出出现次数最多的数 (如果多个并列,则按数字出现顺序分别输出) 比如: 输入:1 2 2 3 4 5 6 7 8 9 输出:2 算法: (1) 利用双层循环, 每一个元素都与后面一个元素比较, 如果两者相同, 则该元素次数+1, (2) 以上的算法中两个相同的元素的次数是一样的, 优化如下, 比较两个元素
出现次数最多的数(java),ccf考试模拟题
import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int a[] = new int[n];
C语言寻找出现次数最多的数字
/*不使用列表,而是直接用整型数组进行操作,速度最快,不进行删除,而是将当前位置的数据设置为尾部的数据,等同于数据交换,将不再用的数据移动到尾部就行了,数组的速度比列表要快太多了,*/int _tmain(int argc, _TCHAR* argv[]) { int list[]={1,2,3,4,4,3,2,1,1,2}; int length =sizeof(list)/si
数组中出现次数最多的K个数
前几天面试Google,已挂。今天仔细思考了面试中一道没写出来的题,发现也并不难。诶,只能怪当时脑抽了。题目大意给定一个巨大的无序数组,输出数组中出现次数最多的K个数。比如:(为了方便看,暂且排了序)1,1,1,2,2,3,4,5,6,7,7,7,8,8,8,8 输出:8,7,1 (顺序无关紧要) 解决方法Step 1. 用哈希表统计出各个元素出现次数 - count()Step 2. 用容量为K的