Array Search

Здравейте! Бих искал да попитам за помощта ви къде се намира грешката в задачата. Това е задача номер 10 от Alpha Preparation за масиви.
Условие :
Given an array of integers, some elements appear twice and others appear once. Each integer is in the range of [1, N] where N is the number of elements in the array.
Find all the integers of [1, N] inclusive that do NOT appear in this array.

Input 1,2,3,3,5

Output 4

Input 4,3,2,7,8,2,3,1

Output 5,6

Ето това е кода https://pastebin.com/gwLgf7yr. Програмата си работи във Visual Studio.

От това което забелязвам е че когато въведа gets() за прием на входни данни, проверката във цикъла винаги дава положителен резултат и по този начин масива missing се пълни като брояч (1,2,3,4…), вместо само когато if-а е false . Ако въведа в judge първите входни данни директно, т.е. [1,2,3,3,5], програмата правилно показва отговор 4. До сега пробвах и с други методи като indexOf и допълнителни функции, но резултата всеки път е един и същ. Моите подозрения са, че проблема идва с взимането на самите входни данни, обаче нямам си и идея какво мога да променя в това отношение. Много ще съм ви благодарен за помощта.

1 Like

Здравей!
Трябва да сравняваш цифри. По за дание е така. Ако if statemt е not true, тогава трябва да слагаш липсващия елемент в новия стринг.
Пробвай с тези неща.

Здрасти,

Грешката идва от includes() - търсиш в масив от стрингове - цифра. Можеш да го оправиш като още на този ред - let first = gets().split(",") промениш на let first = gets().split(",").map(Number); - по този начин масивът ще ти е само от числа и ще можеш да търсиш в него с includes() правилно. Също така реда с if-statement-a - if(first.includes(second)) трябва да е if(!first.includes(second)), тоест да търсиш числа, за които if-statement-a връща false, понеже търсим число, което липсва в масива и тогава да ги пушваш в missing. С тези промени кодът ти минава 100/100.

2 Likes

Благодаря, сработи!
П. П. Бях копирал стария код без “!”, но благодаря че и това сте добавили.

1 Like