
蒟蒻的自我救赎之路 LeetCode C++
文章平均质量分 53
LeetCode C++
RPG_Zero
春日雨,夏蝉鸣,明天是个好天气。
秋风起,雪花轻,海底看不见四季。
展开
-
C++刷题中 那些奇奇怪怪 可可爱爱的函数
文章目录字符串字符串变长substr的使用to_string()函数数组数组前后补零数组初始化字符串字符串变长适用于原地修改字符串的情形,多结合双指针从后往前进行移动和修改,进而降低空间复杂度s.resize(s.size()+extrasize);可参考题目:剑指offer 05. 替换空格举一反三:填充类题目,都可以考虑原地扩充大小然后双指针从后往前操作。substr的使用s.substr(startidx, length);to_string()函数将数字转换为字符串in原创 2022-02-20 10:00:15 · 1042 阅读 · 0 评论 -
LeetCode 单调栈 阶段性小结 个人向专题通关计划
单调栈单调栈的应用场景单调栈的含义从一道典型题出发 LeetCode 739 每日温度LeetCode 496 下一个更大元素 ILeetCode 503 下一个更大元素 II进阶 向hard难度冲击LeetCode 42 接雨水LeetCode 84 柱状图中最大的矩形单调栈的题目需要注意的有:单调栈中元素的大小顺序、新来一个元素时,需要考虑其与栈头元素相对大小的三种情况、较为复杂的题目中,通常要考虑三个元素:栈头元素、栈中的第二个元素(左边第一个较小/较大的位置或值)、新来元素(右边第一个较小/较大的原创 2022-01-27 20:49:10 · 452 阅读 · 0 评论 -
LeetCode 二叉树遍历 递归 & 迭代 栈+空指针
@[TOC]二叉树遍历二叉树的递归遍历二叉树的前中后遍历其实就是中间节点的遍历顺序。递归三要素:确定递归函数的参数与返回值//无需返回值//需要知道当前节点,以及一个用于保存遍历结果的vector数组void traversal(TreeNode* cur, vector<int>& vec)确定终止条件if (cur == NULL) return;确定单层递归的处理逻辑//以前序遍历为例vec.push_back(cur->val);原创 2022-01-21 16:34:13 · 603 阅读 · 0 评论 -
LeetCode 102 二叉树的层次遍历 层次遍历模板题目 队列bfs & 递归dfs
题目链接解法一:BFS模板题,借助于队列AC代码:class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { // bfs queue<TreeNode*> que; vector<vector<int>> res; if(root!=nullptr) que.push(root)原创 2022-01-19 16:16:15 · 274 阅读 · 0 评论 -
LeetCode 回溯法 阶段性小结 个人向专题通关计划
回溯回溯法应用场景回溯法代码模板回溯:组合问题LeetCode77 组合LeetCode40 组合总和 II回溯:切割问题LeetCode131 分割回文串LeetCode93 复原IP地址回溯法应用场景回溯法又叫回溯搜索法,是一种搜索的方式,类似于深度搜索。回溯搜索的本质是穷举搜索,所以并不是一种高效的算法,可以考虑一些剪枝优化策略。回溯法可以解决的问题种类一般包括以下几种:组合问题:N个数里面按照某种要求找出满足条件的k个数的集合切割问题:一个字符串按照某种要求可以有多少种切割方式子集问题原创 2021-12-25 23:34:25 · 1053 阅读 · 0 评论 -
LeetCode 快慢指针 双指针法阶段性总结 个人向
双指针法 思维方式链表 双指针法 快慢指针真题 LeetCode141 环形链表真题 LeetCode142 环形链表II. 环有了,那入口节点呢?推荐阅读数组LeetCode 15 三数之和LeetCode 16 最接近的三数之和LeetCode 18 四数之和小总结双指针法通常被用于简化多层循环遍历的场景,降低时间复杂度(通常降低一个次幂)。双指针并不是固定的公式,而是一种思维的方式~链表 双指针法 快慢指针真题 LeetCode141 环形链表题目链接解题思路:快指针每次移动两步,原创 2021-12-05 23:57:23 · 384 阅读 · 0 评论 -
LeetCode 349 两个数组的交集 哈希法 unordered_set 查找or删除
题目链接class Solution {public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { //哈希法 //未限定数组的大小 则不考虑哈希数组 //无需统计某个值出现的次数,因此用不到map //unordered_set即可满足题目要求 unordered_set&原创 2021-12-03 00:48:04 · 587 阅读 · 0 评论 -
LeetCode 242 有效的字母异位词 哈希表初探 数组 or unordered_map
题目链接场景:判断某个元素是否出现过思路:考虑使用哈希表解法一:哈希数组. 由题意可知字符均为小写英文字母,数量有限,可以使用哈希数组。class Solution {public: bool isAnagram(string s, string t) { if(s.length() != t.length()) return false; int cnt[26] = {0}; for(int i = 0; i < s.length(原创 2021-12-03 00:08:21 · 240 阅读 · 0 评论 -
LeetCode 977 有序数组的平方 双指针法
题目链接要求o(n)复杂度,考虑使用双指针法避免多次遍历AC代码:class Solution {public: vector<int> sortedSquares(vector<int>& nums) { //双指针法 int left = 0, right = nums.size() - 1; int idx = right; vector<int> res(nums.size(原创 2021-12-02 23:02:18 · 156 阅读 · 0 评论 -
LeetCode 35 搜索插入位置 二分查找深入理解~
LeetCode35 二分查找原创 2021-12-02 17:29:53 · 186 阅读 · 0 评论 -
LeetCode 34 在排序数组中查找元素的第一个位置和最后一个位置 二分查找经典变种 值得一看
题目链接思路:一个自然的想法是先二分查找然后分别往左右遍历,找到所求的位置。但这样的话,最优复杂度达不到进阶题目要求的情况。或许可以在面试的时候先这么说,引导面试官让你优化,然后惊艳面试官,哈哈哈~使用两次二分查找,分别查找满足要求的左右坐标值,具体的思路在代码注释中了。网上一个优秀题解的情况分析:AC代码:class Solution {public: int searchleft(vector<int> &nums, int target){原创 2021-12-02 16:52:13 · 219 阅读 · 0 评论 -
LeetCode 704 二分查找模板题
LeetCode 二分查找原创 2021-12-01 22:06:16 · 241 阅读 · 0 评论 -
LeetCode 链表阶段性总结 个人向 专题通关计划
文章目录虚拟头结点 哨兵结点双指针法 快慢指针真题:leetcode 剑指offer22 链表倒数第k个节点 双指针法 代码鲁棒性真题:删除链表的倒数第N个结点 双指针法 链表 虚拟头结点练习题目四结点法专题:链表反转真题:LeetCode 206. 反转链表 辅助结点真题:LeetCode 92. 反转链表II真题:LeetCode 24. 两两交换链表中的节点真题:LeetCode 25 K个一组翻转链表 分组+链表反转 虚拟头、尾结点综合题目:LeetCode143. 重排链表因为是篇个人向的文章,原创 2021-11-27 01:24:35 · 795 阅读 · 0 评论 -
LeetCode 25 K个一组翻转链表 hard 分组+链表反转 虚拟头、尾结点
题目链接给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。提示:列表中节点的数量在范围 sz 内1 <= sz <= 50000 <= Node.val <= 10001 <= k <= sz解题思原创 2021-11-17 14:05:51 · 168 阅读 · 0 评论 -
LeetCode 206. 反转链表 双指针法 辅助结点 递归
题目链接给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?双指针法+辅助结点:AC代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *原创 2021-11-16 22:28:17 · 456 阅读 · 0 评论 -
LeetCode 19 删除链表的倒数第N个结点 双指针法 链表 虚拟头结点
题目链接给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。>示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz进阶:你能尝试使用一趟扫描实现吗?双指针法,一遍扫描AC代码:/** * Definition for si原创 2021-11-16 14:00:30 · 350 阅读 · 0 评论 -
leetcode 剑指offer22 链表倒数第k个节点 双指针法 代码鲁棒性
题目链接剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.一道easy的题目,最简单的方法就是先遍历得到链表的长度,然后将指针移动到原创 2021-11-15 21:09:34 · 564 阅读 · 0 评论 -
LeetCode 3 无重复字符的最长子串 滑动窗口方法
题目链接无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长原创 2021-05-18 20:27:54 · 1086 阅读 · 0 评论 -
LeetCode 2 两数相加 单向链表
题目链接给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 =原创 2021-05-17 15:39:51 · 152 阅读 · 0 评论 -
LeetCode 两数之和 unordered_map 哈希表
两数之和两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target原创 2021-05-15 21:31:38 · 165 阅读 · 0 评论