Hi, my name is Sergey Puzankov. I have been in the Frontend for 20 years, including Team Leader positions at Yandex, Luxoft, Wix.
We are running this channel together with my spouse Natalia Puzankova. And we really try to prepare truly useful and high-quality content for you, which will allow you to bust your knowledge, prepare for your technical interview, get your dream job and just understand that Frontend is interesting and exciting! 🙂
Feel free to write your questions in the comments, leave suggestions on the topics of our future videos and send your solutions to tech problems from videos. We try to keep track of all comments and, if it's possible, to respond to everyone.
Your Front-end Science team.🚀👍
👍Have questions? Write to me in direct: instagram.com/puzankovcom/ 👍If you have any questions about cooperation, please contact us by email: info@frontend-science.com
Наконец-то)) спасибо вам, очень хорошо объяснили, я до этого читала. И никак не могла понять. У меня скопилось много разных версий. Так и жила несколько лет 😀. Документацию к гиту писал какой - то душнила, чтоб было максимально непонятно и запутанно.
По идеи у вашего решения сложность O(n + n), разве нет? Цикла же два. Предлагаю вариант O(n): function firstUniqChar(s: string) { const hashUniq = new Map(); s.split('').forEach((char, i) => { hashUniq.has(char) ? hashUniq.delete(char) : hashUniq.set(char, i); }) if (hashUniq.size === 0) return -1; return hashUniq.values().next().value; }
Не хотел делать O(n^2) и решил сделать O(n*log n) с помощью бинарной сортировки. Это пример того - что если не думать о структуре данных то алгоритмы мало полезны. Спасибо за решение function intersect(arr1: Array<number>, arr2: Array<number>) { arr1.sort((a, b) => a - b); arr2.sort((a, b) => a - b); const intersectArr = []; function binSearch(findValue: number, arr: Array<number>) { let left = 0; let right = arr.length - 1; while(left <= right) { const middle = Math.floor((left + right) / 2); const middleValue = arr[middle]; if (middleValue === findValue) { arr.splice(middle, 1); return true; } else if (middleValue > findValue) { right = middle - 1; } else { left = middle + 1; } } return false; } arr1.forEach((item) => { if (binSearch(item, arr2)) intersectArr.push(item); }) return intersectArr; };
Смотрю такой - "Как удалить дубликаты из отсортированного массива? | Задача с Leetcode", о, думаю, дай гляну может чего кроме set предложат. И правда бла-бла-бла splice... О думаю, надо затестить, а потом смотрю - ёпт, это не питон а ява )))
Привет. Спасибо за видео. Я только начал изучать и у меня может странный вопрос. Если я находясь в ветке "фича" сделаю git merge main, то разве моя ветка "фича" не станет единственной и главной? Я думаю это не по православному и нужно мержить свою ветку в "мейн". Я ошибаюсь?
НЕ понимаю почему сразу не показываете ситуации как откатится в remote ветках, ведь это еще большая проблема чем в локальной когда что то пошло не так...
А что делать ,если команды git вообще не выполняются Пишу git add мой файл ,и не происходит ничего и файл не добавляется, при git commit ошибку выдает? Только недавно начал в эту тему погружаться, не судите строго
Занимаюсь недавно. Сделал без использования объектов. Не знал про понятие "стека". Использовал только for, if и function. Функция ищет соседние скобки одного вида и разного направления, если находит - вырезает их через splice, увеличивает счетчик (счетчик использую как условие выхода из цикла) и заново вызывает себя. ___________________________ function validBraces(braces) { let arr = braces.split(''); let ciclCounter = 0; const endOfCicl = arr.length; function recursDelBrasket(arr) { for (let i = 0; i < arr.length; i++) { const element = arr[i]; console.log(arr); console.log(element); if(arr.length === 0){ break; } if((element === '(') && ((i + 1) === arr.indexOf(')'))){ ciclCounter++; arr.splice(i, 2); return recursDelBrasket(arr); } if((element === '{') && ((i + 1) === arr.indexOf('}'))){ ciclCounter++; arr.splice(i, 2); return recursDelBrasket(arr); } if((element === '[') && ((i + 1) === arr.indexOf(']'))){ ciclCounter++; arr.splice(i, 2); return recursDelBrasket(arr); } if(ciclCounter >= endOfCicl){ break } } } recursDelBrasket(arr); if(arr.length === 0) { return true; } else { return false; } }