leetcode——top interviewed questions刷题关键算法小记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013700358/article/details/88585750

2. Add Two Numbers
单纯的链表加法,需要考虑一些边界情况:

  • 保存每次对位加法后可能的进位值
  • 考虑两个链表不一样长的情况
  • 考虑两个链表都加到末尾后,进位值不为0的情况(如5 + 5)

3. Longest Substring Without Repeating Characters
寻找一个字符串中,无重复字符的最长连续子串

  • 题目没有说只有小写字符,可能有空格、特殊字符等
  • 可以采用类似滑窗的思想
  • 可以将每个字符第一次出现的位置用哈希表保存,若当前字符已在哈希表,则判断是否需要更新最大长度
  • 在判断字符是否存在哈希表时,如果该字符上一次出现的位置比新字符串更前,则无需操作
  • 有可能到字符串末尾都没碰到重复字符,则此时未更新最大长度,需要在返回时判断当前最大长度与(len - head)的大小

4. Median of Two Sorted Arrays
求两个已排序数组的中位数
假设两个数组分别为A和B,中位数为第k个数(若总长为偶数,则为k和k+1的平均)

  • 第一种方法,先把两个数组合并,然后直接sort找中位数
  • 第二种,采用归并排序的方法,从头到尾找到第k(或k+1)个数,理论上复杂度比第一种小,但实际测试反而更长
  • 第三种,采用二分查找的方法,若要找第k个数,若A[k / 2] < B[k / 2], 则这第k个数一定在A[k / 2:] 和B中间;同理,若A[k / 2] > B[k / 2], 则这第k个数一定在B[k / 2:] 和A中间;若两者相等,则中位数即为该数
    举例说明:A = [1, 3, 4, 5], B = [2, 3, 3, 5, 5], lenA = 4, lenB = 5 k = 5(若从1开始计数), k / 2 = 2
    则A[2] = 4, B[2] = 3, B[2] < A[2],也即B[2] 最多为A和B的第5大的数(只有B[0] B[1] 和 A[0] A[1]比它小),因此后续就从B[2] ~ B[4] 和 A中继续递归二分查找即可
  • 采用第三种方法时,要注意例如A长度为1,B长度7,则k/2有可能超出A的检索范围,因此A需要在lenA和k / 2之间取小值。

5. Longest Palindromic Substring
给定一个字符串,找出最长的回文子串
若字符串为s,长度为len

  • 遍历整个子串i从0 ~ len-1,以各i为回文串的中心,分别向两边延伸(如st = i - 1, ed = i + 1), 直到s[st] != s[ed], 则s[st + 1:ed-1]即为以i字符为中心的回文子串,若比当前记录的子串长度更长,则更新
  • 注意空字符串

7. Reverse Integer
easy难度的题目,给定一个整数,返回将其反转后的整数

  • 用一个数存给定整数对10取余的数,每次对answer*10 + 该余数
  • 注意负数的情况
  • 若通过转化为str的方法,则要注意原数最后为0的情况
  • 注意反转后的数比231大的情况(返回0)

8. String to Integer (atoi)
给定一个字符串,输出其“对应的”整数

  • 若给定字符串不合法,则返回0。不合法包括:为空;第一个非空格字符不是数字或正负号
  • 以 正号(+)或负号(-)开头的数字也合法,其中正号需舍去
  • 若最后所得整数不在int的范围内,则需要取小值,且注意若该整数>=231,则需要返回231 - 1, 而不是231

未完待续

猜你喜欢

转载自blog.csdn.net/u013700358/article/details/88585750