C中数组中第二个最少出现的元素

时间:2016-03-21 21:12:41

标签: c arrays element

我目前正在开发一个项目,并且我需要确定C数组中第二个最少出现的元素。在任何情况下,数组中的最大元素数将为100.我已经编写了一个函数来查找发生率最低的元素:

int minRepeat(int arr[], int i){
    int j = 0;
    int l = 0;
    int minimum = 100;
    int minNum = 0;
    for(j = 0; j < i; j++){
        int m = 0;
        for(l = 0; l < i; l++){
            if(arr[j] == arr[l]){
                m++;
            }
        }
        if(m < minimum){
            minimum = m;
            minNum = arr[j];
        }
    }
    return minNum;
}

arr []是输入的数组,int i是该数组的大小。

我正在尝试创建一个函数,它将在C数组中找到第二个最少出现的元素。该功能目前是:

int secMin(int arr[], int i){
    int j = 0;
    int l = 0;
    int minimum = 0;
    int minNum = 0;

    int q = 0;
    int k = minRepeat(arr, i);
    for(q = 0; q < i; q++){
        if(arr[q] == k){
            minimum++;
        }
    }    

    int minimum2 = 100;
    for(j = 0; j < i; j++){
        int m = 0;
        for(l = 0; l < i; l++){
            if(arr[j] == arr[l]){
                m++;
            }
        }
        if(m < minimum2){
            if(m > minimum){
                minimum2 = m;
                minNum = arr[j];
            }
        }
    }
    return minNum;
}

我正在调用第一个找到最少元素的函数。循环查看该元素在数组中出现的次数,然后与第一个函数执行相同的操作以查找最少的元素,但将其与最后的第一个最小元素进行比较以确保此元素是第二个发生率最低。

当arr [] = {1,1,1,2,2,3,2,2,4,1}时 我得到的最小数字是3,第二个最小的数字是1。 有时,该功能可以与其他输入一起使用,有时则不会,例如上面的情况。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

稍微调整您的第一个示例以存储第二个最小元素:

if(m < minimum){
    secondminimum = minimum; 
    secondminNum = minNum
    minimum = m;
    minNum = arr[j];

}

编辑:我刚刚意识到只有在最少和seconleast元素没有相同数量的外观时才会起作用,但你可以捕捉到这种情况。