LeetCode
文章平均质量分 55
MaRinli7
Coder
展开
-
经典面试题-小于N的最大数
小于N的最大值原创 2022-08-26 14:51:13 · 2697 阅读 · 4 评论 -
并查集介绍-个人总结版
并查集原创 2022-08-25 17:00:49 · 184 阅读 · 0 评论 -
回溯去重问题
回溯去重原创 2022-06-22 15:35:17 · 140 阅读 · 0 评论 -
LeetCode-添加/删除二叉搜索树的结点
一、二叉搜索树的插入1、题目701.二叉搜索树的插入操作给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同2、思路由于二叉搜索树的特性,一直遍历直到找到为null的位置,插入即可3、代码 //一直遍历到空结点,插入即可 public TreeNode insertIntoBST(TreeNode root, int val) {原创 2022-02-17 16:09:59 · 111 阅读 · 2 评论 -
LeetCode-二叉树的公共祖先
一、236.二叉树的最近公共祖先1、题目给定一个二叉树,求树中两个指定节点的公共祖先最近的公共祖先满足:满足祖先X是P和Q的祖先且X的深度足够大。例如上图的二叉树,结点2和6的最近公共祖先为5,结点4和5的最近公共祖先是5。2、思路通过后序遍历,对每个结点自底向上查询。如何判断一个结点是否是最近公共祖先?判断左右子树返回过来的结果的包含情况,如果左子树包含P,右子树包含Q(或是相反),那么该结点就是最近公共祖先。3、代码public TreeNode lowestC原创 2022-02-17 15:04:57 · 464 阅读 · 0 评论 -
关于并查集的一些个人总结
一、什么是并查集?并查集是一种数据结构,通常用来判断元素之间是否属于同一个集合。在LeetCode200.岛屿数量中就可以使用并查集解决。二、基本思路使用数组存储每个元素所在的集合。例如union[2] == 1,代表第三个元素是集合1里的元素。1、初始化使用并查集,首先对并查集进行初始化,代码示例如下:private int[] union;private int size;public void initUnion(){ union = new int[size原创 2022-01-07 14:56:09 · 572 阅读 · 0 评论 -
LeetCode-只出现一次的数字
一、只出现一次的数字Ⅱ题目:给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。思路:将所有数字加起来,记录下每一位二进制加过的次数,其余每个元素都出现了三次,则每位二进制的次数都是3次/4次/0次。每一位都对3取余,剩下的二进制就是只出现一次元素的二进制了。问题来了,怎么保存二进制呢?用一个大小为32的int类型数组保存。代码:public int singleNumber(int[] nums) {原创 2022-01-04 17:08:54 · 742 阅读 · 0 评论 -
LeetCode-从前序遍历和中序遍历构造二叉树
一、题目给定一棵树的前序遍历preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。例如:preorder = [3,9,20,15,7], inorder = [9,3,15,20,7],得到如下二叉树。1、分析通过前序遍历和中序遍历构建二叉树的原理就不说了,都是基础。说说怎么用代码的方式构造二叉树。一开始想到用队列能不能实现,发现写起来太复杂了,还是用递归+partition。首先看前序遍历数组,第一个数就是当前需要构造的根节点【3】,于是在中序遍历数组..原创 2021-12-27 16:58:27 · 827 阅读 · 0 评论 -
LeetCode-删除排序数组中的重复项
一、题目1给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。分析: 双指针,快指针fast遍历原数组,慢指针slow指向保留的最后一个元素。初始设slow = 0,fast = 1。判断是这样的:if(nums[fast] != nums[fast-1]),说明新数字没有重复出现,就把这个数字保留。代码:clas...原创 2021-12-24 15:18:42 · 395 阅读 · 0 评论 -
贪心系列-跳跃问题1/2
今天做到两个题有点意思,贪心问题,没做过就不会的那种题。一、跳跃游戏给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。1、分析一个题解的想法非常叼,就当作一个人持有能量,需要能量才能走,每到一个新格子都能更新能量。最后看能不能走到终点就行了。2、代码class Solution { public boolean canJump(int[] nums) {原创 2021-12-13 16:19:51 · 3092 阅读 · 0 评论 -
二分问题-LeetCode33-搜索旋转排序数组
一、二分最常见的二分就是用在搜索有序数组中的元素了,这会让人有个错觉:只有数组是有序的,才能使用二分。其实是这样的:每次能决定丢弃掉哪一边,都可以使用二分二、题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]原创 2021-12-10 16:26:46 · 312 阅读 · 0 评论 -
LeetCode15-三数之和
一、题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。二、自己的思路最先想到的就是dfs,就像组合总和这题一样,找到一个组合添加到List里,回溯一下就好了嘛但最终会遇到需要去重的问题。以下是自己的做法:class Solution { List<List<Integer>> res;原创 2021-12-08 16:00:41 · 383 阅读 · 0 评论 -
01背包问题
一、问题概述01背包问题也是一个经典问题了,题目是这样的: 给定一组物品,物品有两个属性原创 2021-12-07 15:51:36 · 239 阅读 · 0 评论 -
完全背包问题-LeetCode322-零钱兑换
一、题目给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。什么意思?比如给一个总金额11块钱,硬币有三种:[1,2,5],要求使用最少数量的硬币凑齐11块钱。这道题有点像左程云讲过的8类型袋子和6类型袋子装苹果的问题,但那道题是有数学规律的,因为8和6是确定的。本题则随机给硬币面额,要求最少数量。贪心会超时原创 2021-12-03 15:56:54 · 257 阅读 · 0 评论 -
回溯问题-LeetCode39-组合总和
一、回溯回溯法的思想是:通过枚举,对所有的可能进行遍历。但是枚举是一直枚举到最后一个元素,发现走不通,再回退一步,枚举没有走过的元素。回溯的关键在于:走不通就回退一步。回溯的实现:for循环+递归解释如下:for循环就像一个路径选择,递归返回之后就相当于回退一步。例如第一次选择第一条路径,i = 0,进入该条路径,递归方法完成后返回,相当于回退到初始点,然后进入下一次循环。二、回溯模板public backward(){ if(回退点){ //这条路的结束点原创 2021-12-06 11:38:16 · 3472 阅读 · 0 评论