【LeetCode刷题之旅】
文章平均质量分 92
本专栏会一直更新leetcode中的题目,对遇到的每个题目做详细的总结和记录
All_In_gzx_cc
这个作者很懒,什么都没留下…
展开
-
排序相关系列题目精选~
十大基础排序算法可学习链接leetcode179. 最大数给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。示例如下:输入:nums = [3,30,34,5,9]输出:“9534330”思路分析转换成排序问题算法步骤:将nums中的各数字转化成字符串格式,保存在int2str中,应用以上自定义排序规则,对int2str中字符串执行排序拼接int2str中的所有字符串.原创 2021-04-12 17:42:29 · 92 阅读 · 0 评论 -
【链表】系列题目精选(1)
理论具体参考 链接1,链接2常用方法待整理例题涉及到链表的操作,一定要在纸上把过程先画出来,再写程序。leetcode206. 反转链表反转一个单链表。 示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路好理解的双指针定义两个指针: pre 和 cur ;pre 在前 cur 在后。每次让 pre 的 next 指向 cur ,实现一次局部反转局部反转完成之原创 2021-03-19 10:24:35 · 133 阅读 · 0 评论 -
回溯算法系列(1)
理论分析1.回溯算法是什么?其实回溯算法其实就是我们常说的 DFS 算法,本质上就是一种暴力穷举算法。解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:路径:也就是已经做出的选择。选择列表:也就是你当前可以做的选择。结束条件:也就是到达决策树底层,无法再做选择的条件。回溯是 DFS 中的一种技巧。回溯法采用 试错 的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计原创 2021-03-09 14:37:16 · 187 阅读 · 0 评论 -
【设计/数据结构】 题目汇总(1)
232. 用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾; int pop() 从队列的开头移除并返回元素; int peek()返回队列开头的元素; boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/po原创 2021-03-05 16:47:26 · 201 阅读 · 0 评论 -
动态规划(2)---回文串/子串系列题目
动态规划第一篇详见此博客,介绍了理论和股票买卖系列题目题目示例leetcode300. 最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组[0,3,1,6,2,2,7] 的子序列。法1.动态规划思路分析我们用dp[i]表示数组的前i个元素构成的最长上升子序列,如果要求dp[i],我们需要用num[i]和前面的数字一个个比较,如果比前面的任何一个数原创 2021-03-05 16:14:32 · 250 阅读 · 0 评论 -
【位运算】系列题目合集
理论位运算相关基础知识详见此篇 博客例题leetcode765. 情侣牵手N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。 一次交换可选择任意两人,让他们站起来交换座位。人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是 (2N-2, 2N-1)。这些情侣的初始座位 row[i] 是由最初始坐在第 i 个座位上的人决定的。思路这题使用贪心是原创 2021-03-03 18:01:51 · 543 阅读 · 2 评论 -
前缀和算法系列
理论preSum(前缀和) 方法能快速计算指定区间段 i - j 的元素之和。它的计算方法是从左向右遍历数组,当遍历到数组的 i位置时,preSum 表示 i 位置左边的元素之和。下面根据实际题目理解一下~例题leetcode303. 区域和检索 - 数组不可变给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象 int sumRa原创 2021-03-01 11:16:18 · 468 阅读 · 1 评论 -
滑动窗口/双指针系列(2)
滑动窗口 模板写法 详见 第一篇leetcode1438. 绝对差不超过限制的最长连续子数组给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。如果不存在满足条件的子数组,则返回 0 。思路题意:求一个最长的子数组,该子数组内的最大值和最小值的差不超过 limit。本题是求最大连续子区间,可以使用滑动窗口方法。滑动窗口的限制条件是:窗口内最大值和最小值的差不超过 limit。原创 2021-02-21 21:40:53 · 162 阅读 · 0 评论 -
Top-K算法
leetcode703. 数据流中的第 K 大元素设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。请实现 KthLargest 类:KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。int add(int val)将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。思路我们可以使用一个大小为 k 的优先队列来存储前 k 大的元素,其中优先队列的队头为原创 2021-02-11 16:31:59 · 423 阅读 · 0 评论 -
数组系列专题
数组类型题目常用解决方法待记录例题leetcode665. 非递减数列给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。思路拿到今天这个题,看到是个Easy,就没有想太多了。直接判断是不是只出现了一次下降!迅速写出下面的代码,题目给的两个测试用例都通过了,那么就提交!没想到原创 2021-02-07 10:35:34 · 95 阅读 · 0 评论 -
滑动窗口/双指针系列(1)
leetcode424. 替换后的最长重复字符给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104。解析如果一个问题暂时没有思路,可以先考虑暴力解法(不一定要实现)。当前问题的暴力解法是:枚举输入字符串的 所有 子串,对于每一个子串:如果子串里所有的字符都一样,就考虑长度更长的子串;如果当前子串里出现了至少两种字符,要想使得替换以后所有的字符都原创 2021-02-02 11:12:58 · 333 阅读 · 0 评论 -
最小生成树
关于图的几个概念定义:连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。强连通图:在有向图中,若任意两个顶点vi与vj都有路径相通,则称该有向图为强连通图。连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。最小原创 2021-01-20 16:16:16 · 405 阅读 · 0 评论 -
并查集(2)---一文搞定并查集(求连通域)类型问题!
上一篇关于并查集的教学 见此博客leetcode803. 打砖块有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白。砖块 稳定(不会掉落)的前提是:一块砖直接连接到网格的顶部,或者 至少有一块相邻(4 个方向之一)砖块 稳定 不会掉落时 给你一个数组 hits,这是需要依次消除砖块的位置。每当消除 hits[i] = (rowi, coli)位置上的砖块时,对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这一消除操作而掉落。一旦砖块掉落,它会立即从网格中消失(即,它不会落在其他稳原创 2021-01-16 16:43:36 · 406 阅读 · 0 评论 -
数学技巧---leetcode中遇到的数学相关解题技巧(持续更新中~)
1.模运算规则 避免数值溢出leetcode1018. 可被 5 整除的二进制前缀给定由若干 0 和 1 组成的数组 A。我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表 answer,只有当 N_i 可以被 5 整除时,答案 answer[i] 为 true,否则为 false。解题思路tmp = (tmp << 1) + A[i]; 考虑到数组A可能很长,如果每次都保留 tmp的值,则可能导致原创 2021-01-14 10:33:49 · 208 阅读 · 0 评论 -
并查集(1)---一文搞定并查集(求连通域)类型问题!
并查集被很多OIer认为是最简洁而优雅的数据结构之一,主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。当然,图论相关的问题,可以用并查集解决时,一般也可以用BFS或DFS来解决,此处不再展开,BFS和DFS相关算法可见此篇 文章。基本概念并查集是一种数据结构并查集这三个字,一个字代表一个意思:并(Union),代表合并查(Find),代表查找集(Set)原创 2021-01-11 17:10:49 · 625 阅读 · 0 评论 -
动态规划(1)---一文搞定leetcode买卖股票系列题目,不会来找我!!!
首先,动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等。既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值呗。动态规划的穷举有点特别,因为这类问题存在「重叠子问题」,如果暴力穷举的话效率会极其低下,所以需要「备忘录」或者「DP table」来优化穷举过程,避免不必要的计算。而且,动态规划问题一定会具备「最优子结构」,才能通原创 2021-01-09 15:41:53 · 633 阅读 · 0 评论