解题方法分类

1. 滑动窗口。

2. 双指针。

3. 快慢指针。

4. 区间合并。

5. 循环排序。

6. 原地反转链表。

7. 树上的BFS。

8. 树上的DFS。

9. 双堆。

10. 子集。

11. 变种二分。

12. 最大前K个元素。

13. K-路归并。

14. 拓扑排序。

1. 滑动窗口。

2. 双指针。

3. 快慢指针。

4. 区间合并。

5. 循环排序。

6. 原地反转链表。

7. 树上的BFS。

8. 树上的DFS。

9. 双堆。

10. 子集。

11. 变种二分。

12. 最大前K个元素。

13. K-路归并。

14. 拓扑排序。

1. 滑动窗口。

2. 双指针。

3. 快慢指针。

4. 区间合并。

5. 循环排序。

6. 原地反转链表。

7. 树上的BFS。

8. 树上的DFS。

9. 双堆。

10. 子集。

11. 变种二分。

12. 最大前K个元素。

13. K-路归并。

14. 拓扑排序。

1. 滑动窗口。

  • 这个问题的输入是一些线性结构:比如链表呀,数组啊,字符串啊之类的
  • 让你去求最长/最短子字符串或是某些特定的长度要求

常见的问题有:

  • 窗口大小为K的最大子数组和(简单)
  • 拥有K个不同的字母的最长子串(中等)
  • 字符串的同字母异序词(困难)

2. 双指针。

识别使用双指针的招数:

  • 一般来说,数组或是链表是排好序的,你得在里头找一些组合满足某种限制条件
  • 这种组合可能是一对数,三个数,或是一个子数组

可以放双指针大招的题目:

  • 输出一个排好序的数组的平方数组(简单)
  • 3-Sum(中等)
  • 比较两个字符是否相等,字符中包括得有退格键(中等)

3. 快慢指针。

咋知道需要用快慢指针模式勒?

  • 问题需要处理环上的问题,比如环形链表和环形数组
  • 当你需要知道链表的长度或是某个特别位置的信息的时候

那啥时候用快慢指针而不是上面的双指针呢?

  • 有些情形下,咱们不应该用双指针,比如我们在单链表上不能往回移动的时候。一个典型的需要用到快慢指针的模式的是当你需要去判断一个链表是否是回文的时候。

快慢指针可秒的题目:

    • 链表是否有环(简单)
    • 链表是否满足回文(中等)
    • 环状数组中检测环(困难)

4. 区间合并。

怎么识别啥时候用合并区间模式呀?

  • 当你需要产生一堆相互之间没有交集的区间的时候
  • 当你听到重叠区间的时候

合并区间的题目:

    • 区间交集(中等)
    • 最大化CPU负载(困难)

5. 循环排序。

咋鉴别这种模式?

  • 这些问题一般设计到排序好的数组,而且数值一般满足于一定的区间
  • 如果问题让你需要在排好序/翻转过的数组中,寻找丢失的/重复的/最小的元素

能用循环排序解的题:

    • 需要数组中没出现的数字 (简单)
    • 寻找最小的没出现的正整数 (中等)

6. 原地反转链表。

咱们怎么去甄别这种模式呢?

  • 如果你被问到需要去翻转链表,要求不能使用额外空间的时候

这种模式的适用场景:

    • 翻转链表中的一段(中等)
    • 翻转每k个元素为一组的子链表段(中等)

7. 树上的BFS。

识别树上的BFS模式:

  • 如果你被问到去遍历树,需要按层操作的方式(也称作层序遍历)

该模式可解的题:

  • 二叉树层序遍历(简单)
  • 之字形遍历(中等)

8. 树上的DFS。

识别树形DFS:

  • 你需要按前中后序的DFS方式遍历树
  • 如果该问题的解一般离叶子节点比较近。

树形DFS可破的题目:

  • 树上所有路径上表示的数字的和(中等)
  • 树中所有能形成目标和的路径(中等)

9. 双堆。

判断双堆模式的秘诀:

  • 这种模式在优先队列,计划安排问题(Scheduling)中有奇效
  • 如果问题让你找一组数中的最大/最小/中位数
  • 有时候,这种模式在涉及到二叉树数据结构时也特别有用

典型问题:

    • 找数字流中的中位数(中等)

10. 子集。

如果判断这种子集模式:

  • 问题需要咱们去找数字的组合或是排列

子集模式适用的场景:

    • 有重复元素的所有子集(简单)
    • 通过改变大小写,找到所有可能的字符串排列(中等)

11. 变种二分。

变种二分可以解决的问题:

  • 顺序未知的二分(可能翻转过了,简单)
  • 无界排序数组的二分(中等)

12. 最大前K个元素。

识别最大K个元素模式:

  • 如果你需要求最大/最小/最频繁的前K个元素
  • 如果你需要通过排序去找一个特定的数

前K个元素模式的场景:

    • 前K大的数(简单)
    • 前K个最常出现的数字(中等)

13. K-路归并。

识别K路归并:

  • 该问题的输入是排好序的数组,链表或是矩阵
  • 如果问题让咱们合并多个排好序的集合,或是需要找这些集合中最小的元素

