![](https://img-blog.csdnimg.cn/20201201220336584.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法题
文章平均质量分 54
这个专栏的目标:刷够300+的题
一碗机智的糖浆
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 62. 圆圈中最后剩下的数字(java实现)--3种解法(暴力,链表,数学)LeetCode--约瑟夫环问题
文章目录题目:延伸:解法1:暴力解法2:链表解法3:数学题目:0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制:1 <原创 2022-03-02 23:14:39 · 575 阅读 · 0 评论 -
41. 缺失的第一个正数(java实现)--1种解法(置换)LeetCode
文章目录题目:解法1:置换题目:给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:1 <= nums.length <= 5 * 10^5-2^31 <= nums[i] <=原创 2022-02-18 23:35:40 · 472 阅读 · 0 评论 -
18. 四数之和(java实现)--2种解法(双指针,hash)LeetCode
文章目录题目:解法1:双指针解法2:hash题目:给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):0 <= a, b, c, d < na、b、c 和 d 互不相同nums[a] + nums[b] + nums[c] + nums[d] == target你可以按 任意顺序 返回答案原创 2022-02-17 11:56:17 · 402 阅读 · 0 评论 -
19. 删除链表的倒数第 N 个结点(java实现)--6种解法(暴力,双指针,hash,集合,反转链表,递归)LeetCode
文章目录题目:解法1:暴力解法2:双指针解法3:hash解法4:集合解法5:反转链表解法6:递归题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Nod原创 2022-02-16 12:03:11 · 717 阅读 · 0 评论 -
25. K 个一组翻转链表(java实现)--2种解法(迭代,递归)LeetCode
文章目录题目:解法1:迭代解法2:递归题目:给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[2,1,4,3,5]示例 2:输入:head = [1,2,3,4原创 2022-02-15 22:56:50 · 338 阅读 · 0 评论 -
189. 旋转数组(java实现)--3种解法(新建数组,移动k次,3次反转)LeetCode
文章目录题目:解法1:新建数组解法2:移动k次首位交换末尾交换新建数组解法3:3次反转题目:给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99原创 2022-02-15 10:58:40 · 918 阅读 · 0 评论 -
26. 删除排序数组中的重复项(java实现)--1种解法(双指针)LeetCode
文章目录题目:解法1:双指针题目:给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间原创 2022-02-15 09:30:02 · 389 阅读 · 0 评论 -
24:两两交换链表中的节点(java实现)--2种解法(设置前驱节点,递归)LeetCode
文章目录题目:解法1:设置前驱节点解法2:递归题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100解法1:设置前驱节点原创 2022-02-14 11:02:43 · 892 阅读 · 0 评论 -
66. 加一(java实现)--2种解法(暴力,取模)LeetCode
文章目录题目:解法1:暴力解法1:暴力题目:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入:digits = [1,2,3]输出:[1,2,4]解释:输入数组表示数字 123。示例 2:输入:digits = [4,3,2,1]输出:[4,3,2,2]解释:输入数组表示数字 4321。示例 3:输入:digits = [0]原创 2022-02-14 09:38:43 · 182 阅读 · 0 评论 -
21. 合并两个有序链表(java实现)--2种解法(迭代,递归)LeetCode
文章目录题目:解法1:迭代解法2:递归题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 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.val <= 100l1 和原创 2022-02-14 09:00:23 · 527 阅读 · 0 评论 -
88. 合并两个有序数组(java实现)--3种解法(暴力,不建数组--从后往前,新建数组--从前往后)LeetCode
文章目录题目:解法1:暴力解法2:不建数组(从后往前)解法3:新建数组(从前往后)题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0原创 2022-02-13 13:41:35 · 1772 阅读 · 0 评论 -
876. 链表的中间结点(java实现)--1种解法(快慢指针)LeetCode
文章目录题目:解法1:快慢指针题目:给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans原创 2022-02-13 12:10:08 · 119 阅读 · 0 评论 -
234. 回文链表(java实现)--3种解法(双指针,反转链表后半段,边找中间节点边反转)LeetCode
文章目录题目:解法1:双指针解法2:反转链表后半段01:递归02:不设置前驱节点03:设置前驱节点解法3:边找中间节点边反转题目:解法1:双指针 /** * 思路: * 遍历链表值存入集合 * 双指针判断回文数 */ public static boolean isPalindrome(ListNode head) { ArrayList<Integer> list = new ArrayList<>();原创 2022-02-12 11:22:20 · 701 阅读 · 0 评论 -
142. 环形链表 II(java实现)--2种解法(双指针,hash)LeetCode
文章目录题目:解法1:双指针解法2:hash题目:给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。示例 1:输入:head = [3原创 2022-02-12 09:38:55 · 129 阅读 · 0 评论 -
141. 环形链表(java实现)--2种解法(双指针,hahs)LeetCode
文章目录题目:解法1:双指针解法2:hash题目:给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输原创 2022-02-12 09:01:53 · 119 阅读 · 0 评论 -
206. 反转链表(java实现)--3种解法(设置前驱节点,不设前驱,递归)LeetCode
文章目录题目:解法1:设置前驱节点解法2:不设置前驱节点解法3:递归题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000解法1:设置前驱节点 /**原创 2022-02-10 17:50:32 · 912 阅读 · 0 评论 -
15. 三数之和(java实现)--3种解法(双指针,Hash,暴力)LeetCode
文章目录题目:解法1:双指针解法2:Hash解法3:暴力题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 &l原创 2022-02-10 10:54:21 · 1492 阅读 · 0 评论 -
9. 回文数(java实现)--3种解法(暴力,数学,反转一半数字)LeetCode
文章目录题目:解法1:暴力法解法2:数学方法解法3:反转一半数字题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:fa原创 2022-02-05 07:47:00 · 1431 阅读 · 0 评论 -
1. 两数之和(java实现)--2种解法(暴力,hash)LeetCode
文章目录题目:暴力hash两次hash一次hash题目:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2原创 2022-02-09 08:46:14 · 305 阅读 · 0 评论 -
11. 盛最多水的容器(java实现)--2种解法(左右夹逼,暴力)LeetCode
文章目录题目:解法1:左右夹逼解法2:暴力题目:给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分原创 2022-02-09 07:15:32 · 155 阅读 · 0 评论 -
283. 移动零(java实现)--2种解法(暴力,双指针)LeetCode
文章目录题目:解法1:暴力解法2:双指针题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1:输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:输入: nums = [0]输出: [0]提示:1 <= nums.length <= 104-231 <= nums[i] <= 231 - 1进阶:你能尽量减少完成的原创 2022-02-08 16:39:41 · 913 阅读 · 0 评论 -
51. N 皇后(java实现)--LeetCode
文章目录题目:解法1:递归(对角线规律)解法2:递归(遍历每层)解法3:递归(从下往上)题目:解法1:递归(对角线规律)/** * 思路: * 从上往下 * 核心思路:确定一个皇后的位置,列上,对角线上不能有其他皇后。右侧的对角线上的数,row-col的相同的。左侧对角线上的数,row+col相同。 * 0,0 0,1 0,2 0,3 * 1,0 1,1 1,2 1,3 * 2,0 2,1 2,2 2,3 * 主对角线(左)row+col相同。从对角线(右)row-col相同 *原创 2021-02-01 19:07:15 · 200 阅读 · 0 评论 -
17. 电话号码的字母组合(java实现)--LeetCode
文章目录题目:解法1:递归解法2:迭代题目:给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]提示:原创 2021-02-01 16:49:07 · 286 阅读 · 0 评论 -
169. 多数元素(java实现)--LeetCode
文章目录题目:解法1:排序解法2:随机数解法3:位运算解法4:分治解法5:MorreVoting解法6:map题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。解法1:排序/** *原创 2021-01-31 17:50:18 · 374 阅读 · 0 评论 -
78. 子集(java实现)--LeetCode
文章目录题目:解法1:递归解法2:递归(放格子)解法3:迭代解法4:位运算题目:给你一个整数数组 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原创 2021-01-31 16:08:01 · 384 阅读 · 0 评论 -
50. Pow(x, n)(java实现)--LeetCode
文章目录题目:解法1:暴力解法2:递归解法3:快速幂解法4:快速幂(迭代)题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。示例 1:输入:x = 2.00000, n = 10输出:1024.00000示例 2:输入:x = 2.10000, n = 3输出:9.26100示例 3:输入:x = 2.00000, n = -2输出:0.25000解释:2-2 = 1/22 = 1/4 = 0.25提示:-100.0 < x < 10原创 2021-01-31 12:57:18 · 289 阅读 · 0 评论 -
47. 全排列 II(java实现)--LeetCode
文章目录题目:解法1:递归(标记法)解法2:递归(交换法)题目:给定一个可包含重复数字的序列 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 <= nu原创 2021-01-25 19:09:16 · 267 阅读 · 0 评论 -
46. 全排列(java实现)--LeetCode
文章目录题目:解法1:递归(换位)解法2:题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解法1:递归(换位)/** * 思路: * 放格子,第一个格子放所有的数 * 第二个放除第一个格子外所有的数 * 第三个格子放除1,2格子中的所有的数 * 。。。 * 最后就是所有的可能性 * * 为了实原创 2021-01-25 17:49:30 · 340 阅读 · 0 评论 -
77. 组合(java实现)--LeetCode
文章目录题目:解法1:递归(队列)解法2:递归(ArrayList)题目:给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。示例:输入: n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]解法1:递归(队列)/** * 思路: * 如果当前队列的长度是k,就往结果集中加入 * 遍历所有可能的组合,1所有,2所有。。。 * 把当前的数加入队列 * 删除队列尾原创 2021-01-25 17:23:21 · 151 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树(java实现)--LeetCode
解法1:递归/** * 思路: * 1 * 2 3 * 4 5 6 7 * * 中序:425 1 637 * 后序:452 673 1 * * 根据中序遍历我们可以知道根节点的位置,以及根节点的左子树和右子树各有多少个节点:425 1 637 * 在知道左子树和右子树个数的情况下,我们就能在后序遍历中找到左子树和右子树的起点和终点 * 之后递归的设置左右子树 */ public TreeNode buildTree(int[] inorder, i原创 2021-01-25 14:20:39 · 168 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树(java实现)--LeetCode
文章目录题目:解法1:递归解法2:递归(光头哥说的On^2的情况)解法3:递归(光头哥说的用map降到On的情况)题目:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解法1:递归光头哥原文:https://leetcode.com/p原创 2021-01-25 14:02:36 · 395 阅读 · 3 评论 -
236. 二叉树的最近公共祖先(java实现)--LeetCode
文章目录题目:解法1:递归解法2:迭代题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q原创 2021-01-25 13:13:39 · 371 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化(java实现)--LeetCode
文章目录题目:解法1:递归解法2:队列解法3:递归(超出内存限制)题目:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树: 1 / \ 2 3原创 2021-01-21 20:13:23 · 118 阅读 · 0 评论 -
111. 二叉树的最小深度(java实现)--LeetCode
文章目录题目:解法1:递归题目:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000解法1:递归/** *原创 2021-01-21 17:28:09 · 263 阅读 · 0 评论 -
104. 二叉树的最大深度(java实现)--LeetCode
文章目录题目:解法1:递归题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。解法1:递归 /** * 思路 * 遍历树 * 不断的递归,记录左右节点的深度,返回其中最大的 */ pub原创 2021-01-21 17:15:20 · 273 阅读 · 0 评论 -
98. 验证二叉搜索树(java实现)--LeetCode
文章目录题目:解法1:中序遍历解法2:递归解法3:stack题目:给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,原创 2021-01-20 11:32:59 · 119 阅读 · 0 评论 -
226. 翻转二叉树(java实现)--LeetCode
文章目录题目:解法1:递归(从上到下)解法2:递归(自下到上)解法3:队列解法4:栈(和队列的代码完全一样)题目:翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时原创 2021-01-20 11:09:10 · 241 阅读 · 0 评论 -
22. 括号生成(java实现)--LeetCode
文章目录题目:解法1:递归题目:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]提示:1 <= n <= 8解法1:递归/** * 思路 * 重复性,如何用左右括号 * 括号合法条件: * 左括号随时可加,只要不超标 * 右括号前面必须有左括号原创 2021-01-20 10:50:58 · 156 阅读 · 0 评论 -
剑指 Offer 49. 丑数(java实现)--LeetCode
文章目录题目:解法1:heap题目:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。注意:本题与主站 264 题相同:https://leetcode-cn.com/problems/ugly-number-ii/解法1:heap/** * 思路:原创 2021-01-18 12:11:43 · 88 阅读 · 0 评论 -
347. 前 K 个高频元素(java实现)--LeetCode
文章目录题目:解法1:heap解法2:二叉搜索树题目:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) ,n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素原创 2021-01-18 11:33:43 · 184 阅读 · 0 评论