自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 102. 二叉树的层序遍历

题目想法:让我一层一层的计算~class Solution { public List<List<Integer>> levelOrder(TreeNode root) { if(root==null) return new ArrayList<>(); List<List<Integer>> res=new ArrayList<>(); Queue<TreeNod

2021-12-15 17:21:34 355

原创 98. 验证二叉搜索树

题目想法乍一看:遍历全树,只需要检查root.val>root.left.val&&root.val<root.right.val就可以了(下面的算法显示是错误的)class Solution { public boolean isValidBST(TreeNode root) { if(root==null) return true; if(root.left==null&&root.right==null) ret

2021-12-15 16:42:23 344

原创 96. 不同的二叉搜索树

题目想法一开始没想出来,看题解才知道是动态规划,具体的做法是:两个节点的时候,两个节点生成的二叉树,等于以1为顶点生成的二叉树,以2为顶点生成的二叉树。G(2)=f(1)+f(2)=2;G(3)=f(1)+f(2)+f(3)=5;f(i)实际上可以这么理解,假设由n个节点,那么i作为节点,比i小的有f(i-1)个节点,比i大的有n-i个。也就说说,可以理解为:f(i)=G(i-1)*G(n-i)所以,因此可以推导出来:G(n)=G(0)*G(n-1)+G(1)*G(n-2)+…+

2021-12-15 15:12:16 205

原创 851. 喧闹和富有

题目想法richer中存放的是金钱关系的值a,b,可以用一个hashmap存放,hashmap(b)中放比b更有钱的人求answer,实际上是比较比x(包括x)更有钱的集合中,quiet最小的数的编号。我们可以发现,例如,a比b有钱,c比a有钱。那么answer(b)=min{quiet(b),answer(a)}的一个比较关系,b的quiet和a的answer进行比较,所以想到递归/动态规划的方法。转化为了每一个的最优子问题,来回调用的信息(从上往下调用)时间复杂度O(n+m) 空间复杂度O

2021-12-15 11:23:36 62

原创 234. 回文链表

题目想法将值放在数组中,然后在双指针遍历。class Solution { public boolean isPalindrome(ListNode head) { ArrayList<Integer> listNode=new ArrayList<>(); ListNode begin=head; while(begin!=null){ listNode.add(begin.val);

2021-12-14 10:51:59 167

原创 142. 环形链表 II

142. 环形链表 II想法hash存储public class Solution { public ListNode detectCycle(ListNode head) { HashSet<ListNode> hs=new HashSet<>(); ListNode pr=head; while(pr!=null){ if(!hs.contains(pr)){

2021-12-13 16:40:46 64

原创 力扣双指针

盛最多水的容器三数之和删除链表的倒数第 N 个结点下一个排列接雨水颜色分类环形链表环形链表 II排序链表相交链表回文链表移动零寻找重复数最短无序连续子数组

2021-12-13 16:15:44 170

原创 977. 有序数组的平方

题目想法想法: 由于升序排序所以可以知道,平方后变成 大到小到大因此,从双指针的角度,分别比较最大。(实际上可以理解为两个升序数组的归并为一个数组的排序)class Solution { public int[] sortedSquares(int[] nums) { int left=0,right=nums.length-1; int pos=nums.length-1; int[] ans=new int[nums.length];

2021-12-13 11:30:21 54

原创 [141. 环形链表

题目:想法:利用快慢指针,快走两步,慢走一步。如果存在环,则快慢会相遇)代码:public class Solution { public boolean hasCycle(ListNode head) { if(head==null||head.next==null) return false; ListNode fast=head.next,slow=head; while(fast!=slow){ if(fa

2021-12-13 11:09:58 50

原创 881. 救生艇

题目:想法:排序+双指针选择两个不超过limit,最小组合选择两个考虑双指针排序后,选取双指针情况: 12345 limit=6 奇书对1,5 成了 第一对;2,4 成了 第二对,left==right 退出; 三队情况: 123456 limit=7;1,6; 2,5;3.4一队;left>right退出情况:12345 limit=5;1,5不行,那么5单独;1,4成功;2,3成功情况:1234 limit=6;与上述一致具体代码:class Solutio

2021-12-13 10:48:37 189

原创 算法-滑动窗口和双指针

1.双指针同向指针或者反向指针初始:一个指针left,一个指针right移动:left++,right–;条件:left<right反向指针:快慢指针

2021-12-13 10:41:31 634

原创 287. 寻找重复数

287. 寻找重复数给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-the-duplicate-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请

2021-12-12 17:14:32 270

原创 二分查找-35. 搜索插入位置

35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/search-insert-position著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。想法如果直接使用二分,那么退出的位置l,实际上就是应该插入的位置。如果二分不用等号,那么意

2021-12-12 16:12:50 82

原创 二分查找-278. 第一个错误的版本

278. 第一个错误的版本你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例 1:

2021-12-12 15:47:06 53

原创 力扣刷题-树easy

617. 合并二叉树题目给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。示例 1:输入:Tree 1 Tree 21 2/ \ / \3 2

2021-12-12 10:27:26 72

原创 算法-树的结构介绍

树用链表来表示:树可以用链表来进行表示构造无限制根节点的树此时不分left和right,可以用child表示。因此,如果孩子的数量是无限的,那么对于空间很浪费,所以采用“左孩子右兄弟”的方法来进行树的构造。顾名思义:left指针是孩子,right指针是兄弟。...

2021-12-11 15:04:53 172

原创 算法详解-树的基础知识

计算树的高度class Solution { public int height(TreeNode root){ if(root==null) return 0; int left=height(root.left); int right=height(root.right); return Math.max(left,right)+1; }}计算树的深度class Solution {.

2021-12-09 17:49:32 66

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除