K路归并的题目:

  • 合并K个排好序的链表(中等)
  • K对数和最大(困难)

14. 拓扑排序。

拓扑排序模式识别:

  • 待解决的问题需要处理无环图
  • 你需要以一种有序的秩序更新输入元素
  • 需要处理的输入遵循某种特定的顺序

拓扑排序的试炼场:

  • 任务执行顺序安排(中等)
  • 树的最小高度(困难)

0

LeetCode按照解题方法分类题目的更多相关文章

  1. LeetCode链表解题模板

    一.通用方法以及题目分类 0.遍历链表 方法代码如下,head可以为空: ListNode* p = head; while(p!=NULL) p = p->next; 可以在这个代码上进行修改 ...

  2. 2017.11.11 B201 练习题思路及解题方法

    2017.11.11 B201 练习题思路及解题方法 题目类型及涵盖知识点 本次总共有6道题目,都属于MISC分类的题目,涵盖的知识点有 信息隐藏 暴力破解 音轨,摩斯电码 gif修改,base64原 ...

  3. 自动测试LeetCode用例方法

    自动合并测试LeetCode解题方法 在leetcode.com上答题,Run Code或者Sumbmit通常要Spending一会,如果提交一次就Accepted那还好,如果反复Wrong Answ ...

  4. LeetCode: Palindrome 回文相关题目

    LeetCode: Palindrome 回文相关题目汇总 LeetCode: Palindrome Partitioning 解题报告 LeetCode: Palindrome Partitioni ...

  5. LeetCode: Permutations 解题报告

    Permutations Given a collection of numbers, return all possible permutations. For example,[1,2,3] ha ...

  6. leetcode网解题心得——61. 旋转链表

    目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1. ...

  7. 【noi 2.6_8787】数的划分(DP){附【转】整数划分的解题方法}

    题意:问把整数N分成K份的分法数.(与"放苹果"不同,在这题不可以有一份为空,但可以类比)解法:f[i][j]表示把i分成j份的方案数.f[i][j]=f[i-1][j-1](新开 ...

  8. IPC 方法分类

    IPC 方法分类 进程间通信 shell out 被调用程序在执行完毕之前接管用户的键盘和显示,退出后,调用程序重新控制键盘和显示并继续运行. 专门程序通常有文件系统与父进程进行通信,方法是在指定位置 ...

  9. LeetCode 169. Majority Element解题方法

    题目: Given an array of size n, find the majority element. The majority element is the element that ap ...

随机推荐

  1. 【坑】关于springMvc对JSON日期绑定,得到的日期后面多个时间的问题

    文章目录 前言 Mysql的Date() 后记 前言 当我们翻过 解决springMvc对JSON日期绑定 眼前这座大山以后,发现并没有 IG 的荣光在等着我们,反而有个大坑在等着我们.... 比如博 ...

  2. Python14之字符串(各种奇葩的内置方法)

    一.字符串的分片操作 其分片操作和列表和元组一样 str1 = 'keshengtao' str1[2:6] 'shen' str1[:] 'keshengtao' str1[:4] 'kesh' 二 ...

  3. ORAchk - 数据库配置检查工具

    1.概要2.下载和安装3.如何执行4.执行过程5.报告6.参考 1.概要 ORAchk之前被称为RACcheck,后来它的检查范围进行了扩展,改名为了ORAchk,它是在数据库系统进行健康检查的一个专 ...

  4. ~postman使用Runner

    1.准备参数的.text文件. postman支持三种参数的方式,分别为.text文件,.csv文件,json文件.此处使用.text文件.编码格式使用utf-8 2.替换请求参数 3.设置Runne ...

  5. python3快速安装升级pip3

    一.下载地址: 获取get-pip.py安装文件: 官网链接:https://bootstrap.pypa.io/get-pip.py 百度云链接:https://pan.baidu.com/s/14 ...

  6. go get 使用proxy来下载

    http_proxy=https://127.0.0.1:1087 go get -v github.com/Shopify/sarama https_proxy=https://127.0.0.1: ...

  7. ps 指令

    ps显示系统当前进程信息, ps 存在多个版本,因此 ps options 的种类繁多.这里只列举平时开发过程中常用的命令,如果有错误或者更好的例子.烦请在评论区指出 语法 ps [options] ...

  8. Vue自定义指令和自定义过滤器

    一.自定义指令: 自定义指令分为两种:全局自定义指令和局部自定义指令 全局指令指所有组件都可以使用,局部指令是只有在当前组件中才可以使用. 如,我们现在有个需求,当一个输入框获取焦点时,显示出一个di ...

  9. redis原理及集群主从配置

    一.简介 存储系统背景 存储系统有三类: RDBMS oracle,dh2,postgresql,mysql,sql server NoSQL: KV NoSQL:redis,memcached 列式 ...

  10. 淘宝API总结

    1. 淘宝客API https://open.alimama.com/?spm=a219t.11816995.1998910419.d8546b700.2a8f75a5C0NajI#!/documen ...