qiuqiuyaq
这个作者很懒,什么都没留下…
展开
-
LeetCode+ 86 - 90 链表、双指针|字符串、动态规划、区间 dp|数组、双指针、排序|数学|回溯、剪枝
链表的快排的其中一部分,将所有小于 x 的节点排在左边,把所有大于等于 x 的节点排在右边,左边两边的节点相对顺序不要发生变化,一开始 2 在 5 前面,排序后 2 还是在 5 前面原来链表是 1、4、3、2、5、2,分界点 x = 3,需要把所有小于 3 的放到左边,把所有大于 3 的放在右边,由于不知道左右两边有多少个元素,先看两个新链表存储左边是谁,右边是谁,然后再把两个链表拼接,把左边的最后一共点指向开始的第一个点快排、归并、浮点数二分、高精度加、减法扰乱字符串 给我们一个字符串 s1原创 2022-07-16 14:22:40 · 228 阅读 · 0 评论 -
LeetCode+ 81 - 85 数组、二分查找|链表、双指针|链表|单调栈|单调栈
算法标签:数组、二分查找 参考第 33 题LeetCode+ 31 - 35 二分专题_小雪菜本菜的博客-CSDN博客(线性扫描) O(n)参考题解LeetCode 81 Search in Rotated Sorted Array II - AcWing这道题类似于第 33 题,不同点在于这道题里的数组可能包含相同元素。目前能想到的二分做法的最坏时间复杂度都是 O(n),所以索性就拿线性扫描做了^^时间复杂度分析:整个数组只扫描一遍,所以时间复杂度是 O(n)与第 33 题的区别是里面可能有重复元原创 2022-07-04 06:58:50 · 177 阅读 · 1 评论 -
LeetCode+ 76 - 80 暴搜专题
算法标签:哈希表、字符串、滑动窗口算法标签:回溯、组合类型枚举递归实现组合型枚举、带分数_小雪菜本菜的博客-CSDN博客实现组合类型枚举,枚举一下从 n 个数里面选 k 个数组合类型枚举最需要考虑的就是判重,有 3 个数 1、2、3,从中选 2 个数,选 1、2 和 2、1 其实是同一种方案,我们需要考虑的是如何把重复的方案去掉,去掉重复方案顺序是不同的之所以有重复方案是因为我们在选择的时候顺序是不同的,我们只需要人为规定一下只能按照某种顺序选,这样的话方案就是唯一的规定所有方案从前往后选,不能出现先选了原创 2022-07-01 19:22:44 · 199 阅读 · 0 评论 -
LeetCode+ 71 - 75
给我们一个路径,要求把文件路径化简,给定的路径一定是合法的 Linux 路径,一个合法的 Linux 路径一般从 / 开始,/ 表示根目录,有很多的子目录 home、y,"." 表示在当前目录(一个 "." 没有任何变化), ".." 表示返回上一级目录如果一个路径是 / home / a / .. / b,根目录 → home → a → b,化简其实就是把所有的 "." 和 ".." 去掉,当前案例去掉就是 / home / b注意特殊情况:斜杠 " / " 可能会有连续多个,需要把连续多个斜原创 2022-06-30 19:20:19 · 312 阅读 · 0 评论 -
LeetCode+ 66 - 70 高精度、二分专题
给我们一个整数,这个整数是用一个数组来表示的,在这个整数的基础上加 1,加 1 之后还是用数组来表示,数组的最高位放到第 0 个位置,次高位放到第 1 个位置,假设这个数组是没有前导 0,其实就是给了一个很长的整数,模拟加法的过程由于最高位可能会进位,所以需要先把数组翻转,要让个位在第 0 个位置,十位在第 1 个位置,从个位开始做,每次计算当前这一位的值是多少,看一下有没有进位,如果有进位就进一位每一次当前位置上的数应该怎么计算呢?个位上应该是原来位置上的数加上 1,再加上进位,加上 1 可以看成是前面进原创 2022-06-28 00:15:30 · 226 阅读 · 2 评论 -
LeetCode+ 51 - 55 回溯、动态规划专题
给出一个国际象棋的棋盘,有 n 行、n 列 要在这个棋盘里面摆放 n 个皇后,国际象棋里面的皇后可以横着走,竖着走,而且可以斜着走,要在这个棋盘上摆放 n 个皇后,要求这 n 个皇后之间是不能被攻击到的,要求不能有两个皇后子在同一行、同一列、或者在同一条对角线上,要求输出所有方案动态回溯、N皇后问题_小雪菜本菜的博客-CSDN博客直接搜索就可以了,搜索之前观察一些性质:由于所有皇后之间是不能相互攻击到的,所以每一行最大只能放一个皇后,由于要放 n 个皇后,一共有 n 行,所以每行恰好放一个皇后,接下来想一原创 2022-06-27 01:39:05 · 223 阅读 · 0 评论 -
LeetCode+ 56 - 60
双指针算法、位运算、离散化、区间合并_小雪菜本菜的博客-CSDN博客给我们一堆没有任何交集的区间 把区间分为前面完全每交集的一部分,分成后面完全没交集的一部分,中间有交集的一部分中间有交集的一部分合并之后一定会变成一个区间从第k个区间开始连续一段存在与指定区间有相交的关系,需要将有相交关系的区间与指定区间进行合并,将合并后的区间加入到 res 中,当枚举的区间的 左端点 ......原创 2024-01-11 18:47:44 · 356 阅读 · 0 评论 -
LeetCode+ 46 - 50
算法标签:数组、回溯给我们一个没有重复数字的数列让我们求它的全排列递归暴搜的实现按照什么顺序来搜索,排列问题有很多种搜索的顺序①我们可以从前往后枚举每一个位置填哪个数,可以先枚举第一个位置填哪个数,再枚举第二个位置填哪个数,以此类推 √②依次枚举每个数放到哪个位置上,第一个数可以放在第 0 个位置上,可以放到第一个位置上也可以放到第二个位置上;第二个数可以放到第 0 个位置上,可以放到第一个位置上也可以放到第二个位置上对于排列问题来说,以上两种搜索顺序都是可以的接下来画一下第一种方案的递归搜索树,每一个叶子原创 2022-06-22 00:00:24 · 1225 阅读 · 1 评论 -
LeetCode+ 41 - 45 计数排序|单调栈|字符串、模拟|动态规划|双指针、贪心、动态规划
算法标签:数组、哈希表给出一个无序数组,要在里面找到最小的没有出现过的正整数,可以先排序,排序之后从前往后扫描,扫描到第一个没有出现过的整数就可以了,排序的时间复杂度是 O( nlogn )c++ 的指令只能执行 10^8 次先把所有的数放到哈希表里面,放完之后,再从小到大枚举每一个正整数,知道找到第一个没有出现过的正整数为止,这个就是答案首先,我们先把所有的数放到哈希表里面,这一步的时间复杂度为 O( n ),第二步枚举最多从 1 开始枚举到 n + 1,枚举到n + 1 的时候,表示已经枚举了 n +原创 2022-06-21 19:39:49 · 180 阅读 · 1 评论 -
LeetCode+ 36 - 40 模拟|数组、回溯、矩阵、暴搜|模拟|回溯|回溯
算法标签:数组、哈希表、矩阵、模拟 给出了数独的概念,每行、每列、每个九宫格要填 1 ~ 9,每个数只能填一次,而且 1 ~ 9 都要出现,这就是一个合法的数独题目给出一个没有填完的数独,要求判断当前这个没有填完的数独有没有矛盾,只需要判断当前数独的每一行、每一列和每一个九宫格里面有没有重复元素,只需要开一个 bool 数组判断就可以了解数独..................原创 2022-06-17 13:57:27 · 227 阅读 · 0 评论 -
LeetCode+ 31 - 35 实现库函数 next_permutation( )|栈|二分查找|二分查找|二分查找
给我们一个序列,求这个序列所有的排列里面,比给定序列大的最小的那个序列,也就是在字典序里面当前这个序列的下一个序列是什么如果序列是 1 3 2,返回 2 1 3,如果是 3 2 1,返回 1 2 3例如给我们一个序列,应该尽可能保证高位不变,只变后几位,这样才能保证是字典序最小的,因此我们可以从后往前去考虑只要后面是降序,当前这一位就不可能发生变化,如果要让当前字典序大一些就要找到第一个非降序的位置这个数应该变成后面这些位里面比当前这个位大的最小的那一位找到第一个非降序的位置 3,然后在后面找比 3 大的最原创 2022-06-16 08:57:51 · 139 阅读 · 2 评论 -
LeetCode+ 26 - 30 数组、双指针|数组、双指针|双指针、字符串、字符串匹配、KMP|位运算、数学|字符串、滑动窗口
算法标签:数组、双指针原地算法_百度百科给出一个有序数组,相同的元素一定是相邻的,需要用原地算法删除重复的元素:1.不能开数组 2.不能写递归,用的额外的空间必须是常数,需要用原地算法删除里面重复的元素,然后把所有不同的元素排到数组的最前面,返回不同元素的数量后面的元素无所谓样例 1删除后的数组的前面是 1、2 ,后面的位置是什么元素都可以,然后返回 2经典的双指针算法,c++ 库函数里面的一个算法 unique 函数首先想一下怎么不重不漏找出来所有不同的元素?如果一个数和前面的数一样,这个数就可以被抛弃掉原创 2022-06-14 11:13:08 · 178 阅读 · 1 评论 -
LeetCode+ 21 - 25 链表、二路归并|字符串、递归|链表、堆、优先队列、归并排序|链表|链表
算法标签:递归、链表、二路归并给出两个升序的链表,要把它合并成有升序的链表,二路归并算法排序算法 --- 二分查找、快排、归并、分治思想、双重最值问题_小雪菜本菜的博客-CSDN博客快排、归并、浮点数二分、高精度加、减法_小雪菜本菜的博客-CSDN博客每次看两个链表剩余的数的第一个数,两个指针指向两个链表的开头每次比较两个指针指向的元素的大小,每次把比较小的拿到新链表的最后一个位置,新链表一个开始为空题目样例中,一开始两个链表指向的数都是一样的,随便拿一个就可以了,可以把第一个链表的第一个节点放到新链表中,原创 2022-06-10 09:54:11 · 153 阅读 · 0 评论 -
LeetCode+ 16 - 20 双指针、排序|暴搜、递归|双指针、排序|链表|栈、字符串
电话号码的字母组合算法标签:哈希、字符串、回溯、暴搜给定一个仅包含数字 的字符串,返回所有它能表示的字母组合,每一个数字代表 3 - 4 个字符,给出摁的顺序,问对应了多少种不同的字符序列?样例中摁 23,2 有 abc 三种选择,3 有def 三种选择,相乘一共有九种选择题目给出一个不定长度的字符串,要求把它所有的组合全部输出下面给出递归搜索树,然后把递归搜索树转换成代码递推和递归_小雪菜本菜的博客-CSDN博客在递归的时候,①需要用 string 存储路径 ②需要存储当前是第几位怎么可以很方便地求原创 2022-06-10 18:19:22 · 142 阅读 · 0 评论 -
LeetCode+ 11 - 15 贪心、双指针|哈希表、字符串|哈希表、字符串|字符串、枚举|双指针
算法标签:贪心、数组、双指针假设有一个二维的平面,这个二维平面的每一个整点坐标上有一根竖线,从中挑两条竖线,两条竖线会形成一个凹槽,往凹槽里面倒水,题目要求选择选择两条竖线使得倒的水的总面积最大输入的是一个数组,下标是横坐标,数组的值就是它的高度,题目给出了很多柱子的位置和高度,问怎么选可以使得总面积最大?两个指针分别指向两侧,每次比较这两个指针指向柱子的高度,如果第二个指针指向的高度比较低的话,就把第二个指针往前移动一位;,如果第一个指针指向的高度比较低的话,就把第一个指针往后移动一位;每移动一次,求当前原创 2022-06-06 07:52:02 · 151 阅读 · 1 评论 -
LeetCode+ 6 - 10 字符串、找规律|数学|字符串|数学|动态规划
算法标签:字符串 给出一个字符串,需要先把它按 Z 字行写一遍,然后再按行读出来行数是 6 就表示第一列有 6 个数,这里可以的都是行数大于 1 的情况,如果行数是 1,需要特判第一行是以 0 开头的,公差是 2n - 2 的等差数列 整数反转算法标签:数学 给出一个 32 位的有符号整数 ,需要将这个整数的每一位上的数字进行反转后输出,如果翻转之后这个数溢出的话就返回 0法一:可以转换成字符串,翻转,再转换成整数法二:把一个数的每一位扣出来,以正数为例把 "4321" 变成整数,先定义一个变原创 2022-06-19 12:04:01 · 406 阅读 · 2 评论 -
LeetCode 4 第 k 小数详解
暴力做法 1:时间复杂度达不到要求需要寻找两个数组的中位数,直接开一个大数组,把两个有序数组合并到大数组中,再找最中间那个数就是答案暴力做法 2:用两个指针指向两个有序数组的起始位置,逐个扫描元素,哪个指针所对应的值更小,就把哪个指针往后移动,移动到第 9 次的时候,到达中位数的位置每次删除一个第一个指针从 1 移动到 2,代表把 1 抛弃了,从 2 移动到 3,代表把 2 抛弃了,每移动一个指针,代表抛弃一个,最终找到目标值做法 1:题目原来要求找两个有序数组的中位数,将问题转换成找两个有序数组合并之后第原创 2022-06-04 16:11:36 · 775 阅读 · 0 评论 -
LeetCode+ 1 - 5 哈希表|数学|哈希表、字符串、滑动窗口|递归|枚举
两数之和 给出一个数组和一个目标值,让我们在数组中找到两个不同的数,两个数的和等于目标值,要求返回它们的下标,保证一定有解,如果有多组解,随便输出一组解即可样例:在 [ 2,7,11,15 ] 中选两个数,使得它们的和是 9,选择 2 和 7 即可,注意返回的是这两个数的下标,所以返回的是 0 和 1暴力枚举两个数,两重循环,如果和等于目标值就返回,时间复杂度为 O(n^2)排序后双指针,时间复杂度为 O(nlogn)时间复杂度为 O(n)哈希表可以用 O(1) 的时间找出.原创 2022-06-03 14:55:43 · 300 阅读 · 0 评论