Проверяет ли карта STL на карте? - PullRequest
0 голосов
/ 13 апреля 2020

Вопрос состоит в том, чтобы написать программу для поиска максимально длинной последовательности последовательных чисел, используя числа из данного массива.

Ограничение: Если две последовательности имеют одинаковую длину, возвращают последовательность, начинающуюся с число, вхождение которого в массиве ранее.

Мой лог 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...