leetcode刷题笔记
文章平均质量分 89
拾牙慧者
会点c++、python;
展开
-
《LeetcodeHot100非困难题补录》
目录11. 盛最多水的容器11. 盛最多水的容器这个解释挺好的O(n) 双指针解法:理解正确性、图解原理(C++/Java)原创 2021-05-15 18:40:08 · 265 阅读 · 0 评论 -
《搜索算法——DFS、BFS、回溯》
深搜深搜DFS,在搜索到一个新节点时,立即对该新节点进行遍历,需要用到栈实现,或者使用与栈等价的递归实现。深搜也可以用来检测环路:记录每个遍历过的节点的父节点,若有一个节点被再次遍历且父节点不同,则说明有环。有时我们可能会需要对已经搜索过的节点进行标记,以防止在遍历时重复搜索某个节点,这种做法叫做状态记录或者记忆化。695. 岛屿的最大面积一般来说,深搜可以分为主函数和辅助函数。主函数用于遍历所有的所有搜索位置,判断是否可以开始搜索,如果可以即用辅助函数进行搜索。辅助函数负责深搜的递归调用或者原创 2021-05-11 16:10:03 · 386 阅读 · 1 评论 -
《位运算技巧以及Leetcode的一些位运算题目》
技巧位运算的一些基础技巧: x ^ 0... = x x ^ 1... = ~x x ^ x = 0 x & 0... = 0 x & 1... = x x & x = x x | 0... = x x | 1... = 1... x | x = x进阶技巧:n & (n-1) 可以去除n的位级表示中最低的一位:如 n = 11110100 , n - 1 = 11110011n & (n-1) = 11110000n & (-原创 2021-04-27 14:18:39 · 859 阅读 · 0 评论 -
《dp补卡——买卖股票问题》
目录121. 买卖股票的最佳时机贪心dp思路滚动数组优化122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV309. 最佳买卖股票时机含冷冻期714. 买卖股票的最佳时机含手续费121. 买卖股票的最佳时机贪心取最左最小值,取最右最大值,差值为最大利润class Solution {public: int maxProfit(vector<int>& prices) { int n = prices.s原创 2021-04-25 14:16:00 · 215 阅读 · 0 评论 -
《dp补卡——子序列问题》
300. 最长递增子序列step1:dp[i]:下标<=i的最长子序列长度。即以 nums[i] 结尾 的「上升子序列」的长度,注意以nums[nums.size()-1]结尾的上升子序列长度并不一定是全局最优值,所以要从dp[i]中找到最大值。step2:状态转移方程:if(nums[i] > nums[j]) dp[i] = max(dp[i],dp[j]+1); //取得dp[j]+1中最大的那个值作为dp[i]step3:初始化每一个i,至少都是1.step4:遍历顺序,从原创 2021-04-25 22:54:58 · 248 阅读 · 0 评论 -
牛客网与leetcode刷题(高频题中简单or中等的)
1、反转链表反转链表https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=190&tqId=35203&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high-rd%2Fquestion-ranking&tab=answerKey原创 2021-03-06 22:15:30 · 1695 阅读 · 1 评论 -
算法题复习(回溯)
目录base code棋盘问题51. N 皇后37. 解数独组合问题77. 组合未剪枝优化剪枝优化216. 组合总和 III未剪枝优化剪枝优化17. 电话号码的字母组合39. 组合总和未剪枝优化剪枝优化40. 组合总和 II,挺重要的,涉及到去重了切割问题131. 分割回文串子集问题78. 子集90. 子集 II,有树层去重491. 递增子序列,也需要数层去重,使用unordered_set排列问题46. 全排列47. 全排列 II + 数层去重行程安排+高级容器的使用,现在还没吃透base code.原创 2021-02-28 13:50:09 · 338 阅读 · 0 评论 -
算法题复习(栈与队列、二叉树)
目录栈与队列栈用于匹配的问题队列用于堆二叉树系列深度遍历,递归与迭代层序遍历二叉树属性二叉树修改与构造标题栈与队列栈用于匹配的问题20. 有效的括号https://leetcode-cn.com/problems/valid-parentheses/不匹配的三种情况;1、字符串左方向的括号多余了2、字符串右方向的括号多余了3、字符串括号没有多余,但是类型不匹配。使用栈的时候三者对应到的栈的情况;1、已经遍历完字符串,但是栈不为空2、遍历字符串匹配的过程中,栈已经为空了3、再遍历字.原创 2021-02-26 12:28:17 · 416 阅读 · 0 评论 -
算法题复习(快排、链表、二分、哈希、双指针)
链表部分复习链表定义struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {}};原创 2021-02-24 13:28:02 · 335 阅读 · 0 评论 -
二分法变种小结(leetcode 34、leetcode33、leetcode 81、leetcode 153、leetcode 74)
目录二分法细节1、leetcode 34 在排序数组中查找元素的第一个和最后一个位置2、不完全有序下的二分查找(leetcode33. 搜索旋转排序数组)3、含重复元素的不完全有序下的二分查找(81. 搜索旋转排序数组 II)3、不完全有序下的找最小元素(153. 寻找旋转排序数组中的最小值)4、二维矩阵二分(74. 搜索二维矩阵)二分法细节1、计算mid时,不能使用(left + right)/2,否则有可能计算溢出。可以使用下面方法计算:mid = left + ((right - left.原创 2020-12-18 23:25:59 · 366 阅读 · 1 评论 -
leetcode 滑动窗口小结 (三)
力扣中关于滑动窗口的三道题目的思考分析:978. 最长湍流子数组1052. 爱生气的书店老板1208. 尽可能使字符串相等他们的共性就是滑动窗口并不是单纯在原数组上滑动的,而是在构建的差分数组或者其他具有含义的数组上移动的。原创 2020-12-15 17:19:16 · 239 阅读 · 0 评论 -
leetcode 滑动窗口小结 (二)
本小结记录了两个相类似的滑动窗口题目。并且每个题目都提供了两种写法,一个是我的初步思路还有一个就是优化思路。原创 2020-12-14 22:32:43 · 210 阅读 · 0 评论 -
单调栈 leetcode整理(三)
42. 接雨水901. 股票价格跨度581. 最短无序连续子数组单调栈的题目暂时就到这儿了,接下来继续之前的双指针类型题目吧。原创 2020-12-12 17:49:50 · 218 阅读 · 0 评论 -
leetcode中使用c++需要注意的点以及各类容器的初始化、常用成员函数
目录1、传引用2、vector使用初始化方法常用成员函数3、字符串string初始化方法常用成员函数4、哈希表 unordered_map初始化常用成员函数示例:计数器5、哈希集合 unordered_set初始化常用成员函数6、队列 queue初始化成员函数7、栈stack初始化常用成员函数7、emplace_back 与 push_back的区别8、未完待续1、传引用C++函数参数默认是传值的,如果使用数组之类的容器作为参数,一般会加上&符号表示传引用。没有加&,就是传值,会涉.原创 2020-12-10 15:10:39 · 808 阅读 · 0 评论 -
单调栈 leetcode整理(二)
简单记录:496. 下一个更大元素 I739. 每日温度503. 下一个更大元素 II为什么单调栈的时间复杂度是O(n)原创 2020-12-10 13:03:24 · 272 阅读 · 0 评论 -
单调栈 leetcode整理(一)
单调栈知识402. 移掉K位数字1673. 找出最具竞争力的子序列316. 去除重复字母(1081. 不同字符的最小子序列)321. 拼接最大数原创 2020-12-09 11:14:01 · 351 阅读 · 0 评论 -
leetcode 69. x 的平方根 思考分析
题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8 输出: 2 说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。二分法我们要找的是满足 ans * ans <= x 中ans的最大值。以0位左边界,x为右边界开始折半查找满足情况的数。由于题目要求的是向下取整的数,而最后不满足while条原创 2020-12-04 15:36:37 · 324 阅读 · 0 评论 -
leetcode 134. 加油站 思考分析
目录题目1、暴力法,双层遍历2、贪心题目在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入:gas = [1,2,3,4.原创 2020-12-04 14:42:07 · 254 阅读 · 0 评论 -
详细讲解设计跳表的三个步骤(查找、插入、删除)
目录写在前面跳表概要查找步骤插入步骤删除步骤完整代码写在前面关于跳表的一些知识可以参考这篇文章,最好是先看完这篇文章再看详细的思路->代码的复现步骤:Redis内部数据结构详解(6)——skiplist关于跳表的插入、删除基本操作其实也就是链表的插入和删除,所以如果不熟悉的话还得先回顾链表的插入以及删除是怎样的,可以参考:【数据结构基础笔记】【链表】相关代码以及其他语言的写法或者其他思路可以参考:1206. 设计跳表代码参考链接:https://leetcode-cn.com/p.原创 2020-12-03 23:43:15 · 6414 阅读 · 3 评论 -
leetcode 1005. K 次取反后最大化的数组和 思考分析
题目给定一个整数数组 A,我们只能用以下方法修改该数组:我们选择某个索引 i 并将 A[i] 替换为 -A[i],然后总共重复这个过程 K 次。(我们可以多次选择同一个索引 i。)以这种方式修改数组后,返回数组可能的最大和。示例 1:输入:A = [4,2,3], K = 1输出:5解释:选择索引 (1,) ,然后 A 变为 [4,-2,3]。示例 2:输入:A = [3,-1,0,2], K = 3输出:6解释:选择索引 (1, 2, 2) ,然后 A 变为 [3,1,0,2]。原创 2020-12-03 13:22:08 · 225 阅读 · 0 评论 -
leetcode 35. 搜索插入位置 思考分析
目录题目暴力二分迭代二分递归题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0暴力class Solution {public: int .原创 2020-12-02 20:40:21 · 179 阅读 · 0 评论 -
leetcode 45. 跳跃游戏 II 思考分析
题目给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。思考下面看我的思路草图:每次需要更新的参数:当前遍历的start、end,当前遍历范围中找到的最大的下一原创 2020-12-02 11:02:56 · 256 阅读 · 2 评论 -
leetcode 55. 跳跃游戏 思考分析
第一个思路,抓住0的特质。第二个思路,抓住范围迭代的特质,且符合贪心逻辑。原创 2020-12-01 11:41:01 · 258 阅读 · 0 评论 -
leetcode 122. 买卖股票的最佳时机 II 思考分析
目录题目贪心法题目给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第.原创 2020-11-30 22:02:04 · 186 阅读 · 0 评论 -
leetcode 53. 最大子序和 动态规划解法、贪心法以及二分法
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。动态规划解法这个是之前的动态规划的解法:LeetCode 53:最大子序和解题以及优化思路贪心法局部最优:当连续和为负数的时候时候放弃掉,将和sum清掉。从下一个元素重新计算原创 2020-11-30 21:15:12 · 320 阅读 · 0 评论 -
二分法:两个有序数组长度为N,找到第N、N+1大的数
题目两个数组长度为N,找到第N、N+1大的数思路1:双指针,O(N)复杂度简述思路:如果当前A指针指向的数组A的内容小于B指针指向的数组B的内容,那么A指针往右移动,然后nums(当前已经遍历过的数字个数)也加一。如果此时已经遍历过的数字个数等于N那么九江移动之前的A指针指向的A数组的内容送入result。其他情况,以相反的逻辑进行。//双指针法求解vector<int> GetMid_On(vector<int>& A, vector<int>&原创 2020-11-30 19:03:48 · 750 阅读 · 2 评论 -
leetcode 322. 零钱兑换 思考分析
关键词:动态规划、自底向上可联系eetcode 39. 组合总和,一起思考,并且做区分。一个是求所有解的集合,一个是求最优解原创 2020-11-27 19:07:50 · 263 阅读 · 0 评论 -
leetcode 376. 摆动序列 思考分析
贪心的第二题,不熟悉,记录一波,以后回过头继续看。原创 2020-11-27 10:20:50 · 242 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列 (从重叠子问题到备忘录到dp数组迭代解法)
斐波那契数列求解方法:1、暴力递归,含有大量冗余计算,时间复杂度O(2^n)2、备忘录递归解ordp动态规划,可以将时间复杂度降为O(n)3、滚动数组优化,将空间复杂度由O(n)降低至O(1)原创 2020-11-24 21:39:40 · 333 阅读 · 0 评论 -
leetcode 第 216 场周赛 整理
菜鸡的周赛整理: 216 场周赛原创 2020-11-24 19:32:33 · 364 阅读 · 0 评论 -
leetcode 455. 分发饼干 思考分析
关键词:贪心、简单题原创 2020-11-24 14:19:12 · 188 阅读 · 0 评论 -
leetcode 232. 用栈实现队列 思考分析
题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size原创 2020-11-20 23:17:01 · 182 阅读 · 0 评论 -
leetcode 198. 打家劫舍 思考分析
本笔记记录了刷力扣198题的思路和代码。核心:动态规划+滚动数组优化。原创 2020-11-18 11:27:37 · 235 阅读 · 0 评论 -
leetcode 37. 解数独 思考分析
目录题目核心思路的不断细化1、核心框架2、考虑到每个位置的工作3、考虑到到达最后一列、该位置的数已经预置的情况4、判断是否符合规则的函数5、确定递归终止条件+确定函数返回值AC代码题目编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:1、数字 1-9 在每一行只能出现一次。2、数字 1-9 在每一列只能出现一次。3、数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。 一个数独。 .原创 2020-11-17 22:44:06 · 262 阅读 · 0 评论 -
leetcode 51. N 皇后 思考分析
目录题目思考AC代码题目n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。思考首先以N=4为例,画出解空间树的一部分:根据模板:void backtracking(参数){ if(终止条件) { 存放结果; return; } for(选择:本层集合中元素(树中结点孩子的数量就是集合的大小)) { 处理结点; backtracking(路径,选择列表); //递归 回溯,撤销处理结果; }}1、确.原创 2020-11-17 20:14:37 · 785 阅读 · 1 评论 -
leetcode 46. 全排列 思考分析
目录1、题目2、思考3、优化1、题目给定一个 没有重复 数字的序列,返回其所有可能的全排列。2、思考老规矩,先画出给出的例子的解空间树:观察我们可以发现:1、深度向下一层深入时,出现过的元素不能再出现,我们能选择的只有没有选择过的元素,此处我用的哈希法set。2、结束条件是:同一个树枝上的结点个数>=nums数组的size().于是可以得到初步代码:注意这里判断元素是否出现过我用的set,后面会有优化class Solution {public: vector<.原创 2020-11-11 11:09:12 · 269 阅读 · 0 评论 -
leetcode 90. 子集 II 思考分析
与本题相关联的题目解析:leetcode 78. 子集 思考分析leetcode 40. 组合总和 II思考分析题目给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。思考在文章 leetcode 40. 组合总和 II思考分析我们讲过去重的方法,分为树层去重和树枝去重。首先根据例子画出解空间树草图:观察发现,同一层重复取2就要过滤掉,同个树枝上是可以重复取相同元素的。这样就确定了去重条件,在层遍历的for循环中加入://.原创 2020-11-09 19:19:17 · 207 阅读 · 0 评论 -
leetcode 78. 子集 思考分析
题目给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。思考分析画出解空间树。我们可以发现我们所需要的结果是解空间的所有结点。而我们之前组合问题和分割问题都是收集树的叶子结点。所以我们只需要将每个结点放入结果中就行了class Solution {public: vector<vector<int>> result; vector<int> res; void backtra原创 2020-11-07 13:23:20 · 246 阅读 · 0 评论 -
LeetCode 454. 四数相加 II 思考分析
题目给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。思考这一题和LeetCode 18. 四数之和题目相似,但是本质不同。因为三数之和和四数之和这两道题目使用哈希法在不超时的情况下做到对结果原创 2020-11-06 14:42:40 · 275 阅读 · 0 评论 -
leetcode 383. 赎金信 思考分析
题目给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。杂志字符串中的每个字符只能在赎金信字符串中使用一次。)思路思路和leetcode 242. 有效的字母异位词一样,这里不做过多分析。代码class Solution {public:原创 2020-11-06 14:09:57 · 225 阅读 · 0 评论