
leetcode总结
文章平均质量分 55
对力扣中题解总结
等待花开I
立志成为IT人
展开
-
力扣653. 两数之和 IV - 输入 BST
给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true前面也碰到了两数之和的题目,不过题目给的是数组,而本题目给的是二叉搜索树。虽然数据结构不一样,但是求解的思路还是类似的。借用官方的话来说就是:如果存在两个元素之和为k,即 x+y=k,并且已知x是树上一个节点的值,则只需判断树上是否存在一个值为y 的节点,使得y=k−x。基于这种思想,在树的每个节点上遍历它的两棵子树(左子树和右子树),寻找另外一个匹配的数。在遍历过程中,将每原创 2021-09-14 16:01:19 · 584 阅读 · 0 评论 -
删除链表的倒数第N个节点
删除链表的倒数第N个节点给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]方法一两次遍历: 本题要求删除倒数第n个节点,那么最容易想到的就是先遍历一遍,求出链表的长度length,然后再遍历一遍,找到第length-n-1个节点,这样就可以把倒数第n个节点原创 2021-05-24 15:14:59 · 1104 阅读 · 2 评论 -
删除排序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。本题用到双指针,什么是双指针,在Java中就是两个控制指向的变量。因为数组是..原创 2021-05-19 09:17:33 · 632 阅读 · 0 评论 -
动态规划-->最长递增子序列
什么是动态规划?通过组合子问题的解来求解原问题的,动态规划对于每一个子子问题只求解一次,将其解保存在一个表格里面,从而无需每次求解一个子子问题时都重新计算,避免了不必要的计算工作,简单的说,动态规划的特征就是,当前状态的转移依赖于与前一个状态。详细理解动态规划,点击这里,我觉得这位博主讲的很清楚。下面将力扣中两道动态规划题列举出来,做一下比较。最长递增子序列给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的...原创 2021-04-23 13:10:55 · 1345 阅读 · 0 评论 -
使用数组求阶乘
求阶乘的方法很多,可以直接遍历相乘如while (n>=1){ sum=sum*n n=n-1}也可以使用递归:public static int f(int n){ if (n==1)return 1; return n*f(n-1); }但是对于较大数的阶乘,int类型的存储范围无法满足要求了,可以使用long,但是范围也有限,有什么办法解决呢?对于Java语言来说,可以使用BigInteger类完成这样的要求,但原创 2021-04-15 16:46:52 · 3059 阅读 · 0 评论 -
对一个字符串全排列
所谓全排列就是:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列.原创 2021-04-13 09:30:20 · 901 阅读 · 0 评论 -
力扣101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3]是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3]则不是镜像对称的: 1 / \ 2 2 \ \ 3 3如何判断一棵树是不是对称的,前几天我做了一个题判断两棵树是否相同,自然地想把当时的思路引过来,但是最后发现这种想法是错的,题目中第二个例...原创 2021-04-06 11:27:45 · 575 阅读 · 0 评论 -
力扣283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:要求:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。两种解法:第一种:两次遍历,第一次遍历计算出0的个数,并且将不是0的数向前覆盖。第二次遍历,由第一次遍历得到的0的个数将剩余全部置0; public void moveZeroes(int[] nums) { int..原创 2021-04-05 21:16:32 · 479 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
题目要求:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]什么是滑动窗口滑动窗口可以看成数组中框起来的一个部分,就是一个可以扩大或者缩小的窗口,在一些数组类题目中,我们可以用滑动窗口来观察可能.转载 2021-04-05 13:55:45 · 463 阅读 · 0 评论 -
区间调度问题
问题描述: 有n项工作,每项工作分别在si开始,ti结束。对每项工作,你都可以选择参加或不参加,但选择了参加某项工作就必须至始至终参加全程参与,即参与工作的时间段不能有重叠(即使开始的时间和结束的时间重叠都不行)。样例: 输入 n=5 s={1,2,4,6,8} T={3,5,7,9,10}输出 3(选择工作1,3,5)分析:这一题用到贪心算法的思想,就是每次选取结束时间最早的,从局部上达到最优,实际上整...原创 2021-03-10 15:26:24 · 749 阅读 · 0 评论 -
关于力扣中双指针的例题
目录392. 判断子序列455. 分发饼干392. 判断子序列力扣给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例 1:输入:s = "abc", t = "ahbgdc"输出:true示例 2:输入:s = "axc", t = "ahbgdc"输出:false此题...原创 2021-02-26 15:27:40 · 213 阅读 · 0 评论 -
方向数组
关于方向数组,我走过一个坑,大二的时候,老师让我们利用二维数组编写扫雷游戏,在键盘上输入自己认为没有雷的位置,如果此位置没有雷,就输出一个这个位置周围的雷数。假设1代表有雷,0代表无雷,返回0周围的雷数。我首先想到的是判断这个位置的上下左右,左上,右上,左下,右下是不是1,但是这种方法,写出的代码非常长,写到崩溃。有没有其他办法呢?当然有。下面举一个力扣中的例子。在一个 8 x 8 的棋盘上,有一个白色的车(Rook),用字符 'R' 表示。棋盘上还可能存在空方块,白色的象(Bi.原创 2021-02-26 11:00:01 · 827 阅读 · 0 评论