
leetcode
文章平均质量分 66
leetcode笔记,温故而知新
Eccentric_Lee
这个作者很懒,什么都没留下…
展开
-
leetcode二叉树专题---C++实现
二叉树的常见操作222. 完全二叉树的节点个数110. 平衡二叉树257. 二叉树的所有路径222. 完全二叉树的节点个数222. 完全二叉树的节点个数给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例 1:输入:root = [1,2,3,4,5,6]输出:6示例 2:原创 2022-04-14 19:23:09 · 1502 阅读 · 0 评论 -
leetcode二叉树的层次遍历---C++实现
102 二叉树的层序遍历leetcode 102 二叉树的层序遍历题述:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。示例1:输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例 2:输入:root = [1]输出:[[1]]示例 3:输入:root = []输出:[]/** * Definition for a binary tree node. *原创 2022-04-09 19:48:56 · 1465 阅读 · 0 评论 -
leetcode二叉树的前中后序及思想(递归非递归)---C++实现
递归写递归,都按照三要素来写:确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。14原创 2022-04-09 10:39:40 · 959 阅读 · 0 评论 -
leetcode栈和队列---C++实现
栈和队列20. 有效的括号232. 用栈实现队列1047. 删除字符串中的所有相邻重复项844.比较含回退的字符串20. 有效的括号leetcode 20. 有效的括号题述:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s原创 2022-04-09 09:44:59 · 584 阅读 · 0 评论 -
leetcode链表的基本操作---C++实现
链表的基本操作83 删除排序链表中的重复元素203 移除链表元素707.设计链表206反转链表24.两两交换链表中的结点19. 删除链表的倒数第 N 个结点面试题 02.07. 链表相交142.环形链表II21 合并两个有序的链表14383 删除排序链表中的重复元素leetcode 83 删除排序链表中的重复元素给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:原创 2022-03-31 18:52:20 · 2206 阅读 · 0 评论 -
二分查找---C++实现
二分查找题目1:704.二分查找题目2:35. 搜索插入位置题目3:34. 在排序数组中查找元素的第一个和最后一个位置题目4:69. x 的平方根题目5:367. 有效的完全平方数题目1:704.二分查找leetcode 704.二分查找给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入: nums = [-1,0,3,5,9,12], target = 9输出原创 2022-03-23 17:15:20 · 10583 阅读 · 1 评论 -
leetcode---复制带随机指针的链表 138
leetcode 原题链接给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --原创 2021-10-27 22:49:24 · 193 阅读 · 0 评论 -
leetcode---删除排序链表中的重复元素 83
leetcode原题链接存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。示例 1:输入:head = [1,1,2]输出:[1,2]示例 2:输入:head = [1,1,2,3,3]输出:[1,2,3]提示:链表中节点数目在范围 [0, 300] 内100 <= Node.val <= 100题目数据保证链表已经按升序排列**分析:**画图为例:初始状态:当判原创 2021-10-26 22:06:26 · 249 阅读 · 1 评论 -
leetcode---环形链表 II 142
leetcode—环形链表II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点原创 2021-10-26 13:10:45 · 159 阅读 · 0 评论 -
leetcode---环形链表 141
leetcode 环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head原创 2021-10-25 20:24:55 · 191 阅读 · 0 评论 -
leetcode---相交链表 160
leetcode—相交链表给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。示例:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected a原创 2021-10-25 17:55:36 · 171 阅读 · 0 评论 -
leetcode---链表的回文结构
描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。测试样例:1->2->2->1返回:true/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/struct原创 2021-10-25 13:34:09 · 155 阅读 · 0 评论 -
leetcode---链表分割
描述:现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class Partition {public: ListNode* partition(Lis原创 2021-10-24 19:57:34 · 210 阅读 · 0 评论 -
leetcode---合并两个有序链表 21
leetcode—合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按原创 2021-10-24 19:13:31 · 101 阅读 · 0 评论 -
leetcode---链表中倒数第k个结点
描述输入一个链表,输出该链表中倒数第k个结点。示例1输入:1,{1,2,3,4,5}返回值:{5}分析:本题的思路是快慢指针的做法,快指针fast,慢指针slow。当然,在确定快慢指针后。我们如何走呢?思路一,可以先让快指针fast走k步,然后slow和fast同时可以进行同步走,直到fast指针指向NULL,为了方便理解,如图所示:起始状态:假设k=4;过程:fast快指针先走k步,如图所示:然后fast和slow指针走到fast为NULL的时候:代码实现:/**原创 2021-10-24 14:33:02 · 289 阅读 · 0 评论 -
leetcode---链表的中间结点 876
leetcode 链表的中间结点给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.n原创 2021-10-22 19:48:56 · 202 阅读 · 0 评论 -
leetcode---反转链表 206
leetcode 206 反转链表给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]分析:思路一: 设置三个指针代码实现:/** * Definition for singly-linked list. * struct ListNode { * in原创 2021-10-22 13:22:25 · 141 阅读 · 0 评论 -
leetcode---移除链表元素 203
leetcode移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。示例 1:输入:head = [1,2,6,3,4,5,6], val = 6输出:[1,2,3,4,5]示例 2:输入:head = [], val = 1输出:[]示例 3:输入:head = [7,7,7,7], val = 7输出:[]分析: 我们根据题目可以设置前后指针的方法进行遍历,同时我们要考原创 2021-10-21 22:16:47 · 164 阅读 · 0 评论 -
leetcode---合并两个有序数组
leetcode合并两个有序数组给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。示例 1:输入原创 2021-10-21 13:40:38 · 151 阅读 · 0 评论 -
leetcode---移除元素(数组)
leetcode移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不原创 2021-10-20 20:05:40 · 135 阅读 · 0 评论 -
leetcode---旋转数组
leetcode旋转数组给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。进阶:尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1原创 2021-10-20 19:48:45 · 252 阅读 · 0 评论 -
leetcode---消失的数字(数组)
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?注意:本题相对书上原题稍作改动示例 1:输入:[3,0,1]输出:2示例 2:输入:[9,6,4,2,3,5,7,0,1]输出:8分析: 数组nums中含有从0到n的所有整数,但是缺少一个元素。第一种思想: 我们可以从0到nums的数累计相加起来得到从0到nums的之和sum1,然后在计算消失一个整数后的数组元素的累加和sum2,这样sum1-sum2就能得到消失的原创 2021-10-20 17:22:07 · 289 阅读 · 0 评论