C++ 在数组C+中出现K次+;

C++ 在数组C+中出现K次+;,c++,algorithm,C++,Algorithm,所以我有一个算法,假设返回一个数组中出现K次的int。如果K次出现超过1 int,则应返回更高的值。我下面的算法工作不正常。在下面的示例中,当它应该返回5时,它返回1 #include <iostream> #include <algorithm> int appearsKTimes (int size, int inputArray[], int k) { std::sort(inputArray, inputArray + size); int i

所以我有一个算法,假设返回一个数组中出现K次的int。如果K次出现超过1 int,则应返回更高的值。我下面的算法工作不正常。在下面的示例中,当它应该返回5时,它返回1

#include <iostream>
#include <algorithm>

int appearsKTimes (int size, int inputArray[], int k) {

    std::sort(inputArray, inputArray + size);
    int i = 1, count = 1;
    int element = inputArray[0];
    int res = -1;
    while (i < size) {
        if (element == inputArray[i]) {
            count++;
        } else {
            if (count == k) {
                res = element;
            }

            element = inputArray[i];
            count = 1;
        }
        i++;
    }
    std::cout << res << std::endl;
    return res;
}

int main() { 

    const int size = 7;
    int array[size] = {1, 1, 2, 2, 2, 5, 5};
    int occurences = 2;

    appearsKTimes(size, array, occurences);
}
#包括
#包括
int-appearsKTimes(int-size,int-inputArray[],int-k){
std::sort(输入阵列、输入阵列+大小);
int i=1,count=1;
int元素=输入阵列[0];
int res=-1;
而(iif(计数=k){
res=元素;
}
标准::cout
if(计数=k){
res=元素;
}

STD::P>你的排序方法是好的,只需要O(nLogn)的时间复杂度,但也要考虑另一个哈希表,它需要O(n)在时间上和O(n)在空间上,它是短的,并且只有很少的额外变量,所以出错的机会更少:

1) 使用无序_映射(哈希表)计算数字频率:O(N)

2) 查找恰好出现k次的最大数:O(N)

int-appearsKTimes(int-size,int-inputArray[],int-k){
无序地图频率;
对于(int i=0;i你的排序方法很好,只需要O(nLogn)的时间复杂度,但是也考虑了另一个哈希表,它需要O(n)和O(n)空间,它比较短,而且只有几个额外的变量,所以出错的机会更少:

1) 使用无序_映射(哈希表)计算数字频率:O(N)

2) 查找恰好出现k次的最大数:O(N)

int-appearsKTimes(int-size,int-inputArray[],int-k){
无序地图频率;
对于(int i=0;i
当您遇到不等于某个值的元素时,您只接受某个值的运行。但运行5秒发生在最后,之后没有其他元素。您需要考虑这种情况。当您遇到不等于该值的元素时,您只接受某个值的运行。但运行5秒发生在最后,有之后没有更多的元素。您需要考虑这种情况。那么,这段代码就需要更改吗?是的,因为您没有检查while循环后的计数,这也是一个可能的答案。所以您需要检查它。那么,这段代码就需要更改吗?是的,因为您没有检查while循环后的计数,这也是ca可能是一个答案,所以你需要检查一下。
int appearsKTimes (int size, int inputArray[], int k) {

    unordered_map<int, int> freqs;
    for (int i = 0; i < size; i++) {
        freqs[inputArray[i]]++;
    }

    int res = - 1;
    for (int i = 0; i < size; i++) {
        if (freqs[inputArray[i]] == k)
            res = max(res, inputArray[i]);
    }

    return res;
}