【无标题】

基础练习题目

背景

做编程题目需要的基础,分为如下两块:

  • 排序(几种基本的排序算法、链表排序)
  • 二分搜索
  • 二叉树的深度优先遍历和广度优先遍历
    • 深度优先遍历的三种方式(递归、非递归写法)
    • 广度优先遍历 (递归、非递归写法)

二叉树

树的遍历递归、非递归写法。默写+练习

  • 先序遍历
    • https://leetcode.com/problems/binary-tree-preorder-traversal/
  • 中序遍历
    • https://leetcode.com/problems/binary-tree-inorder-traversal/
  • 后序遍历
    • https://leetcode.com/problems/binary-tree-postorder-traversal/
  • 层次遍历
    • https://leetcode.com/problems/binary-tree-level-order-traversal/

排序

  • 快排的应用
    • 寻找第k大数 堆的方法+双指针法
      • https://leetcode.com/problems/kth-largest-element-in-an-array/submissions/
    • 奇偶数互换(双指针法)
      • https://leetcode.com/problems/sort-array-by-parity/
  • mergeSort
    • 数组种的逆序对
      • 牛客网

双指针法

类型1:一个头指针,一个尾指针,不断缩小搜索空间

  1. 偶数排列在奇数之前
    1. https://leetcode.com/problems/sort-array-by-parity/
  2. 3sum 基础问题
    1. https://leetcode.com/problems/3sum/
  3. 3Sum Closest
    1. https://leetcode.com/problems/3sum-closest/
  4. 4 sum
    1. https://leetcode.com/problems/4sum/submissions/
  5. Container With Most Water
    1. https://leetcode.com/problems/container-with-most-water/
  6. Two Sum II - Input Array Is Sorted
    1. https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/

类型2:快慢指针法

链表

  1. 链表反转 (双向链表反转)基础中的基础 核心思想:两个指针反转,一个指针指向保存之前的记忆(共三个指针)
    1. https://leetcode.com/problems/reverse-linked-list/
  2. 链表合并
    1. 两个链表合并
      1. https://leetcode.com/problems/merge-two-sorted-lists/submissions/
    2. k个链表合并
      1. https://leetcode.com/problems/merge-k-sorted-lists/submissions/
        1. 堆做法
          1. 复杂度 n*log(k)
            1. 创建堆的复杂度是k,取数的复杂度是log(k), 假设有n个数,构建堆的复杂度是n,每一次取数的复杂度是log(k)
        2. 使用队列,不断的合并两个list,直到最后只剩一个list为止
          1. 时间复杂度
            1. 总共n个节点,一共合并了log(k)次,总的时间复杂度是O(nlog(k))
        3. 递归做法
        4. mergesrot
          1. 总共合并了logk次,一共n个节点进行了合并,复杂度还是O(nlog(k))
    3. 链表模拟加减法
      1. Add Two Numbers 考察细心
        1. https://leetcode.com/problems/add-two-numbers/
    4. 删除链表中第N个节点,如果N是第一个节点要注意
      1. https://leetcode.com/problems/remove-nth-node-from-end-of-list/submissions/
    5. 链表排序
      1. https://leetcode.com/problems/sort-list/
        1. 使用mergeSort
          1. 核心思想:找到中间节点,而后将一个链表分裂成两个链表,而后进行merge
    6. JZ86 在二叉树中找到两个节点的最近公共祖先
      1. 基本思路:
        1. 找到从根节点到目标阶段的一条路径,二叉树,所以只有一条路径
        2. 找到两条路径第一个相同的点

动态规划

  1. 最长递增子序列
    • 连接:https://leetcode.com/problems/longest-increasing-subsequence/

二分搜索

  1. 旋转数组的最小数字
  2. 牛客
  3. 二维数组中的查找
    1. 牛客
    2. 方法很多:
      1. 线性查找(一次减少一列)
      2. 一个二分查找
      3. 两个二分查找
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值