随笔分类 - LeetCode
摘要:滑动窗口 时间复杂度 算法的时间复杂度是 O(N),其中 N 是输入字符串/数组的长度。 为什么呢?简单说,字符串/数组中的每个元素都只会进入窗口一次,然后被移出窗口一次,不会说有某些元素多次进入和离开窗口,所以算法的时间复杂度就和字符串/数组的长度成正比。 大致逻辑 int left = 0, r
阅读全文
摘要:有序数组中的单一元素 传送门 方法一:全数组的二分查找 思路: 假设只出现一次的元素位于下标 x,由于其余每个元素都出现两次,因此下标 x 的左边和右边都有偶数个元素,数组的长度是奇数。 由于数组是有序的,因此数组中相同的元素一定相邻。对于下标 x 左边的下标 y,如果 $\textit{nums}
阅读全文
摘要:最长公共子序列类问题 最长公共子序列 最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)
阅读全文
摘要:最长递增子序列 最长递增子序列 传送门 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 动态规划解法 1、确定 base
阅读全文
摘要:KMP [找出字符串中第一个匹配的下标]( 28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode) ) KMP算法核心:利用匹配失败后的信息尽量减少模式串与主串的匹配次数以达到快速匹配的目的 首先了解字符串的前缀与后缀 对于串:ababacb 真前缀集合是{a,ab,aba,abab,
阅读全文
摘要:零钱兑换 [传送门]( 322. 零钱兑换 - 力扣(LeetCode) ) 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数
阅读全文
摘要:编辑距离 [传送门]( 72. 编辑距离 - 力扣(LeetCode) ) 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 一、思路 编辑距离问题就是给我们两个
阅读全文