解题方法分类

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. python 之 数据库(数据库安装方法、基本sql语句、存储引擎)

    第十章 数据库 10.1 数据库介绍 1.数据库相关概念 数据库服务器:本质就是一个台计算机,该计算机之上安装有数据库管理软件的服务端 数据库管理系统RDBMS:本质就是一个C/S架构的套接字软件 库 ...

  2. PAT甲级满分有感

    时间轴: 2017年,数据结构加入了我的课程清单. 2018年12月,我从网易云课堂下载了数据结构的所有课程视频(学校里没有网,只能离线看),开始一刷.一刷只看了视频,基本没有做题,看到AVL树的时候 ...

  3. 2.33模型--去除字符串两头空格.c

    [注:本程序验证是使用vs2013版] #include <stdio.h> #include <stdlib.h> #include <string.h> #pr ...

  4. react实现设置答题器选项个数

    一,设置答题器选项import React, { useState, useEffect } from 'react' import PropTypes from 'prop-types' impor ...

  5. DNS 解析

    DNS即为Domain Name System的缩写形式,就是所谓的域名系统,它是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网. 如果想访问某个网站( ...

  6. 怎样查看系统安装的python版本

    方法一:  在命令行下使用python -V 方法二:  在命令行下进入python交互模式, 可以在第一行看到python的版本信息

  7. 全栈项目|小书架|服务器开发-Koa全局路由实现

    什么是路由 路由就是具体的访问路径,指向特定的功能模块.一个api接口是由ip(域名)+端口号+路径组成,例如 :https://www.npmjs.com/package/koa-router就是一 ...

  8. Java8新特性 - 并行流与串行流

    并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流. Java8中将并行进行了优化,我们可以很容易的对数据进行并行操作.Stream API可以声明性地通过parallel()和 ...

  9. .Net DLL类库引用时没有注释信息

    自己编写的类库提供给别人引用时,别人获取不到DLL内部的方法.变量的注释信息,无法了解内部情况和使用方法. 原因:没有随DLL类库一同输出注释文档 解决方案: 在VS界面中选中提供给别人的类库项目 在 ...

  10. R_数据操作_初级_03

    数据的输入:详见(http://cran.r-project.org/doc/manuals/R-data.pdf下载的R Data Import/Export手册②) 1.键盘输入:使用edit() ...