leetcode Кисть название ноты - 1-10 название

1. Сумма двух чисел

титульный

Дано целое число Nums массива и цель целевого значения, и прошу вас, чтобы определить целевое значение двух целых чисел в массиве, и вернуться в индекс массива.

Можно предположить, что каждый вход соответствует только один ответ. Тем не менее, вы не можете повторно использовать один и тот же элемент массива.

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

Решение 1 Временная сложность O (N²) пространство сложность O (1)

Два наружных слоя итерация число, следующее число от наружного к внутреннему слою траверсе обхода массива до конца, и найти сумму мишени

Метод 2 временная сложность O (N) пространства сложность O (N)

Первый обход еще раз, чтобы сохранить значение и место в массиве внутри хэш (значение ключа значение позиции)

Затем траверс снова ищет цель - текущая итерация цифрового значения хэша существует в внутри массива, а не свой собственный возврат (значение в массиве этой проблемы не повторится)

2. Два числа вместе

титульный

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

Если сложить эти два числа, он возвращает новый список и представлять их.

Можно предположить, что в дополнение к номерам 0, эти два числа не будут начинаться с 0.

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

Время Решение сложность O (N + M)

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

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

3. Нет дубликат строка символов

титульный

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

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

Время решения сложность O (N) пространства сложность O (N)

Используйте хэш-массив записать все вхождения сообщения, ключ символ, значение последней позиции из символов появляются

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

Если появился текущий символ (при наличии хэша-массиве и положение явления больше равно колеса поезда исходного положения), определяются обновить максимальную длину подстроки, новая позиция символа подстрока появляются символы на текущий символе +1

4. Глядя на медиане двух упорядоченных массивов

Учитывая две упорядоченных массивов размера и nums1 м и н nums2.

Вы можете найти как медиану и упорядоченный массив, и требует время сложности алгоритма O (журнал (т + п)).

Можно считать nums1 и nums2 не будет пустым в то же время. Сложность Время журнала (т + п)

nums1 = [1, 3]
nums2 = [2]

则中位数是 2.0

Решение время журнал сложность (т + п) пространство сложность O (1)

анализ

Эта проблема конечное состояние слишком много проблем предполагает, что существует линейный массив делится на две половины

A[0] A[1] A[2] ... A[i-1] | A[i] A[i+1] ... A[n]
B[0] B[1] B[2] ... B[j-1] | B[j] B[j+1] ... B[m]

Количество элементов массива слева: I + J справа от элементов массива: т + п - я - J

В этот момент нужно встретиться

| Число элементов справа - левый ряд элементов | <= 1

А [я]> В [J-1]

В [J]> А [I-1]

Срединные = (макс (А [I-1], В [J-1]) + мин (А [I], В [J])) / 2 или макс (А [I-1], В [J -1]) или мин (A [J], в [J]) в соответствии с числом элементов могут быть оставлены

Тем не менее, многие из граничных условий на правой разделительной линии влево первый элемент или последний элемент, может быть такой, что Len (А)> = Len (В) сочетание приведения граничных условий,

расчет

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

    А [я]> В [J-1]

    В [J]> А [I-1]

    [I], В [J-1] В [J] А [I-1] и величина соотношения между числом А скорректированной в соответствии с левых и правых элементов

  • Для того, чтобы гарантировать, что вышеприведенное соотношение переналадки для удовлетворения

    | Число элементов справа - левый ряд элементов | <= 1

    Также [я] B [J-1] В [J] А [I-1] и величина соотношения между числом А скорректированной в соответствии с левых и правых элементов

  • Медиана приобретение

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

Самая длинная подстрока палиндромический

титульный

Получив строку s, найти sсамую длинную подстроку - палиндром. Можно считать , что sдлина максимальной 1000.

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

Время решения сложность O (N²) пространство сложность O (1)

Предположит, либо палиндромный или линию в качестве символа в середине двух персонажей

中线0  中线1 中线2 中线3 中线4 中线5 中线6 中线7
  b                  a                  b               a           d

Обходе средней линии с обеих сторон, чтобы расширить стоит отметить, что настало время обратить внимание на длину строки в символы от 1 подняться выше

конформное преобразование 6.Z

Количество данной строки в соответствии с заданной строкой, вниз, слева направо от Z-образного расположения.

Например, строка ввода является "LEETCODEISHIRING"число линий равно 3, расположены следующим образом :

L   C   I   R
E T O E S I I G
E   D   H   N

После этого вам нужен выход слева направо для чтения построчно, производить новую строку, например:"LCIRETOESIIGEDHN"

Решение время сложность O (N) пространства сложность O (N²)

Расчет количества строк и данные формы заполнены, наконец, в выходной поперечной двумерном массиве

Решение два временная сложность O (N) пространства сложность O (1)

Вы можете найти закон во время каждой строки вывода:

Если предположить, что каждый номер строки от 0,

  • Каждая строка первой позиции символа исходной строки должна быть равно 0, 1, 2, 3 ... количество линий --1

  • Первые и последние строки через каждые два символа (число строк - 1) * 2

  • Каждые две средних строк являются разнесенными символами (количество строк -1) * 2 - номер текущей строки номер текущей строки 2 -попеременно

Для перемещения строки (следующую строку, когда длина строки больше вычисленных координат)

7. целого числа разворот

Дает 32-разрядное целое число, вам нужно это целое число на каждом перевернутом.

输入: 123
输出: 321

Предположим, у нас есть окружение может хранить только 32-разрядное целое число, то диапазон значений [-231 231--1]. Пожалуйста Согласно этой гипотезе, если целочисленное переполнение после обратного возвращает 0.

Время решения сложность O (N) пространства сложность O (1)

Если он отрицательный перевернутый первый отсчет

Удалено с использованием переменных значной стороны при вычислении

var ret int
for x > 0 {
  ret = ret * 10 + x % 10
  x /= 10
  // 溢出检查
}

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

8. Строка Integer

немного

9. время цифрового палиндромная сложности O (N) пространства сложность O (1)

титульный

Определить целое число, является ли палиндром. Палиндромность правильный порядок (слева направо) и обратного (справа налево) чтения одно и то же целое число.

输入: 121
输出: true
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

решение

Прямое определение вернуть истинное время ввода меньше, чем 0 или 0% 10 == 0, ложно сохранить какой-то случай

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

10. регулярное выражение

титульный

Дайте вам строку sи правило символов p, вы реализовать поддержку '.'и '*'регулярные выражения.

'.' 匹配任意单个字符
'*' 匹配零个或多个前面的那一个元素
输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
输入:
s = "aa"
p = "a*"
输出: true
解释: 因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。

Время решения сложность O (N²) пространство сложность O (1)

Для нормального обхода Обратите внимание, что, когда с и р, или P S результат после определения обхода

Если вы попали. * Или * характер и в соответствии с текущим временем, чтобы соответствовать характеру необходимости идти две ветви, счетчик знаков в этом матче (а *) в этом выражении не похож

func match(s, p string, sPtr, pPtr int)
if p[pPtr+1] == '*' {
  if p[pPtr] == '.' || s[sPtr] == p[pPtr] {
    return match(s, p, sPtr + 1, pPtr) || match(s, p, sPtr, pPtr)
  }
}

рекомендация

отwww.cnblogs.com/Me1onRind/p/11832269.html
рекомендация