Вопрос состоит в том, чтобы написать программу для поиска максимально длинной последовательности последовательных чисел, используя числа из данного массива.
Ограничение: Если две последовательности имеют одинаковую длину, возвращают последовательность, начинающуюся с число, вхождение которого в массиве ранее.
Мой лог c: я проверяю длину вперед по каждому индексу массива и просто обновляю значения start и max.
Проблема в том, что моя карта не содержит определенного ключа, но позже этот ключ каким-то образом присутствует на карте.
Тестовый пример 1 -> Ввод: 20 693 697 299 662 290 288 925 234 257 192 687 144 142 710 66 955 321 629 989 621
Ожидаемый результат: 693
Мой вывод: 288 289 290
Контрольный пример 2 -> Вход: 10 11 13 14 5 4 12 6 8 10 7
Ожидаемый и мой вывод: 4 5 6 7 8
Контрольный пример 2 работает нормально. Но в тестовом примере 1 289 каким-то образом вставляется в карту.
Если вы видите мой код, я попытался напечатать свою карту и проверить значение 289, которого раньше не было в моей карте. Но потом, каким-то образом это было вставлено в мою карту. Пожалуйста, помогите.
#include <vector>
#include<bits/stdc++.h>
using namespace std;
vector<int> longestConsecutiveIncreasingSequence(int *arr, int n)
{
map<int,bool>m;
int max=0;
int start=0;
for(int i=0;i<n;i++)
{
m[arr[i]]=true;
}
// if(m.find(289) != m.end()){
// cout << "YOOOOYOOYOYOYOY" << endl;
// }
// for(auto x : m){
// cout << x.first << " ";
// }
// cout << endl;
for(int i=0;i<n;i++)
{
int length=0;
if(m[arr[i]-1]==false)
{
int temp=arr[i];
// cout << "temp: " << temp << endl;
while(m.find(temp) != m.end())
{
// cout << "temp: " << temp << " was found" << endl;
// if(m.find(289) != m.end()){
// cout << "HOW?" << endl;
// }
length++;
temp++;
}
}
if(length>max)
{
max=length;
start=arr[i];
}
}
vector<int>v;
for(int i=0;i<max;i++)
{
v.push_back(start+i);
}
return v;
}
int main(){
int size;
cin >> size;
int* arr = new int[size];
for(int i = 0; i < size; i++){
cin >> arr[i];
}
vector<int> ans = longestConsecutiveIncreasingSequence(arr,size);
for (auto it = ans.cbegin(); it != ans.cend(); it++) {
cout << *it <<endl;
}
delete arr;
}