string题目
type
status
date
slug
summary
tags
category
icon
password
Property
 

 

无重复字符的最长子串

题目:给定一个字符串s ,请找出其中不含有重复字符的最长子串的长度
示例:
 
图 graph
type
status
date
slug
summary
tags
category
icon
password
Property
 

图的定义

图 (graph)是一个二元组
  • 是非空集,称为点集 (vertex set),对于中的每个元素,称其为顶点 (vertex)节点(node),简称
  • 各结点之间边的集合,称为边集 (edge set)
常用 表示图。当都是有限集合时,称 有限图。当是无限集合时,称无限图
notion image
子图(Sub Graph):对于图 ,如果存在,则称图是图的一个子图。特别的,也是其自身的子图。
graph 题目
type
status
date
slug
summary
tags
category
icon
password
Property

岛屿数量

题目:给一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,可以假设该网格的四条边均被水包围。
示例:
可以将二维网格看成一个无向图,竖直或水平相邻的1之间有边相连。为了求出岛屿的数量,可以扫描整个二维网格。如果一个位置为1,则以其为起始节点开始进行深度优先搜索。在深度优先搜索的过程中,每个搜索到的1都会被重新标记为0。最终岛屿的数量就是进行深度优先搜索的次数。
 

岛屿的最大面积

双指针与滑动窗口
type
status
date
slug
summary
tags
category
icon
password
Property
 

 
双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问,从而达到相应的目的。如果两个指针方向相反,则称为对撞指针。如果两个指针方向相同,则称为快慢指针。如果两个指针分别属于不同的数组 / 链表,则称为分离双指针
 

对撞指针

对撞指针:指的是两个指针leftright分别指向序列第一个元素和最后一个元素,然后left指针不断递增,right不断递减,直到两个指针的值相撞(即left == right),或者满足其他要求的特殊条件为止。
 

两数之和 II - 输入有序数组

排序
type
status
date
slug
summary
tags
category
icon
password
Property
 
notion image
稳定排序:如果a原本在 b 前面,且a == b,排序之后 a 仍然在b前面
非稳定排序:如果a原本在 b 前面,且a == b,排序之后 a 不一定在b前面
原地排序 / 非原地排序:区别在于是否使用额外的数组辅助排序
 
 
 
冒泡排序
冒泡排序
选择排序
选择排序
计数排序
计数排序
桶排序
桶排序
枚举
type
status
date
slug
summary
tags
category
icon
password
Property
 
枚举算法(Enumeration Algorithm):也称为穷举算法,指的是按照问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,将它们逐一与目标状态进行比较以得出满足问题要求的解。在列举的过程中,既不能遗漏也不能重复。
 
核心思想:通过列举问题的所有状态,将它们逐一与目标状态进行比较,从而得到满足条件的解。
 
要点
  • 给出解空间:建立简洁的数学模型。枚举的时候要想清楚:可能的情况是什么?要枚举哪些要素?
  • 减少枚举的空间:枚举的范围是什么?是所有的内容都需要枚举吗?
  • 选择合适的枚举顺序:根据题目判断
 
 

两数之和

模拟
type
status
date
slug
summary
tags
category
icon
password
Property
 
模拟就是用计算机来模拟题目中要求的操作。
 
一只长度不计的蠕虫位于英寸深的井的底部。它每次向上爬英寸,但是必须休息一次才能再次向上爬。在休息的时候,它滑落了英寸。之后它将重复向上爬和休息的过程。蠕虫爬出井口需要至少爬多少次?如果蠕虫爬完后刚好到达井的顶部,我们也设作蠕虫已经爬出井口。
 

分隔链表

题目:
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。应当 保留 两个分区中每个节点的初始相对位置。
示例:
递归
type
status
date
slug
summary
tags
category
icon
password
Property
 
递归(Recursion),在数学和计算机科学中是指在函数的定义中使用函数自身的方法,在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法
 
基本思想:某个函数直接或者间接地调用自身,这样原问题的求解就转换为了许多性质相同但是规模更小的子问题。求解时只需要关注如何把原问题划分成符合条件的子问题,而不需要过分关注这个子问题是如何被解决的。
 
递归代码最重要的两个特征:结束条件和自我调用。自我调用是在解决子问题,而结束条件定义了最简子问题的答案。
 
比如阶乘的计算方法在数学上的定义为:
可以使用调用函数自身的方式来实现阶乘函数fact(n)
分治
type
status
date
slug
summary
tags
category
icon
password
Property
 
分治(Divide and Conquer),「分而治之」,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。
 
分治算法大概的流程可以分为三步:分解 -> 解决 -> 合并。
  1. 将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题----“分”
  1. 将最后子问题可以简单的直接求解----“治”
  1. 将所有子问题的解合并起来就是原问题打得解----“合”
notion image
分治法能解决的问题一般有如下特征:
  • 该问题的规模缩小到一定的程度就可以容易地解决
  • 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质,利用该问题分解出的子问题的解可以合并为该问题的解
  • 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题
贪心
type
status
date
slug
summary
tags
category
icon
password
Property
 
贪心算法(greedy algorithm),是用计算机来模拟一个「贪心」的人做出决策的过程。这个人十分贪婪,每一步行动总是按某种指标选取最优的操作。而且他目光短浅,总是只看眼前,并不考虑以后可能造成的影响。
核心思想:将求解过程分成「若干个步骤」,然后根据题意选择一种「度量标准」,每个步骤都应用「贪心原则」,选取当前状态下「最好 / 最优选择(局部最优解)」,并以此希望最后得出的结果也是「最好 / 最优结果(全局最优解)」。
 
 
对许多问题来说,可以使用贪心算法,通过局部最优解而得到整体最优解或者是整体最优解的近似解。但并不是所有问题,都可以使用贪心算法的。一般来说,这些能够使用贪心算法解决的问题必须满足下面的两个特征:
  • 贪心选择性质
    • 贪心选择指的是一个问题的全局最优解可以通过一系列局部最优解(贪心选择)来得到。当进行选择时,直接做出在当前问题中看来最优的选择,而不用去考虑子问题的解。在做出选择之后,才会去求解剩下的子问题
      notion image
      贪心算法在进行选择时,可能会依赖之前做出的选择,但不会依赖任何将来的选择或是子问题的解。运用贪心算法解决的问题在程序的运行过程中无回溯过程。
  • 最优子结构
    • 最优子结构指的是一个问题的最优解包含其子问题的最优解
回溯
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 
回溯算法(Backtracking):一种能避免不必要搜索的穷举式的搜索算法。采用试错的思想,在搜索尝试过程中寻找问题的解,当探索到某一时,发现原先的选择并不满足求解条件,或者还需要满足更多求解条件时,就退回一步(回溯)重新选择,这种走不通就退回再走的技术称为「回溯法」,而满足回溯条件的某个状态的点称为「回溯点」。
 
简单来说,回溯算法采用了一种 「走不通就回退」 的算法思想。
回溯算法通常用简单的递归方法来实现,在进行回溯过程中更可能会出现两种情况:
  1. 找到一个可能存在的正确答案
  1. 在尝试了所有可能的分布方法之后宣布该问题没有答案
 
运算
type
status
date
slug
summary
tags
category
icon
password
Property
目录
目录

 
 
位运算(Bit Operation):在计算机内部,数是以「二进制(Binary)」的形式来进行存储。位运算就是直接对数的二进制进行计算操作,在程序中使用位运算进行操作,会大大提高程序的性能。
notion image
位运算基础操作
运算符
描述
规则
&
按位与运算符
只有对应的两个二进位都为时,结果位才为
1
...
7891011
...
78