leetcode刷题
参考:https://blog.csdn.net/IBelieve2016/article/details/104544763
5jerry
这个作者很懒,什么都没留下…
展开
-
实现字典树
自己实现的字典树版本。带详细注释package leetcode.LC;class TrieNode{ //4个参数设置 //以该节点字符为结尾的字符串数目 int end_num; //以该节点作为前缀字符的个数 int prefix_num; //是否是叶子结点 boolean is_leaf; //每个字符都含有26个字母可选 TrieNode sub_nodes[]; public TrieNode(){.原创 2022-03-17 15:58:45 · 2420 阅读 · 0 评论 -
java 手动实现算法 任意进制之间转换
题目:src字符串,给出src代表的src_base进制 要求转换成 dst_base进制函数签名:String convertNum(String src,int src_base,int dst_base)如 -12 8进制转换成2进制 convertNum("-12",8,2) 为 -1010解题思路:先将src_base进制转换成10进制,再将该10进制数转换成dst_base进制package leetcode.test;import java.util.Ha...原创 2021-07-21 12:39:45 · 261 阅读 · 0 评论 -
01背包和完全背包问题 解题套路小结
将背包问题最后抽象为:有一个数组 nums = [1,2,3,4,5,6.....] ,目标数 T=n.当nums里面每个数只能用一次时,代表01背包当nums里面每个数可以无线使用,代表完全背包。总结背包问题 为以下几个问题:(几乎所有同类型的题目最后都能转换为以下的几个思路)1.设 从nums里面取出一些数刚好凑成T, 这些数为1个组合。问:能从nums里面取出的组合数和等于T的有多少个?2.能否从nums里面取出一些数能凑成T.3.凑成一个最接近或等于T的数。 即从num.原创 2021-04-19 10:31:55 · 254 阅读 · 0 评论 -
494. 目标和
我写在LC官网的题解上了,从01背包到解题方法。https://leetcode-cn.com/problems/target-sum/solution/can-kao-01bei-bao-jie-ti-ji-qi-you-hua-s-exln/原创 2021-04-16 22:00:10 · 98 阅读 · 0 评论 -
36. 有效的数独
36. 有效的数独难度中等469判断一个9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。数字1-9在每一行只能出现一次。 数字1-9在每一列只能出现一次。 数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。上图是一个部分填充的有效的数独。数独部分空格内已填入了数字,空白格用'.'表示。示例1:输入:[ ["5","3",".",".","7",".",".",".","."], ["6",".",".",...原创 2021-02-16 18:31:41 · 119 阅读 · 0 评论 -
66. 加一
66. 加一难度简单626给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digit...原创 2021-02-16 00:46:01 · 119 阅读 · 0 评论 -
260. 只出现一次的数字 III
260. 只出现一次的数字 III难度中等358给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按任意顺序返回答案。进阶:你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?示例 1:输入:nums = [1,2,1,3,2,5]输出:[3,5]解释:[5, 3] 也是有效的答案。示例 2:输入:nums = [-1,0]输出:[-1,0]示例 3:输入:n...原创 2021-02-16 00:22:24 · 130 阅读 · 0 评论 -
350. 两个数组的交集 II
350. 两个数组的交集 II难度简单446给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算..原创 2021-02-15 23:36:34 · 112 阅读 · 0 评论 -
202. 快乐数
202. 快乐数难度简单531编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。 如果可以变为 1,那么这个数就是快乐数。如果n是快乐数就返回true;不是,则返回false。示例 1:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 ...原创 2021-02-15 22:53:25 · 235 阅读 · 0 评论 -
22. 括号生成
22. 括号生成难度中等1552数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8通过次数225,350提交次数293,515思路是:采用类二叉树回溯法(lc39,40,78等),选括号或者不选括号...原创 2021-02-08 19:40:58 · 93 阅读 · 0 评论 -
90. 子集 II
解答成功: 执行耗时:2 ms,击败了52.24% 的Java用户 内存消耗:38.5 MB,击败了91.12% 的Java用户class Solution { List<List<Integer>> res =new ArrayList<>(); //深度递归回溯 public void func(List<Integer> sub_list,int...原创 2021-02-08 16:39:00 · 56 阅读 · 0 评论 -
47. 全排列 II
47. 全排列 II难度中等581给定一个可包含重复数字的序列nums,按任意顺序返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2], [1,2,1], [2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:1 <= nums.length <= 8 -10 <= n...原创 2021-02-07 15:55:46 · 93 阅读 · 0 评论 -
46. 全排列
46. 全排列难度中等1116给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]通过次数251,458提交次数324,356参考(示例图):https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-by-leetcode-sol..原创 2021-02-07 14:39:46 · 84 阅读 · 0 评论 -
40. 组合总和 II
40. 组合总和 II难度中等485给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。示例1:输入: candidates =[10,1,2,7,6,1,5], target =8,所求解集为:[ [1, 7], [1, 2, 5], [2, ...原创 2021-02-06 18:34:30 · 71 阅读 · 0 评论 -
39. 组合总和
39. 组合总和难度中等1152给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。 解集不能包含重复的组合。示例1:输入:candidates = [2,3,6,7], target = 7,所求解集为:(注意这里可能会重复选择)[ [7], [2,2,3]]...原创 2021-02-06 17:00:34 · 80 阅读 · 0 评论 -
78. 子集
78. 子集难度中等978给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10 -10 <= ...原创 2021-02-05 01:01:03 · 171 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球(稍微总结一下贪心)
贪心思想:完成目标的前提下,尽可能找到最优的边界。45 跳跃题目,就是先确定能跳的区间之后再找到能跳的最大数。本题目气球,先排序,然后确定能射爆该气球的前提下尽可能多的去射爆其他气球。452. 用最少数量的箭引爆气球难度中等343在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了。开始坐标总是小于结束坐标。一支弓箭可以沿着 x 轴从不同点完全垂直地射出。在坐标 x 处原创 2021-02-04 22:36:40 · 82 阅读 · 0 评论 -
45. 跳跃游戏 II
45. 跳跃游戏 II难度困难815给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。23:08 info ...原创 2021-02-02 23:10:18 · 79 阅读 · 0 评论 -
55. 跳跃游戏
55. 跳跃游戏难度中等1030给定一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该...原创 2021-02-02 21:34:09 · 76 阅读 · 0 评论 -
leetcode URL化
面试题 01.03. URL化难度简单28URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)示例 1:输入:"Mr John Smith ", 13输出:"Mr%20John%20Smith"示例 2:输入:" ", 5输出:"%20%20%20%20%20"提示:字符串..原创 2021-02-02 17:29:15 · 80 阅读 · 1 评论 -
989 数组形式的整数加法
//对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。 //// 给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。 //// //// // //// 示例 1: //// 输入:A = [1,2,0,0], K = 34//输出:[1,2,3,4]//解释:1200 + 34 = 1234// //// 示例 2: //// 输入:A = [2,7,4], K.原创 2021-01-22 00:48:17 · 145 阅读 · 0 评论 -
402.移掉k位数字
/给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。 //// 注意: //// // num 的长度小于 10002 且 ≥ k。 // num 不会包含任何前导零。 // //// 示例 1 : //// //输入: num = "1432219", k = 3//输出: "1219"//解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。// //// 示例 2 : //// //输入: num .原创 2021-01-22 00:09:46 · 101 阅读 · 0 评论 -
376 摆动序列
//如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 //// 例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,//4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。 //// 给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从.原创 2021-01-21 21:33:01 · 82 阅读 · 1 评论 -
455 分发饼干
//假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 //// 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i//],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。 // //// 示例 1: //// //输入: g = [1,2,3], s = [1,1]//输.原创 2021-01-20 20:38:09 · 74 阅读 · 0 评论 -
628. 三个数的最大乘积
628. 三个数的最大乘积难度简单248给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24注意:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000, 1000]。 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。思路1:本质是找到最大的三个数和最小的两个数来操作 解答成功: ...原创 2021-01-20 19:13:46 · 71 阅读 · 0 评论 -
23.合并k个有序链表
//给你一个链表数组,每个链表都已经按升序排列。 //// 请你将所有链表合并到一个升序链表中,返回合并后的链表。 //// //// 示例 1: //// 输入:lists = [[1,4,5],[1,3,4],[2,6]]//输出:[1,1,2,3,4,4,5,6]//解释:链表数组如下://[// 1->4->5,// 1->3->4,// 2->6//]//将它们合并到一个有序链表中得到。//1->1->2-&...原创 2021-01-20 17:04:07 · 93 阅读 · 1 评论 -
21. 合并两个有序链表
21. 合并两个有序链表难度简单1485将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是[0, 50] -100 <= Node...原创 2021-01-19 15:31:55 · 247 阅读 · 0 评论 -
138. 复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。我们用一个由n个节点组成的链表来表示输入/输出中的链表。每个节点用一个[val, random_index]表示:val:一个表示Node.val的整数。random_index:随机指针指向的节点索引(范围从0到n-1);如果不指向任何节点,则为null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10...原创 2021-01-19 11:47:13 · 86 阅读 · 0 评论 -
86. 分隔链表
86. 分隔链表难度中等354给你一个链表和一个特定值x,请你对链表进行分隔,使得所有小于x的节点都出现在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。示例:输入:head = 1->4->3->2->5->2, x = 3输出:1->2->2->4->3->5通过次数84,876提交次数136,244思路:用两个链表,一个存大于等于x的节点,一个存小于x的节点,遍历链...原创 2021-01-18 22:29:40 · 66 阅读 · 0 评论 -
141 环形链表
//给定一个链表,判断链表中是否有环。 //// 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的//位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。 //// 如果链表中存在环,则返回 true 。 否则,返回 false 。 //// //// 进阶: //// 你能用 O(1)(即...原创 2021-01-16 18:26:59 · 122 阅读 · 0 评论 -
160 相交链表
//编写一个程序,找到两个单链表相交的起始节点。 //// 如下面的两个链表: //// //// 在节点 c1 开始相交。 //// //// 示例 1: //// //// 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, s//kipB = 3//输出:Reference of the node with value = 8//输入解释:相交节点的值为 8 (注意,.原创 2021-01-16 14:07:44 · 74 阅读 · 0 评论 -
92 反转链表II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤m≤n≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL通过次数95,946提交次数184,486来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-ii著作权归领扣网络...原创 2021-01-16 13:39:03 · 77 阅读 · 0 评论 -
206 反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。迭代:头插法,新定义一个新头节点newhe原创 2021-01-16 12:11:24 · 82 阅读 · 0 评论 -
295 寻找数据流的中位数
中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5addNum(3)findMe..原创 2021-01-14 18:06:57 · 146 阅读 · 1 评论 -
20 有效的括号
解法:一个栈即可注意可能存在 "])" 这种只输入右括号的情况。//给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 //// 有效字符串需满足: //// // 左括号必须用相同类型的右括号闭合。 // 左括号必须以正确的顺序闭合。 // //// 注意空字符串可被认为是有效字符串。 //// 示例 1: //// 输入: "()"//输出: true// //// 示例 2: //// 输入: "()[]{..原创 2021-01-10 13:49:36 · 98 阅读 · 0 评论 -
poj 1363 合法出栈序列
方法:按照给定顺序入栈和出栈,是否能得到相同的序列(判断合法,只要看最后按照栈顺序的输出的数量是否达到序列长度)public static boolean is_legal_stack(int [] input,int []order){ Stack <Integer> stack1 = new Stack<>(); int j=0; for(int i=0;i<5;i++){ stack1.p.原创 2021-01-09 22:34:38 · 283 阅读 · 0 评论 -
155 最小栈
方法一:两个栈,第一个栈保存值,第二个栈,栈顶保存当前最小值, stack1每输入一个值则在stack2压入一个当前最小值,这两个栈大小相等import java.util.Stack;class MinStack { private Stack <Integer> s1; private Stack <Integer> s2; /** initialize your data structure here. */ public Mi.原创 2021-01-08 17:04:33 · 99 阅读 · 0 评论 -
232 用栈实现队列
//请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty): //// 实现 MyQueue 类: //// // void push(int x) 将元素 x 推到队列的末尾 // int pop() 从队列的开头移除并返回元素 // int peek() 返回队列开头的元素 // boolean empty() 如果队列为空,返回 true ;否则,返回 false // //// //// 说明: //// /.原创 2021-01-08 13:59:22 · 122 阅读 · 0 评论 -
Squaring a Sorted Array (easy)
刷题顺序:https://blog.csdn.net/IBelieve2016/article/details/104544763/*给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。?示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]*/#include<iostream>#include<math.h>#include<vector>using namespace .原创 2021-01-07 16:29:47 · 150 阅读 · 0 评论 -
Remove Duplicates (easy)
刷题顺序:https://blog.csdn.net/IBelieve2016/article/details/104544763/*Given a sorted array, remove the duplicates in place such that each element appear only onceand return the new length.Do not allocate extra space for another array, you must do t.原创 2021-01-07 16:28:47 · 136 阅读 · 0 评论