
leetcode笔记
文章平均质量分 90
刷题记录
ycr的帐号
这个作者很懒,什么都没留下…
展开
-
【Leetcode刷题记录_C++】【树】
树树的递归104. 二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。思路:DFS递归回溯int maxDepth(TreeNode* root) { return root? 1 + max(maxDepth(root->left), maxDepth(root->right)): 0;}代码:110. 平衡二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高原创 2022-02-03 00:13:52 · 463 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【搜索】
搜索算法简介深度优先遍历(1)从一个未访问过的顶点开始,访问它的一个未访问过的相邻顶点。(2)如果顶点的所有相邻顶点都是已访问过的,则需要回溯到之前的一个顶点,选取它的另一个未被访问的相邻顶点。(3)对于前两个步骤是递归的695. 岛屿的最大面积给定一个包含了一些 0 和 1 的非空二维数组 grid 。一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。找到给定的二维原创 2022-02-03 00:08:58 · 540 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【链表】
链表删除节点时,经常会因为对当前节点进行操作而导致内存或指针出现问题。有两个小技巧可以解决这个问题:一是尽量处理当前节点的下一个节点而非当前节点本身,二是建立一个虚拟节点 (dummy node),使其指向当前链表的头节点,这样即使原链表所有节点全被删除,也会有一个 dummy 存在,返回 dummy->next 即可。链表的基本操作206. 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。思路:head后移:ListNode *prev = nullptr,原创 2022-02-03 00:12:55 · 316 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【贪心】
贪心贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。分配问题455. 分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。思路:原创 2022-02-02 23:37:40 · 313 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【字符串】
字符串字符串比较242. 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。思路:哈希表代码:205. 同构字符串给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字原创 2022-02-03 00:12:11 · 228 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【排序算法】
排序算法算法简介快速排序(Quicksort)对冒泡算法的一种改进:任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。假设一开始序列{xi}是:5,3,7,6,4,1,0,2,9,10,8。此时,ref=5,i=1,j=10,从后往前找,第一个比5小的数是x8=2,因此序列为:2,3,7,6,4,1,0,5,9,10,8。此时i=1,j=8,从前往后找,第一个比5大的数是x3=7,因此序列为:2,3,原创 2022-02-03 00:08:05 · 298 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【二分查找】
二分查找二分查找也可以看作双指针的一种特殊情况,但我们一般会将二者区分。双指针类型的题,指针通常是一步一步移动的,而在二分查找里,指针每次移动半个区间长度。求开方69. x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。思路:二分,找到两个相邻平方在目标左右的数代码:更快的算法——牛顿迭代法①class Solution {public: int mySqrt原创 2022-02-03 00:07:25 · 430 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【数据结构】
数据结构数组448. 找到所有数组中消失的数字给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。输入:nums = [4,3,2,7,8,2,3,1]输出:[5,6]思路:桶计数代码:class Solution {public: vector<int> findDisappearedNumbers(vector<int>&原创 2022-02-03 00:11:25 · 1931 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【图】
图二分图二分图算法也称为染色法,是一种广度优先搜索。如果可以用两种颜色对图中的节点进行着色,并且保证相邻的节点颜色不同,那么图为二分。785. 判断二分图存在一个 无向图 ,图中有 n 个节点。其中每个节点都有一个介于 0 到 n - 1 之间的唯一编号。给你一个二维数组 graph ,其中 graph[u] 是一个节点数组,由节点 u 的邻接节点组成。形式上,对于 graph[u] 中的每个 v ,都存在一条位于节点 u 和节点 v 之间的无向边。该无向图同时具有以下属性:不存在自环(graph原创 2022-02-05 12:41:19 · 377 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【双指针】
双指针双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。TWO SUM167. 两数之和 II - 输入有序数组给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函原创 2022-02-03 00:06:46 · 409 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【分治法】
分治法分治问题由“分”(divide)和“治”(conquer)两部分组成,通过把原问题分为子问题,再将子问题进行处理合并,从而实现对原问题的求解。我们在排序章节展示的归并排序就是典型的分治问题,其中“分”即为把大数组平均分成两个小数组,通过递归实现,最终我们会得到多个长度为 1 的子数组;“治”即为把已经排好序的两个小数组合成为一个排好序的大数组,从长度为 1 的子数组开始,最终合成一个大数组。自上而下的分治可以和 memoization 结合,避免重复遍历相同的子问题。如果方便推导,也可以换用自下而原创 2022-02-03 00:10:30 · 262 阅读 · 0 评论 -
Leetcode错误记录
Leetcode编译错误记录1.数组越界错误记录:=================================================================42ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000f0 at pc 0x56162a87935f bp 0x7ffcac9a5b60 sp 0x7ffcac9a5b50READ of size 4 at 0x6020000000f原创 2021-08-20 12:05:50 · 565 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【动态规划】
动态规划通俗一点来讲,动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。同时,我们也可以对动态规划进行空间压缩,起到节省空间消耗的效果。基本动态规划:一维70. 爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正原创 2022-02-03 00:09:57 · 1841 阅读 · 0 评论 -
【Leetcode刷题记录_C++】【更加复杂的数据结构】
贪心605. 种花问题假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。思路:贪心原则,从左向右遍历,若是连续的两个0,判断是否是在开头或前一个是否是0,是则令第一个为1,不是的话令第二个为1;若是连续的两原创 2021-08-25 00:18:26 · 327 阅读 · 0 评论