Мне нужно написать код, чтобы найти элемент в целочисленном массиве, который повторяется ровно " k " раз, но мой код не работает для огромного массива
Это точный вопрос от GeeksForGeeks.com
Цитата:Задан массив из n целых чисел. Задача состоит в том, чтобы найти первый элемент, который встречается k раз. Если ни один элемент не встречается k раз, то выводится -1. Распределение целых элементов может быть в любом диапазоне.
Примечание:
Цитата:Первая строка входных данных содержит целое число T, обозначающее количество тестовых случаев. Затем следуют T тестовых случаев. Первая строка каждого теста содержит целое число N, обозначающее размер массива, и число K. Вторая строка каждого теста содержит N целых чисел, разделенных пробелами, обозначающих элементы массива A[ ].
Что я уже пробовал:
Это мой код. Он не дает правильного вывода, когда размер массива равен 9383 и k = 6. Тогда он просто возвращает 0. Я хотел бы, чтобы вы помогли мне понять, где я, возможно, ошибся.
int FindRepeatedElement(vector<int>& nums, int k) { sort(nums.begin(), nums.end()); int count = 1, marked = 0; for (int i = 0; i < nums.size(); i++) // Here is a comparison { if (nums[i + 1] == nums[marked]) // Here is a comparison { count++; if (count == k) // Here is a comparison return nums[marked]; } else { marked = i + 1; count = 1; } } return -1; } int main() { int t, n, k; cin >> t; while (t--) { cin >> n; cin >> k; vector<int> nums(n, 0); for (int i = 0; i < n; i++) { cin >> nums[i]; } cout << FindRepeatedElement(nums, k) << endl; } system("pause"); return 0; }
0x01AA
Не то, что связано с вашей проблемой, но в любом случае проблема в вашем коде.
Существует вероятность того, что " индекс выйдет за пределы диапазона":for (int i = 0; i < nums.size(); i++)
{
if (nums[i + 1] == nums[marked])