LeetCode按照解题方法分类题目
解题方法分类
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按照解题方法分类题目的更多相关文章
- LeetCode链表解题模板
一.通用方法以及题目分类 0.遍历链表 方法代码如下,head可以为空: ListNode* p = head; while(p!=NULL) p = p->next; 可以在这个代码上进行修改 ...
- 2017.11.11 B201 练习题思路及解题方法
2017.11.11 B201 练习题思路及解题方法 题目类型及涵盖知识点 本次总共有6道题目,都属于MISC分类的题目,涵盖的知识点有 信息隐藏 暴力破解 音轨,摩斯电码 gif修改,base64原 ...
- 自动测试LeetCode用例方法
自动合并测试LeetCode解题方法 在leetcode.com上答题,Run Code或者Sumbmit通常要Spending一会,如果提交一次就Accepted那还好,如果反复Wrong Answ ...
- LeetCode: Palindrome 回文相关题目
LeetCode: Palindrome 回文相关题目汇总 LeetCode: Palindrome Partitioning 解题报告 LeetCode: Palindrome Partitioni ...
- LeetCode: Permutations 解题报告
Permutations Given a collection of numbers, return all possible permutations. For example,[1,2,3] ha ...
- leetcode网解题心得——61. 旋转链表
目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1. ...
- 【noi 2.6_8787】数的划分(DP){附【转】整数划分的解题方法}
题意:问把整数N分成K份的分法数.(与"放苹果"不同,在这题不可以有一份为空,但可以类比)解法:f[i][j]表示把i分成j份的方案数.f[i][j]=f[i-1][j-1](新开 ...
- IPC 方法分类
IPC 方法分类 进程间通信 shell out 被调用程序在执行完毕之前接管用户的键盘和显示,退出后,调用程序重新控制键盘和显示并继续运行. 专门程序通常有文件系统与父进程进行通信,方法是在指定位置 ...
- LeetCode 169. Majority Element解题方法
题目: Given an array of size n, find the majority element. The majority element is the element that ap ...
随机推荐
- TypeScript 命名空间
随着代码的不断增加,我们需要有组织的组合代码.TypeScript在1.x版本中提供了命名空间的方式进行代码组织,这也是TypeScript官方代码的组织方式.同时,TypeScript还实现了Jav ...
- (二)spring初次遇见shiro
文章目录 集成 Spring 集成中的坑 shiroFilter 的工作原理 权限配置细节 集成 Spring pom.xml 添加shiro相关的依赖 我使用的版本是 ${version.shiro ...
- 【工具】导入导出 Excel
文章目录 前言 当前支持的功能 方法api 配置 如何使用(Demo) 实现思路(该工具类可正确的一个大前提) 后记 前言 之前写的项目中,有个需求,需要导出导入Excel表格: 本来很简单的一件事, ...
- Apache Shiro初认识
Apache Shiro 一.Shiro介绍: Apache软件基金会专门针对系统中的登录.加密.权限认证.授权等等功能进行了封装,不仅仅适用于JavaWeb项目,CS架构的系统也可以使用Shiro. ...
- python学习-56 贪吃蛇🐍
import random, pygame, sys from pygame.locals import * FPS = 15 WINDOWWIDTH = 640 WINDOWHEIGHT = 480 ...
- Gitlab服务不能启动postgresql
源博文:http://www.zxmseed.com/blog/911081 1.查看启动的服务 -sh-4.1$ gitlab-ctl status warning: gitlab-workhors ...
- puppet工作原理及部署redis主从篇
一.简介 1.国际惯例什么是puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统 ...
- 委托、Action泛型委托、Func泛型委托、Predicate泛型委托的用法
一.举一委托场景:天气很热,二狗子想去买瓶冰镇可乐,但是二狗子很懒,于是他想找个人代他去,于是要有个代理人. 创建代理人之前先定义委托:public delegate string BuyColaDe ...
- vue+iview的form表单校验总结
这篇文章时关于如何使用iview的form表单校验.主要学习如何使用form校验(以校验文字长度为例),以及如何动态添加校验规则和异步校验. 1.为需要校验的表单添加form标签 <!--注意: ...
- 十年感悟之 python之路
本文由 简悦 SimpRead 转码, 原文地址 https://laisky.com/p/python-road/ Changelog: updated at 2019/9/6 一.概述 本文起源于 ...