解题方法分类

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. Django模板语言中的Filters的使用方法

    Filters可以称为过滤器.下面我们简单介绍是如何使用他的. Filters的语法: {{ value|filter_name:参数 }} Django大概提供了六十个内置过滤器,下面我们简单介绍几 ...

  2. PAT(B) 1038 统计同成绩学生(C)统计

    题目链接:1038 统计同成绩学生 (20 point(s)) 题目描述 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式 输入在第 1 行给出不超过 10​5​​ 的正整 ...

  3. VK Cup 2017 - Round 1 (CDE)

    771C Bear and Tree Jumps 大意: 给定树,每步能走到距离不超过$k$的任意点,记$f(s,t)$为$s$到$t$的最少步数,求$\sum\limits_{s<t}f(s, ...

  4. ElementUI对话框(dialog)提取为子组件

    需求:在页面的代码太多,想把弹窗代码提取为子组件,复用也方便.   这里涉及到弹窗el-dialog的一个属性show-close: show-close="false"是设置不显 ...

  5. Python排序算法(六)——归并排序(MERGE-SORT)

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10800699.html 一.归并排序(MERG ...

  6. ABAP Code Inspector那些隐藏的功能,您都知道吗?

    最近有粉丝在后台给我留言,说新知识太多,"学不动了".所谓温故而知新,今天我们就来重温下ABAP里的Code Inspector的用法. 2015年6月,我在SAP社区上写了一篇博 ...

  7. 父类调用子类的常量 lumen查询数据库方式

    我要在一个基类里面实例化所有的model 要根据集成的对象定义的model实例化 BaseRepository.php <?php namespace App\Repository; class ...

  8. py map reduce filter 总结

    array=[1,3,4,71,2] ret=[] for i in array: ret.append(i**2) print(ret) #如果我们有一万个列表,那么你只能把上面的逻辑定义成函数 d ...

  9. Linux之mysql的安装与,主从设置

    一,MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL ...

  10. 记录java+testng运行selenium(一)

    整体的流程为下图 整体思路为: 1. 由程序开始运行时去读取ini文件中存储的浏览器及需要打开的url 2. test运行时通过description实现数据驱动,主要做两件事 2.1 第一件事为:读 ...