leetcode_hot100(0-10)

1. 两数之和

  • 用字典存储,键为数组的值,值为索引,可以清除掉重复的数字
  • 遍历数组如果target-now在字典的键就返回。

2. 两数相加

  • 同时遍历两个链表
  • 当前结点的值相加,如果需要进位设置进位符为1,
  • 如果一个链表遍历完,则这个链表后续相加的值设为0
  • 注意两个链表遍历完,如果进位符还是1,需要额外加一位

3. 无重复字符的最长子串

  • 子串问题采用双指针
  • 用end指针遍历字符。
  • 若当前字符不在字典中,长度加一,字符加入字典(键为字符,值为索引)
  • 若当前字符在字典中,修改start的位置为字符字典中索引的值或者不改变(不改变的前提是字符字典中的值小于现在的start,不可以往回找)

4. 寻找两个正序数组的中位数

简单做法:

  • 合并数组找中位数

复杂做法:

  • 快排来找(复习下快排)

5. 最长回文子串

  • 采用中心扩展的方法
  • 三种扩展情况
  • 第一种当前字符和左边字符相等,考虑左两位为中心,长度+=1,left指针向左移动
  • 第二种当前字符和右边字符相等,考虑右两位为中心,长度+=1,right指针向右移动
  • 第三种当前字符左右字符相等,考虑以当前字符为中心,长度+=2,right指针向右,left指针向左。

11. 盛最多水的容器

  • 双指针的方法
  • 左指针初始化为0,右指针初始化为数组长度减1
  • 计算当前左右指针构成的面积
  • 如果左指针的挡板矮于右指针,左指针向右移动
  • 否则右指针向左移动
  • 更新最大面积

15. 三数之和

  • 三指针方法
  • 一个cur指针遍历数组
  • left指针初始化为cur+1,right为length-1
  • 目标值为target = -arr[cur]
  • 如果left+right<target,left向右移动
  • 如果left+right>target,right向左移动
  • 等于的话记录答案,左指针向右移动,右指针向左移动,为了去重如果nums[left] == nums[left-1]还要继续移动左指针,同理右指针。

电话号码组合

  • 使用dfs
  • 注意传递的列表由于地址唯一,在dfs中回溯的存在会修改列表导致最后结果为空,因此追加答案的时候要res.append("".join(tmp_res)),相当于deepcopy

删除链表的倒数第N个结点

  • 遍历结点,将结点的地址存入数组
  • 如果倒数第N个结点为头结点,那么头结点=头结点.next
  • 如果不是头结点,倒数第n个结点的next=node.next.next
  • 返回数组[0]

猜你喜欢

转载自blog.csdn.net/qq_37668436/article/details/121355944