- 博客(18)
- 收藏
- 关注
原创 leetcode75 颜色排序
题目描述给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。你能想出一个仅使用
2020-06-30 16:43:58
108
原创 leetcode337 打家劫舍III
题目描述在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,null,1] 3/ \2 3\ \3 1输出: 7解释: 小
2020-06-24 21:07:58
122
原创 leetcode198 打家劫舍
题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2,7
2020-06-24 15:32:15
132
原创 leetcode343 整数拆分
题目描述给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。思路及代码记忆化搜索class Solution { int[] memo; public int integerBrea
2020-06-23 23:07:24
170
原创 leetcode70 爬楼梯
题目描述假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶思路动态规划 时间复杂度:O(n) 空间复杂度:O(1)class Solution {
2020-06-05 15:27:00
69
原创 leetcode279 完全平方数
题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.思路利用动态规划 创建一个长度为n+1的一维数组状态转移 for(int i=2;i<=n;i++){ for(int j=1;j*j<=i;j++){ d
2020-06-05 01:06:22
111
原创 leetcode72 编辑距离
题目描述给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1 = “inten
2020-06-04 21:25:45
180
原创 leetcode21 合并有序链表
题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路利用递归调用/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNod
2020-06-03 21:38:10
101
原创 leetcode160 相交链表
题目描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。思路思路1遍历两个链表,分别统计出两个链表的长度,然后较长的链表先往前走长度之差步 然后两个链表同时向后遍历直到找到相交的交点思路2两个链表同时遍历,较短的链表遍历完后重新指向另一个链表的头节点直到较长的链表遍历到末尾,这时将其指向短链表的头节点,两指针同步往前遍历直到遍历到同一节点代码/** * Definition for singly-linked list. * public cl
2020-06-03 21:14:40
160
原创 leetcode2 两数相加
题目描述给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路同时遍历两个链表 同时使用carry表示进位数cla
2020-06-03 00:02:04
72
原创 leetcode19 删除链表的倒数第N个节点
题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。思路使用一快一慢两个指针,快指针先走n+1步,然后快慢指针同步往前走 再删除慢指针的后一个元素代码/** * Definition for singly-linked list. * public class Li
2020-06-02 23:46:36
92
原创 leetcode234 回文链表
题目描述请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路使用快慢指针找出中间节点,找出后将后半部分反转 再比较反转后的后半部分和前半部分代码/** * Definition for singly-linked list. * public class ListNode { * int val;
2020-06-02 23:37:04
92
原创 leetcode141 环形链表
题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。进阶:你能用 O(1)(即,常量)内存解决此问题吗?思路及代码使用快慢指针,fast指针每次走两步,slow指针每次走一步,如果链表有环,fast和slow必定会在某一时刻相遇
2020-06-02 17:19:59
75
原创 leetcode206 反转链表
题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL思路迭代遍历链表维持三个指针 pre next curr 遍历时使用next保存下一个节点时间复杂度:O(n) 空间复杂度:O(1)代码:/** * Definition for singly-linked list. * public class ListNode { * int val;
2020-06-02 15:56:09
95
原创 leetcode136 只出现一次的数字
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路使用位运算,两个相同的数字异或运算得到的结果是0,0和一个数字的异或运算结果是这个数字本身,所以将所有的数字进行位运算的结果为那个不重复的数字代码class Solution { public int
2020-06-01 14:48:11
111
原创 leetcode114二叉树的最大深度
题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回它的最大深度 3 。简单递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *
2020-05-30 15:45:43
110
原创 leetcode94 二叉树的中序遍历
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]方法一:递归时间复杂度:O(n)空间复杂度:O(
2020-05-30 15:41:47
174
原创 leetcode113. 路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]想法 深度优先遍历/** * Definition f
2020-05-30 14:45:02
168
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人