Leetcode笔记

前言

主要是记录一下刷算法的思路,便于后续回顾思路,具体解法网站上看就行了

[link](代码随想录 (programmercarl.com))

1. 数组

Leetcode笔记_第1张图片

1.1 二分法

  • 前提:数组有序

  • 本质:可以理解为(首尾)双指针法

  • 实现思路:

    • leftIndex,rightIndex首尾指针,计算出中位middle指针.根据middle与target的大小来控制左右指针的移动,单次移动直接将left/right跨越到middle±1的位置
    • while循环:left<=right
  • LC

    • 704. 二分查找 - 力扣(LeetCode)

      • easy
    • 35. 搜索插入位置 - 力扣(LeetCode)

      • 注意用特例来确定返回left or right
    • 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

      • 分别找左右边界,注意好一共有几种情况
    • 69. x 的平方根 - 力扣(LeetCode)

      • 同样用特例来确定返回left or right
    • 367. 有效的完全平方数 - 力扣(LeetCode)

    • 977. 有序数组的平方

  • 总结

    • 后续写

1.2 (快慢)双指针法

  • 实现思路:

    • 初始时快慢指针均在0位置,快指针用于遍历寻找新元素,慢指针用于在指定位置更新快指针的元素
    • 外层for循环用于更新快指针的位置
    • 内层if判断是否更新慢指针的位置
  • 注意:厘清思路.什么时候满足if移动慢指针,一定要搞清楚这一点

  • LC

    • 27. 移除元素 - 力扣(LeetCode)

      • easy
    • 26. 删除有序数组中的重复项 - 力扣(LeetCode)

      • easy
    • 283. 移动零 - 力扣(LeetCode)

      • [ ]
    • 844. 比较含退格的字符串 - 力扣(LeetCode)

      • [ ]

1.3 滑动窗口

  • 实现思路:

    • 外层for循环为滑动窗口终止位置的遍历0-nums.size()
    • 内层while循环的中止条件为窗口内sum
  • 注意:

    • for每次移动终止位置把新增的值加到窗口中
    • while每次移动起始位置厚把滑走的值从窗口中去掉
  • LC

    • 209. 长度最小的子数组 - 力扣(LeetCode)
      • 三目运算符再熟练熟练,这题还得再做
    • 904. 水果成篮 - 力扣(LeetCode)
      • [ ]
    • 76. 最小覆盖子串 - 力扣(LeetCode)
      • [ ]

2. 链表

Leetcode笔记_第2张图片

struct ListNode{
    int val;  //节点存储元素
    ListNode *next;  //指针指向下一个节点
    ListNode(int x) : val(x), next(NULL) {}  //构造函数
}
  • 链表操作

    • 添加节点

    Leetcode笔记_第3张图片

    • 删除节点

    Leetcode笔记_第4张图片

2.1 移除链表元素

2.2 设计链表

2.3 翻转链表

2.4 两两交换链表中的节点

3. 哈希表

4. 字符串

5. 双指针法

6. 栈与队列

7. 二叉树

2.2 设计链表

2.3 翻转链表

2.4 两两交换链表中的节点

3. 哈希表

4. 字符串

5. 双指针法

6. 栈与队列

7. 二叉树

你可能感兴趣的:(leetcode,算法,数据结构)