leetcode
snow_7
想当个花瓶的程序媛
展开
-
leetcode---236. 二叉树的最近公共祖先(最近公共祖先)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 ...原创 2020-08-16 15:31:22 · 321 阅读 · 0 评论 -
leetcode---235. 二叉搜索树的最近公共祖先(最近公共祖先)
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树:root =[6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: ...原创 2020-08-16 15:27:12 · 1010 阅读 · 0 评论 -
leetcode---110. 平衡二叉树(高度平衡)
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 ...原创 2020-08-16 14:58:20 · 454 阅读 · 0 评论 -
leetcode---814. 二叉树剪枝
给定二叉树根结点root,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)思路:1)什么是二叉树的剪枝假设有一棵树,最上层的是root节点,而父节点会依赖子节点。如果现在有一些节点已经标记为无效,我们要删除这些无效节点。如果无效节点的依赖的节点还有效,那么不应该删除,如果无效节点和它的子节点都无效,则可以删除。剪掉这些节点的过程,称为剪枝,目的是用来处理二叉树模型中的依赖问题。因此剪..原创 2020-08-16 14:39:06 · 274 阅读 · 0 评论 -
leetcode---82. 删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3思路:将有序链表中重复的数组都删除掉,之前easy级别的是保留一个。我们采取两个指针,一个是pre记录当前之前的节点,一个是cur,1)如果当前的和其下一个相等,那么当前就...原创 2020-07-09 15:17:43 · 219 阅读 · 0 评论 -
leetcode---83. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3思路:这个题目是排序链表,重复出现的只保留一个。跟数组的有些类似。不同的是数组是连续空间。需要将后面的拷贝到前面。而链表只需要将节点指向改变就可以。1、可以像数组那种采用快慢指针法去做。2、也可以只使用一个指针,就是当前的和下一个相比,如果不同,当前的..原创 2020-07-09 15:02:44 · 127 阅读 · 0 评论 -
leetcode---80. 删除排序数组中的重复项 II
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,1,2,3,3],函数应返回新长度 l..原创 2020-07-09 14:55:16 · 200 阅读 · 0 评论 -
leetcode---26. 删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, ...原创 2020-07-09 14:43:13 · 204 阅读 · 0 评论 -
leetcode---61. 旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例2:输入: 0->1->2->...原创 2020-07-06 11:29:48 · 154 阅读 · 0 评论 -
leetcode---147. 对链表进行插入排序
插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。示例 1:输入: 4->2->1->3输出: 1->2->..原创 2020-07-03 15:21:26 · 128 阅读 · 0 评论 -
leetcode---86. 分隔链表
给定一个链表和一个特定值x,对链表进行分隔,使得所有小于x的节点都在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入: head = 1->4->3->2->5->2, x = 3输出: 1->2->2->4->3->5思路:将链表分隔,其实这跟链表的特性相关。因为链表是next属性进行相连接的。我们在调整链表的时候其实只需要不断调整next属性指向即可。那么这个题目我们可以引入两个头...原创 2020-06-30 15:08:01 · 121 阅读 · 0 评论 -
leetcode---143. 重排链表
给定一个单链表L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.这个题其实就是将后面的链表的节点依次进行往前面的空里..原创 2020-06-29 17:30:07 · 388 阅读 · 0 评论 -
leetcode---21. 合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:新链表是通过拼接给定的两个链表的所有节点组成的,这句话限制了我们不能新增一个链表来存储合并后的链表的节点,而是需要在比较的过程中不断调整两个链表的节点的指针指向最后把两个链表合并成一个链表。在遍历时当两个链表都还没有走到最后为空的位置,需要对两个链表当前.原创 2020-06-24 16:38:20 · 273 阅读 · 0 评论 -
leetcode---2. 两数相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:逆序存储,相加的时候也是逆序相加。这样加出来的新链表每...原创 2020-06-23 17:25:43 · 326 阅读 · 0 评论 -
leetcode---206. 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路:反转链表,就是我们需要把链表的当前结点的下一个结点先保存起来。然后将当前结点的next指向它的前一个。然后再移动指向当前结点的和其前一个。/** * Definition for singly-linked list. * public class ListNode { * int..原创 2020-06-23 15:17:17 · 294 阅读 · 0 评论 -
leetcode---19.删除链表的倒数第N个节点
题目:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。思路:考察两个知识点,一是删除结点如果是删除的是都一个结点,那么得特殊处理处理。所以引入虚拟的头结点,让头指针指向头结点,题目要求返回链表的头结点其实就是返回链表的第一个结点。也就是引入的头结点的next二 快...原创 2020-06-23 14:40:22 · 201 阅读 · 0 评论 -
头结点的含义以及引入头结点的作用
一、概念头结点:是虚拟出来的一个节点,不保存数据。头结点的next指针指向链表中的第一个节点。对于头结点,数据域可以不存储任何信息,也可存储如链表长度等附加信息。头结点不是链表所必需的。头指针:是指向第一个结点的指针,如果链表没有引入头结点,那么头指针指向的是链表的第一个结点。头指针是链表所必需的。[注意]无论是否有头结点,头指针始终指向链表的第一个结点。如果有头结点,头指针就指向头结点。二、为何引入头结点1)对链表的删除、插入操作时,第一个结点的操作更方便如果链表没有头结点,那么头原创 2020-06-23 11:56:15 · 20155 阅读 · 7 评论 -
leetcode---1. 两数之和
给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解题思路:...原创 2019-10-22 16:05:09 · 140 阅读 · 0 评论 -
leetcode---122. 买卖股票的最佳时机 II
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交...原创 2019-10-22 14:47:16 · 179 阅读 · 0 评论 -
leetcode---买卖股票的最佳时机
给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 ...原创 2019-10-18 17:52:23 · 137 阅读 · 0 评论