中等
sunny_daily
java、数据结构、leetcode、企业数字化转型!在线免费接需求!!!
展开
-
39-组合的总和
给定一个无重复元素的正整数数组candidates和一个正整数target,找出candidates中所有可以使数字和为目标数target的唯一组合。candidates中的数字可以无限制重复被选取。如果至少一个所选数字数量不同,则两种组合是唯一的。对于给定的输入,保证和为target 的唯一组合数少于 150 个。如输入: candidates = [2,3,6,7], target = 7,输出: [[7],[2,2,3]];如输入: candidates = [2...原创 2021-10-20 15:52:54 · 63 阅读 · 0 评论 -
21-合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。如输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]。 一般先维护一个头节点,这样可以省掉单独判断输入的两个链表是否为空。 package likouhot; import leecodeOff.ListNode; /* * 21.合并两个有序链表 */ public class Demo21 { public...原创 2021-09-28 18:53:23 · 96 阅读 · 0 评论 -
20-有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。 括号这种问题有点抽象,参考了下标准答案给出代码。 package likouhot; import java.util.HashMap; import java.util.Map; import java.util.Stack; /* * 20.有效的括号 */ public class...原创 2021-09-28 14:18:34 · 93 阅读 · 0 评论 -
19-删除链表的第n个节点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5] 如果只做一次扫描解不出来。不管用双指针还是栈都不止遍历一次。采用栈的方式,思路很好理解,就是对链表做一次遍历并入栈,然后做出栈,找到第n个栈元素,则该节点即为需要删除的节点。需要用一个额外的栈来存储。一种思路就是双指针,在对链表进行操作时,一般都先在链表的头部维护一个虚拟节点。双指针算法中需要先...原创 2021-09-27 10:46:36 · 507 阅读 · 0 评论 -
17-电话号码的组合
给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。输入:digits = "23";输出:["ad","ae","af","bd","be","bf","cd","ce","cf"] 要求解字母组合,则是从每一个按键中找到选出一个元素,如果要求输出的字母数量就很好求,但这里要的是输出字母,所以比较麻烦。假设入如为23两个按键,输出字母则为从2中选一个字符,从3中再选...原创 2021-09-26 17:34:01 · 110 阅读 · 0 评论 -
2-两数相加
给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。如输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]。 解题过程中需要注意两点:1.进位,如果两数相加,则进1;2.如果有一个链表先遍历结束之后持续遍历的问题。 package ...原创 2021-09-26 15:54:46 · 91 阅读 · 0 评论 -
11-盛最多水的容器
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。如输入:[1,8,6,2,5,4,8,3,7] 输出:49 相当于是给定一个数组,从数组中选出两个点,计算两个点之间的面积大小。第一步计算初始值的时候肯定是左边选第一个节点、右边选最后一个节点,假设给定的数组height长度...原创 2021-09-23 16:53:04 · 91 阅读 · 0 评论 -
65-不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。如输入: a = 1, b = 1,输出: 2。 这道题虽然不难,但需要用到位运算。需要用到与和异或运算,“与”表示表示两个都是1,则位1;“异或”表示只有不同才为1,相同则为0。将整数转为二进制,实际动手测试一下即可。其中Integer.toBinary(value)方法,可以将value转为二进制。 package leecodeOff; /* * 65.不用加减乘除...原创 2021-09-18 21:25:53 · 93 阅读 · 0 评论 -
33-二叉搜索树后序遍历
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。如输入: [1,6,3,2,5] ,输出: false。 如果一棵树是二叉搜索树,则对每一个非叶子节点来讲,其左节点肯定小于该节点,其右节点的值大于该节点。设输入的后续遍历数组为postorder,数组长度为n,则其最后一个节点肯定是根节点。从左到右对数组进行遍历,找到连续的小于postorder[n-1]的节点,假设前i个元素...原创 2021-09-18 20:14:28 · 91 阅读 · 0 评论 -
07-根据前序和中序重构二叉树
输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。如输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7],输出: [3,9,20,null,null,15,7]。 前序遍历是指根、左、右的顺序进行遍历,中序是指左、中、右进行遍历。所以前序遍历priorder的第一个节点肯定就是整个二叉树的根节点。根据第一个节点找到该值在inorder的位置,就可以...原创 2021-09-18 15:53:57 · 107 阅读 · 0 评论 -
68-普通二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”如输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1,输出: 3,节点 5 和节点 1 的最近公共祖先是节点 3。 对二叉树从下往上进行遍历。假设当前遍历的节点为temp节点...原创 2021-09-18 11:20:39 · 129 阅读 · 0 评论 -
68-二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。 如输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8;输出: 6 。解释: 节点 2 和节点 8 的最近公共祖先是 6。 既然给定的是二叉搜索树,则意味着树的左节点的值小...原创 2021-09-17 22:17:25 · 162 阅读 · 0 评论 -
55-平衡二叉树
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。如给定二叉树[3,9,20,null,null,15,7],返回true。 力扣把这道题划分为简单,但个人感觉也不是很简单。这里需要计算树的高度,如果高度差在1之内,可以理解为平衡二叉树,所以需要从底向上进行遍历,如果返回的是-1,则意味着不是平衡二叉树。二叉树还是不太好理解,要常常复习。 package leecodeOff; /* * ...原创 2021-09-17 21:12:19 · 115 阅读 · 0 评论 -
45-把数组排程最小的数字
剑指offer的第45道题:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。如输入: [3,30,34,5,9] 输出: "3033459"。输出结果可能非常大,所以你需要返回一个字符串而不是整数,拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0。 要想最后得要的数字最小,则要求拼接的字符串值最小。说到底其实还是一个排序问题,只不过不是普通的排序问题。这里需要比较的是两个数组合起来的大小。假设数组为[a,b,c,d,e,f]。我们...原创 2021-09-16 20:11:02 · 197 阅读 · 0 评论 -
54-二叉搜索树的第k大节点
剑指offer的第54道题,给定一棵二叉搜索树,请找出其中第k大的节点。 根据给出的样例数据,可以得出给出的二叉树是满足中序遍历递增序列的。按左、中、右进行遍历的时候是正序,那么按右、中、左进行遍历,则是逆序。因此本次要求找到第k大的节点,则意味着要逆序找到第k个元素。所以定义一个变量i用来记录第i个元素,定义一个value用来记录第k个元素的值。当对二叉树进行遍历的时候,如果i=k时,此时对value,进行赋值。也因此,如果value>0,则意味着循环结束了。具体代...原创 2021-09-15 23:39:01 · 230 阅读 · 0 评论 -
36-二叉搜索树和双向链表
剑指offer的第36道题。输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 从题意中可以看出,给出的二叉树是中序递增的,因此要形成一个排序的双向循环链表,要复用二叉树的中序递增特性。在对二叉树节点访问过程中,我们可以采用中序遍历的方法从小到达方位二叉树的节点。在构建相邻节点引用关系时,假设当前节点为cur节点,前置节点为pre节点,则pre.right = cur,cur.left = pre。同时表头...原创 2021-09-15 22:59:40 · 61 阅读 · 0 评论