Я маю визнати тут, що я один з тих, хто любить задавати питання алгоритму в інтерв'ю, але мушу наголосити, що реальна відповідь на це питання абсолютно не має значення. Мені не байдуже, чи знає відповідь співбесідник чи ні. Натомість для мене це питання спрямоване на різні аспекти, як-от наступний - за важливістю:
Вимоги
Такі питання свідомо недостатньо конкретизуються. У вашому прикладі більше ніяких деталей щодо послідовності немає. Якщо у вас є співбесідник, який запитує, чи справді ці цифри відсортовані, то це хороший знак. У нього правильний спосіб мислення, щоб запитати клієнтів про подальші деталі, що допоможе прийти до кращого рішення за коротший час. Кандидат може також грати з ідеєю використовувати простір O (n) для зберігання масиву з N чисел, але він не повинен цього робити, не розпитуючи про більш детальну інформацію про X та Y. Скажімо, що X і Y - від 1 до 1000 , тоді впевнено, ідіть вперед і запускайте рішення на основі масиву. Але якщо я скажу вам, інтервал - 1 і 1 мільярд, то проблема стає зовсім іншою. Дозвольте ще раз наголосити, що мені не байдуже рішення.
Стандартні методики
Я не хочу наймати програміста, який навіть не знає, що означає O (n). Це абсолютно обов'язково знати, чи мали ви гідну освіту в цій галузі. Але також важливо не просто знати, що це означає, а реально застосувати ці знання. У вашому прикладі я хочу, щоб кандидат усвідомлював, що йому заборонено сортувати дані (не задаючи додаткових питань, орієнтованих на вибір сорту відра чи інші підходи до сортування O (n)) через сортування, необхідне O (n log n) загалом.
Аналогічно, інші питання алгоритму спрямовані на стандартні методи, такі як обхід дерев або графіків, або рекурсія. Кандидат може скотитися на одну з цих методик, що не справляє гарного враження. Однак у таких випадках мені подобається копати глибше, щоб дізнатись, чи є у кандидата взагалі якийсь CS статус. Звичайно, це залежить від того, якою є цільова позиція, але зазвичай розробник, який не знає про складності виконання, а також про типові структури даних та їх обхід, не допоможе.
Проблема розбору проблем
Задавши питання, ви пильно стежите за кандидатом. Як він / він реагує? Ви отримуєте кращі результати тут від кандидатів , які не мають абсолютно ніякого поняття про те, як вирішити цю проблему на першому . У цьому відношенні питання перевіряє, що може статися, якщо подібна ситуація станеться на робочому місці пізніше. Ви можете траплятися з такою проблемою під час свого розвитку, і добре знати, як ваш кандидат вирішує ці проблеми, навіть якщо він / він не в змозі вирішити все самостійно.
Приклад: Ви не хочете, щоб ваш кандидат перейшов у безшумний режим протягом наступних півгодини! Перевірте, чи може він підійти з розумними запитаннями (див. Вимоги), перевірте, чи не починає він думати з коробки, як тільки зрозуміє, що не може цього зробити. Навіть "веселе" зустрічне запитання на кшталт "Чи можу я скористатися параметром" телефон-колега "?" - хороший знак.
Як відповісти
Загалом, найкращі відповіді на такі запитання - зустрічні запитання! Одразу сказати відповідь в основному не вдається всій справі, і насправді це зовсім не хороша відповідь, тому що всі ці запитання натякають на компроміси, які випливають з вашої відповіді, не маючи ще потрібної інформації, щоб розумно зробити це компроміс. Звичайно, якість зустрічних питань різниться між кандидатами.
Як загальна примітка до питань інтерв'ю: зустрічні запитання рідко є поганою справою. В одному з моїх власних інтерв'ю мене, наприклад, запитали щось на зразок наступного: "Якщо вам доведеться реалізувати X, ви вибрали б для цього C ++ або Java, і чому?" - Я просто протистояв "Чи обмежений я цими двома?". Здогадайтесь самі, яку реакцію ви отримаєте від інтерв'юера на таке зустрічне запитання - і як легко вам реально показати інтерв'юеру, на що ви здатні.
find the missing element in O(N) or better
що означає "чи краще" в цьому контексті? Здається, та річ, яку можна було б вирішити за допомогою простого циклу, але все одно я не розумію - це або вирішено, або не вирішено , правда?