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

1. Получение помощи

Независимо от того, насколько серьезна проблема, не обращайся за помощью !!. Попробуйте другой подход или снова посмотрите на проблему и попытайтесь понять ее. Это может показаться противоречащим советам, но как только вы попытаетесь решить проблемы самостоятельно, это повысит вашу уверенность, и у вас будет арсенал оружия, которое вы можете использовать для решения различных задач. Так что, если вы решите больше проблем самостоятельно, вы получите мотивацию и примете более сложную задачу, которую нужно решить в следующий раз. Если вы получите помощь и получите решение, даже не задумываясь, решение принесет вам только утешение, и в следующий раз, когда вы решите другую проблему и застрянете, у вас возникнет искушение обратиться за помощью. Вы будете меньше заинтересованы в решении новой проблемы, поскольку знаете, что не смогли решить предыдущую или смогли решить лишь небольшую часть из тех, что когда-либо пробовали.

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

2. Придерживаться только одного решения

Предположим, вы начали с потенциального решения с использованием массивов, но решение с использованием массивов слишком сложно, тогда вы можете попробовать использовать, например, словари, HashMaps и т. Д., Или вы можете использовать другой подход, используя также массивы. При работе с алгоритмом важно знать, становится ли ваш алгоритм сложным, а во время кодирования он станет еще сложнее. Один из способов - задать себе этот вопрос, даже если у вас есть решение. Могу я сделать лучше?

Проблема

Напишите программу, чтобы проверить, является ли данная строка «Palindromable» или нет.

Что такое "простая" строка ?

Допустим, вам дана строка. Вы можете получить много строк (комбинаций) из данной исходной строки, если переставите символы исходной строки.

Строка имеет значение Палиндром, если любая комбинация является палиндромом.

Пример 1:

Исходная строка: NINIT

Комбинации: NINIT, NNIIT, IINNT, ININT, IITNN, NITIN, INTIN, INTNI, NTNII, NNTII и т. Д.

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

Пример 2:

Исходная строка: NINNIT

Комбинации: NINITN, NNINIT, IINNNT, INNINT, INITNN, NNITIN, INTNIN, INTNIN, NTNINI, NNTINI и т. Д.

Исходная строка НЕ ​​является палиндромом, потому что из нее НЕЛЬЗЯ сделать палиндром.

Псевдокод для первого решения с использованием HashSet

function palindromable(String inputString)
    Create a character HashSet charSet
    Convert inputString to character Array strArray using  toCharArray
    for each character 'c' in strArray
        if 'c' is present in charSet
            Remove 'c' from charSet
        else
            Add 'c' to charSet
        End of if
    End of loop
    if charSet size is greater than 1
        // if there is odd number of occurence for more than 1 character
   
              return false
    else
              return true
    End of loop
End of function

Псевдокод для второго решения с использованием массива

function isPalindrome(String inputString)
Create a tempArray for storing single occurences of the characters in inputString
intialize index to zero
intialize count to zero
intialize oddcount to zero
intialize flag to false
Convert inputString to character Array strArray using toCharArray
if strArray length is equal to one
    return true
End of if
for each character 'c' in strArray
   for each character 'j' in tempArray
       if 'c' is equal to 'j'
          set flag to true
          break
       End of if
    End of loop
    if flag is equal to false
        set count to zero
    for each character 'k' in strArray
        if 'c' is equal to 'k'
        increment count by 1
    End of loop
    if count divided by 2 does not give remainder 0
        increment oddcount by 1
    End of if
    if count divided by 2 does not give remainder 0 and
    length of the string is a multiple of 2
        return false
    End of if
    if count divided by 2 does not give remainder 0 and
    length of the string is not a multiple of 2
       if oddcount is greater than 1
          return false
       End of if
    End of if
    tempArray[index] = 'c'
    increment index by 1
End of loop
return true
End of function

Вы можете ясно понять, что Первое решение намного более эффективно, чем второе решение, не вдаваясь в временную сложность обоих этих алгоритмов, а также вам потребуется гораздо больше времени, чтобы придумать второй алгоритм. Даже если у вас есть решение или вы чувствуете, что этот алгоритм станет более сложным, спросите себя: Могу я сделать лучше?

3. Не знаю, как отлаживать

Позвольте мне сказать вам, что я давно не использовал отладчики, они кажутся сложными в использовании, но имеют много преимуществ. Как только вы начнете использовать отладчик, вы быстрее узнаете, где ошибка и в чем именно, в вашем коде. Когда вы используете IDE, например VSCode, Eclipse для кодирования, у них есть инструменты отладчика. Чаще всего новые программисты не используют эти отладчики. Одна из ошибок, которую вы можете совершить, - просто увидеть результат и застрять, потому что вы не видите нужный результат / результат и не знаете, что делать дальше.

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

4. Начните писать прямо сейчас.

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

Вы можете выполнить следующие шаги, чтобы разработать алгоритм.

Шаг 1. Создайте пример для себя.

Шаг 2. Запишите, что вы сделали.

Шаг 3. Обобщите шаги.

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

Когда у вас под рукой есть алгоритм, не забудьте оценить пространственно-временную сложность вашего алгоритма и спросить Могу ли я сделать лучше?

5. Недостаточно решения

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

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









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