Comments 20
В Питоне можно даже красивее сделать, if char in brackets.keys() / .values() вместо строковых литералов. Чуть медленнее, но нет дублирования данных.
Dart (правда Stack нужно подключить из репозитория, в стандартной библиотеке нет):
bool isValid(String s) {
var stack = Stack<String>();
var brackets = {
')': '(',
']': '[',
'}': '{',
};
for (var i = 0; i < s.length; i++) {
if (brackets.values.contains(s[i]))
stack.push(s[i]);
else if (brackets.keys.contains(s[i])) {
if (stack.isEmpty || brackets[s[i]] != stack.pop()) return false;
}
}
return stack.isEmpty;
}
Странно что для питона используется dict а для js используется множественные условия. Хотя и там и там можно писать примерно одинаково (разница в скобках):
function isValid(s) {
let stack = [];
let brackets = {
')': '(',
']': '[',
'}': '{'
}
for (let char of s) {
if ('([{'.includes(char)) {
stack.push(char);
} else if (')]}'.includes(char)) {
if (stack.length == 0 || brackets[char] != stack.pop()) {
return false;
}
}
}
return stack.length == 0;
}
Может быть я не понимаю сути алгоритмических интервью, но почему не использовать псевдоязык? Зачем использовать настоящий язык программмирования?
Потому что "уникальных" faang-разработчиков 10-ки тысяч, и ещё сотни стоят за дверью. Проверять их должен уметь максимально дешёвый персонал и соответственно алгоритм проверяется не по смыслу (на что у проверяющего не хватает компетенции), а по набору тестов а-ля LeetCode. Для этого код должен компилироваться и работать
Мне почему-то казалось, что в алгоритмическом интервью на обратной стороне провода должен быть тоже какой-то разработчик. И в моем понимании любой разработчик способен понять псевдокод. Также мне казалось, что помимо компилируется\не компилируется и проходит ли оно тест-кейсы на таких интервью в основном смотрят на "ход мысли" кандидата.
Спасибо за вопрос. Есть 2 вида:
- С автоматизированной системой: это обычно скрининг или скорее пре-скрининг
- С человеком: полное интервью или так же скрининг, зависит от компании
При интервью с человеком - это почти наверняка будет разработчик который умеет читать код. Но код должен быть кодом, иначе он не сможет догадаться можете ли вы писать код хотя бы на 1 языке.
Ход мысли обязателен, но и задача должна быть закончена. Иначе не сходится
Разве другие этапы интервью не показывают ли владение человека каким-либо языком программирования? Ну типа live coding какой-нибудь, или тестовое задание. Да и вообще странно, человек идет в MAANG и не может показать публичный код, который он написал? Такое бывает? Я не то что в MAANG не работал, я даже в Яндекс и Тинькофф ни разу не собеседоваля, но могу столько кода на своем гитхабе показать - учитаешься.
Раз уж тут конкурс на самое короткое решение, вот еще один плюсовый вариант
bool isValid(string s) {
stack<char> q;
string u = ")(][}{";
for (char c : s) {
auto p = u.find(c);
if (p & 1) {
q.push(u[p - 1]);
} else if (q.empty() || q.top() != c) {
return false;
} else {
q.pop();
}
}
return q.empty();
}
По-моему тут не хватает проверки на то, является ли p одной из закрывающих скобочек
То есть что бы устроиться на работу по профилю нужно освоить технологию не по профилю?
К примеру, занимаюсь я .NET и ничего кроме .NET (и порой TS/JS ни нужно), но что бы устроиться на работу, вместо повышения навыков в основной специализации, нужно распыляться на Питон, Го или ещё что-нить далёкое…
Это только мне данная ситуация кажется кринжовой?
PS: к автору никаких претензий не имею, а вот ситуация с наймом очень неоднозначная.
Это ситуация с наймом в большие компании, где поток кандидатов в сотни тысяч человек в год, стандартизация итп. К тому же в МААНГах обычно нет такой привязки к языку/стеку, люди осваивают нужные технологии на ходу. А раньше вон вообще всякие Брейн тизеры давали, типа почему люки круглые, так что сейчас ещё нормально. Ну и всегда есть вариант пойти в компании поменьше/попроще, где будет важен именно ваш стек, коммиты в гитхаб итп.
Например - в МААНГах не нужны ".NET разработчики" или "Java разработчики", а скорее бэкенд-девелоперы в целом, которые могут переучиться на то что будет нужно для решения конкретных проблем
То есть, в мире полно уникомов способных освоить язык и полноценный фреймворк "условно" за испытательный срок? Я очень сомневаюсь, что МААНГ собрал 100000 людей способных на такое быстрое обучение.
Я за свою небольшую практику уже насмотрелся на "велосипеды" в кодовых базах очень обеспеченных копаний. Порой было стойкое ощущение, что разработчики начали работать с .NET только на этом проекте. При этом, чтобы писать высокопроизводительный код нужно знать особенности языка и тонкости фреймворка.
Конечно же я не отрицаю возможность переда между Java Spring - C# .NET - Kotlin - Dart, эти языки очень близки. Программисты этим занимаются уже давно и переходят вполне успешно, но достичь тот же уровень сеньорности потребуется явно не пара месяцев обучения.
Дофига кода пишет консалтинг. Когда нанимают человек проходит собес на одном языке, а потом его назначают на проект к клиенту, который использует другой. И это сплошь и рядом в индустрии. Как ты думаешь - реально ли знать условно 5 языков на достаточно высоком уровне? Наверное, есть такие уникумы, но многие хорошо если 1-2 знают хорошо.
Ну вообще профиль впечатляющий - интересно, сколько у вас заняло времени 350+ задач прорешать?
Готовимся к алгоритмическому big-tech интервью: язык имеет значение