Когда я начал учиться программировать, я также изо всех сил пытался придумать алгоритм, чтобы решить эту проблему, и я даже не знал, с чего начать. Я часто думал, что это не мой кусок пирога. В следующей статье я расскажу вам, почему вы, возможно, изо всех сил пытаетесь решить проблему, с которой я сам столкнулся, когда начал писать код, и теперь, будучи профессиональным инженером-программистом, видел людей, почему они слишком легко сдаются при поиске решения.
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. Недостаточно решения
В Интернете есть много ресурсов, которые вы можете использовать для повышения уровня своей игры по кодированию. Накачивайте мышцы своего мозга, решая все больше и больше проблем и пробуя разные решения одной и той же проблемы. Таким образом на собеседовании вы никогда не будете нервничать из-за того, что не сможете придумать алгоритм. Вы поймете, просто увидев проблему, какие структуры данных использовать и какой подход к программированию использовать. Вы будете уверены, что какую бы проблему ни бросил мне интервьюер, я найду решение.
Ниже приведены некоторые ресурсы, которые вы можете использовать для повышения уровня своей игры по программированию.
В следующий раз, когда вы будете писать код, спросите себя, делаю ли я эти ошибки? Я надеюсь, что эта статья принесет вам пользу и поможет вам улучшить кодирование. Практикуйтесь каждый день и продолжайте кодировать.