Рубрики
Без рубрики

Ежедневная проблема кодирования: Программирование головоломок в ваш почтовый ящик

Автор оригинала: David Landup.

Ежедневная проблема кодирования: Программирование головоломок в ваш почтовый ящик

Как и почти любая другая профессия, ключ к тому, чтобы стать великим программистом, – это практика . Практика часто и последовательно-это удивительный и, возможно, лучший способ бросить вызов самому себе и улучшить свои навыки программирования.

У многих из нас есть желание работать в высокотехнологичных компаниях высшего уровня, таких как Microsoft, Google, Facebook и т. Д. Хотя многие люди боятся даже пытаться подать заявку на такую крупную работу, чувствуя себя слишком запуганными или недостаточно квалифицированными для работы в одной из этих компаний.

Идти на собеседование в топовую компанию или на любое другое собеседование с ясной головой и готовностью очень важно, так как выглядеть уверенным и компетентным на собеседовании может означать разницу между получением работы вашей мечты или отказом.

Есть так много вещей, которые человек может сделать, чтобы стать уверенным в себе для такого интервью, и, на мой взгляд, самый лучший способ – это просто практиковаться. Способность решить проблему на месте говорит интервьюеру больше о ваших навыках, чем все, что вы можете сказать устно.

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

Что такое Ежедневная проблема кодирования?

Daily Coding Problem-это простая и очень полезная платформа, которая отправляет вам по электронной почте одну проблему кодирования для решения каждое утро. Это гарантирует, что вы тренируетесь последовательно и достаточно часто, чтобы оставаться в форме в течение длительного периода времени.

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

Самое лучшее в их проблемах-это то, что они используют актуальные проблемы и вопросы от ведущих компаний с которыми другие кандидаты сталкивались на своих собеседованиях там. И лично я согласен с их философией – всегда лучше быть чрезмерно подготовленным, чем недостаточно подготовленным.

Любой желающий может воспользоваться их услугами, будь то начинающий разработчик-самоучка, недавний выпускник колледжа или опытный профессиональный разработчик, желающий отточить свои навыки. Самое главное-это ваше понимание концепций, структур данных и алгоритмов, которыми вы располагаете для решения данной проблемы.

И одна из лучших вещей в DCP заключается в том, что вы получаете эти проблемы с кодированием в свой почтовый ящик бесплатно. За небольшую плату они также отправят вам решения и подробные объяснения по каждой проблеме, которую вы получите по электронной почте на ваш почтовый ящик, который вы получите на следующий день после проблемы, давая вам время решить ее самостоятельно.

Пример Проблемы

С каждой проблемой, отправленной вам по электронной почте, вы получите компанию происхождения, формулировку проблемы и пример кода. В этом разделе мы рассмотрим одну из проблем кодирования DCP и соответствующее подробное решение:

Given two singly linked lists that intersect at some point, find the intersecting node. The lists are non-cyclical.

For example, given A = 3 -> 7 -> 8 -> 10 and B = 99 -> 1 -> 8 -> 10, return the node with value 8.

In this example, assume nodes with the same value are the exact same node objects.

Do this in O(M + N) time (where M and N are the lengths of the lists) and constant space.

Эта проблема была задана Google в реальном интервью.

Потратьте время, чтобы внимательно прочитать эту проблему и немного подумать о том, как вы ее решите, прежде чем продолжить. Согласно часто задаваемым вопросам DCP , у вас должно быть около часа или около того, чтобы решить эти проблемы на собеседованиях, так что это также должно быть время, которое вы позволяете себе решать их дома.

Как только вы подумаете, что поняли это, или когда вы застряли, вы можете взглянуть на подробное решение, предоставленное ежедневной проблемой кодирования:

We might start this problem by first ignoring the time and space constraints, in order to get a better grasp of the problem.

Naively, we could iterate through one of the lists and add each node to a set or dictionary, then we could iterate over the other list and check each node we're looking at to see if it's in the set. Then we'd return the first node that is present in the set. This takes O(M + N) time but also O(max(M, N)) space (since we don't know initially which list is longer). How can we reduce the amount of space we need?

We can get around the space constraint with the following trick: first, get the length of both lists. Find the difference between the two, and then keep two pointers at the head of each list. Move the pointer of the larger list up by the difference, and then move the pointers forward in conjunction and check if they match.

def length(head):
    if not head:
        return 0
    return 1 + length(head.next)

def intersection(a, b):
    m, n = length(a), length(b)
    cur_a, cur_b = a, b

    if m > n:
        for _ in range(m - n):
            cur_a = cur_a.next
    else:
        for _ in range(n - m):
            cur_b = cur_b.next

    while cur_a != cur_b:
        cur_a = cur_a.next
        cur_b = cur_b.next
    return cur_a

DCP предлагает глубокие и подробные объяснения, подобные этому, чтобы помочь вам решить каждую проблему и действительно понять решение, а также укрепить логику, которую вы использовали, если бы смогли решить ее самостоятельно.

Как вы можете видеть, эти проблемы в значительной степени зависят как от логики, так и от творчества, что делает их очень трудными для решения. Но как только вы достаточно потренируетесь и научитесь трюкам, стоящим за этими проблемами – например, как думать о проблеме и ее решении, и какие инструменты у вас есть в вашем распоряжении, – они станут намного проще.

Какие Языки Программирования?

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

Кроме того, DCP стремится расширить свой пул решений и на другие языки, такие как Java, JavaScript, C++ и Ruby.

Ценообразование

Самое приятное во всем этом то, что вы абсолютно бесплатно подписываетесь на их сервис и получаете проблемы для решения каждое утро.

С другой стороны, чтобы получить решения по электронной почте, вам нужно заплатить небольшую плату:

Ежедневная проблема кодирования ценообразование

Годовой план взимает с вас всего 7,50 доллара в месяц (оплачивается ежегодно) за их услуги – это немного больше, чем чашка кофе Starbucks в Германии или примерно цена двух средних чашек кофе в США!

По цене пары чашек кофе каждый месяц вы будете получать около 30 реальных проблем интервью, чтобы решить и значительно улучшить свои навыки и уверенность. Трудно найти другую инвестицию, которая окупится так хорошо.

Другие ресурсы для обучения

К счастью для вас, Daily Coding Problem – это не единственное место, где можно практиковаться и учиться онлайн!

Если книги-это больше ваша вещь, обязательно взгляните на них:

  • Взлом интервью по кодированию
  • Лучшие Книги по Java для всех Уровней Квалификации
  • Лучшие книги по Python для всех Уровней квалификации
  • Лучшие Книги по Машинному обучению для всех Уровней Квалификации

Если вы готовитесь к большому собеседованию, я бы также посоветовал вам ознакомиться с некоторыми советами, которые помогут вам улучшить свои шансы получить работу:

  • Подготовка к собеседованию с разработчиком Python

Или если вам интересно читать статьи о некоторых из самых востребованных и популярных языков программирования в современном мире, ознакомьтесь с нашими статьями Node , Python или Java.

Счастливого кодирования!