算法刷题记录
随缘找各种题目刷
秋田狗子
Java吹嘘人员
展开
-
34、leetcode不邻接植花、求1+2+…+n
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000My Answerclass Solution { public int sumNums(int n) { boolean b = n>0 && ((n+=sumNums(n-原创 2020-10-17 15:07:53 · 129 阅读 · 0 评论 -
33、leetcode全排列、交换数字
46. 全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]My Answerclass Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>&原创 2020-10-16 19:13:36 · 185 阅读 · 0 评论 -
32、leetcode删除链表的倒数第N个节点、斐波那契数
19. 删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?My Answer/** * Definition for singly-linked list. * public class ListNode {原创 2020-10-15 20:07:08 · 104 阅读 · 0 评论 -
31、leetcode找出数组中的幸运数、删除回文子序列
1394. 找出数组中的幸运数在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。给你一个整数数组 arr,请你从中找出并返回一个幸运数。如果数组中存在多个幸运数,只需返回 最大 的那个。如果数组中不含幸运数,则返回 -1 。示例 1:输入:arr = [2,2,3,4]输出:2解释:数组中唯一的幸运数是 2 ,因为数值 2 的出现频次也是 2 。示例 2:输入:arr = [1,2,2,3,3,3]输出:3解释:1、2 以及 3 都是幸运数,只需原创 2020-10-15 14:30:07 · 148 阅读 · 0 评论 -
30、leetcode特殊数组的特征值、数组的相对排序
1608. 特殊数组的特征值给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。注意: x 不必 是 nums 的中的元素。如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。示例 1:输入:nums = [3,5]输出:2解释:有 2 个元素(3 和 5)大原创 2020-10-14 21:31:13 · 191 阅读 · 0 评论 -
29、leetcode判定是否互为字符重排、重复 N 次的元素
面试题 01.02. 判定是否互为字符重排给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。示例 1:输入: s1 = "abc", s2 = "bca"输出: true 示例 2:输入: s1 = "abc", s2 = "bad"输出: false说明:0 <= len(s1) <= 1000 <= len(s2) <= 100My Answerclass Solution { publ原创 2020-10-13 20:18:15 · 138 阅读 · 0 评论 -
28、leetcode刷题每日温度、回文链表
739. 每日温度请根据每日气温列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures =[73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。My Answerublic原创 2020-10-12 13:20:00 · 132 阅读 · 0 评论 -
27、leetcode使括号有效的最少添加、设计一个支持增量操作的栈
921. 使括号有效的最少添加给定一个由 ‘(’ 和 ‘)’ 括号组成的字符串 S,我们需要添加最少的括号( ‘(’ 或是 ‘)’,可以在任何位置),以使得到的括号字符串有效。从形式上讲,只有满足下面几点之一,括号字符串才是有效的:它是一个空字符串,或者它可以被写成 AB (A 与 B 连接), 其中 A 和 B 都是有效字符串,或者它可以被写作 (A),其中 A 是有效字符串。给定一个括号字符串,返回为使结果字符串有效而必须添加的最少括号数。示例 1:输入:"())"输出:1示例 2原创 2020-10-10 17:33:49 · 111 阅读 · 0 评论 -
26、leetcode二叉树的前序遍历、二叉树的后序遍历
144. 二叉树的前序遍历给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?My Answer/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeN原创 2020-10-09 13:37:09 · 232 阅读 · 0 评论 -
25、leetcode二叉搜索树迭代器、二叉树的中序遍历
173. 二叉搜索树迭代器实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); // 返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 trueiterator.next(); // 返回 9iterator.hasN原创 2020-10-08 19:46:38 · 160 阅读 · 0 评论 -
24、leetcode丑数、反转字符串
263. 丑数编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。示例 1:输入: 6输出: true解释: 6 = 2 × 3示例 2:输入: 8输出: true解释: 8 = 2 × 2 × 2示例 3:输入: 14输出: false 解释: 14 不是丑数,因为它包含了另外一个质因数 7。说明:1 是丑数。输入不会超过 32 位有符号整数的范围: [−231, 231 − 1]。我的答案class Solution {原创 2020-10-08 19:03:16 · 116 阅读 · 0 评论 -
23、leetcode第一个错误的版本、第 N 个泰波那契数
278. 第一个错误的版本你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例:给定原创 2020-10-08 14:33:44 · 132 阅读 · 0 评论 -
22、leetcode拿硬币、转换成小写字母
LCP 06. 拿硬币桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例 1:输入:[4,2,1]输出:4解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。示例 2:输入:[2,3,10]输出:8限制:1 <= n <= 41 <= coins[i] <= 10我的答案class Solution {原创 2020-10-08 12:59:02 · 149 阅读 · 0 评论 -
21、leetcode回文链表、翻转图像
面试题 02.06. 回文链表编写一个函数,检查输入的链表是否是回文的。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true 进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?我的答案/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next原创 2020-10-05 20:14:47 · 143 阅读 · 0 评论 -
20、leetcode旋转字符串、配对交换
796. 旋转字符串给定两个字符串, A 和 B。A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = ‘abcde’,在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后,A 能变成B,那么返回True。示例 1:输入: A = 'abcde', B = 'cdeab'输出: true示例 2:输入: A = 'abcde', B = 'abced'输出: false注意:A 和 B 长度不超过 100。我的答案class Solution {原创 2020-10-04 12:49:55 · 311 阅读 · 0 评论 -
19、leetcode数字转换为十六进制数、Nim 游戏
405. 数字转换为十六进制数给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。 给定的数确保在32位有符号整数范围内。不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。示例 1:输入:26输出:"1a"示例 2:输入:-1输原创 2020-10-03 12:04:48 · 253 阅读 · 0 评论 -
18、leetcode4的幂、1比特与2比特字符
342. 4的幂给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。示例 1:输入: 16输出: true示例 2:输入: 5输出: false进阶:你能不使用循环或者递归来完成本题吗?我的答案4的幂二进制只有一个1,与2、8…一样。判断是否是4的,对3取余即可。class Solution { public boolean isPowerOfFour(int num) { if(num<1 || (num &原创 2020-09-30 13:54:01 · 167 阅读 · 0 评论 -
17、leetcode验证回文字符串 Ⅱ、Excel表列名称
680. 验证回文字符串 Ⅱ给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba"输出: True示例 2:输入: "abca"输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。我的答案class Solution { public boolean validPalindrome(String s) { char[] ar = s.toCharArray();原创 2020-09-29 20:28:34 · 107 阅读 · 0 评论 -
16、leetcode两个数组的交集、打印从1到最大的n位数
349. 两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4] 说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。我的答案class Solution { public int[] intersection(int[] nums1, int[] nums原创 2020-09-28 12:14:03 · 166 阅读 · 0 评论 -
15、leetcode翻转二叉树、最小的k个数
226. 翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。我的答案/** * Definition f原创 2020-09-26 14:20:46 · 120 阅读 · 0 评论 -
14、leetcode两数之和 II - 输入有序数组、链表中倒数第k个节点
167. 两数之和 II - 输入有序数组给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 11, 15], target = 9输出: [1,2]解释: 2 与 7 之和等于目标数原创 2020-09-25 18:07:41 · 106 阅读 · 0 评论 -
13、leetcode最长回文串、二维数组中的查找
409. 最长回文串给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。示例 1:输入:"abccccdd"输出:7解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。我的答案class Solution { public int longestPalindrome(String s) { i原创 2020-09-25 12:02:35 · 184 阅读 · 0 评论 -
12、leetcode替换空格、从尾到头打印链表
剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000我的答案class Solution { public String replaceSpace(String s) { return s.replace(" ", "%20"); }}剑指 Offer 06原创 2020-09-24 14:53:20 · 113 阅读 · 0 评论 -
11、leetcode环形链表、最后一个单词的长度
141. 环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3原创 2020-09-22 21:55:21 · 221 阅读 · 0 评论 -
10、leetcode搜索插入位置、链表的中间结点
35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0我的答案也可使用二分查找class Solution { public int sea原创 2020-09-21 20:17:11 · 139 阅读 · 0 评论 -
9、leetcode x 的平方根、反转链表
69. x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。我的答案class Solution { public int mySqrt(int x) { if(x==0){原创 2020-09-21 11:45:34 · 93 阅读 · 0 评论 -
8、leetcode重新排列数组、移动零
1470. 重新排列数组给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,…,xn,y1,y2,…,yn] 的格式排列。请你将数组按 [x1,y1,x2,y2,…,xn,yn] 格式重新排列,返回重排后的数组。示例 1:输入:nums = [2,5,1,3,4,7], n = 3输出:[2,3,5,4,1,7] 解释:由于 x1=2, x2=5, x3=1, y1=3, y2=4, y3=7 ,所以答案为 [2,3,5,4,1,7]示例 2:输入:nums = [1,2,原创 2020-09-20 16:50:17 · 150 阅读 · 0 评论 -
7、leetcode删除链表中的节点、拥有最多糖果的孩子
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:给定你链表中值为 1 的第原创 2020-09-20 16:18:38 · 126 阅读 · 0 评论 -
6、leetcodeIP 地址无效化、好数对的数目
1108. IP 地址无效化给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。示例 1:输入:address = "1.1.1.1"输出:"1[.]1[.]1[.]1"示例 2:输入:address = "255.100.50.0"输出:"255[.]100[.]50[.]0"提示:给出的 address 是一个有效的 IPv4 地址我的答案class Solution {原创 2020-09-19 21:09:07 · 112 阅读 · 0 评论 -
5、leetcode 一维数组的动态和、数组异或操作
1480. 一维数组的动态和给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1,原创 2020-09-18 21:56:36 · 345 阅读 · 0 评论 -
4、leetcode超过经理收入的员工、第二高的薪水、Excel表列序号
181. 超过经理收入的员工Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。+----+-------+--------+-----------+| Id | Name | Salary | ManagerId |+----+-------+--------+-----------+| 1 | Joe | 70000 | 3 || 2 | Henry | 80000 | 4 ||原创 2020-09-18 18:51:51 · 154 阅读 · 0 评论 -
2、leetcode阶乘后的零
172. 阶乘后的零给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.说明: 你算法的时间复杂度应为 O(log n) 。我的答案我们只需要在意有多少个可以产生0的东西,即2和5的个数,进一步我们知道2的个数永远都比5多,所以只需要知道5的个数即可。class Solution { public int trailingZer原创 2020-09-18 11:46:54 · 102 阅读 · 0 评论 -
3、leetcode验证回文串、从不订购的客户
125. 验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false我的答案class Solution { public boolean isPalindrome(String s) { StringBuffer string原创 2020-09-18 11:42:23 · 77 阅读 · 0 评论 -
1、leetcode组合两个表、加一
表1: Person±------------±--------+| 列名 | 类型 |±------------±--------+| PersonId | int || FirstName | varchar || LastName | varchar |±------------±--------+PersonId 是上表主键表2: Address±------------±--------+| 列名 | 类型原创 2020-09-17 18:14:50 · 124 阅读 · 0 评论 -
29基础练习 高精度加法
问题描述输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。 计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的...原创 2020-03-19 19:37:10 · 166 阅读 · 0 评论 -
30基础练习 阶乘计算
问题描述 输入一个正整数n,输出n!的值。其中n!=123*…*n。算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。输入格式输入包...原创 2020-03-19 19:07:27 · 421 阅读 · 0 评论 -
18基础练习 矩形面积交
问题描述平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。输入格式输入仅包含两行,每行描述一个矩形。在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。输出格式输出仅包含一个实数,为交的面积,保留到小数后两位。样例输入1 1 3 32 2 4 4样例输出...原创 2020-03-18 22:16:17 · 104 阅读 · 0 评论 -
基础练习 矩阵乘法
问题描述给定一个N阶矩阵A,输出A的M次幂(M是非负整数)例如: A =1 2 3 4 A的2次幂 7 10 15 22输入格式 第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数 接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值输出格式输出共N行,...原创 2020-03-18 10:35:52 · 33953 阅读 · 0 评论 -
基础练习 分解质因数
问题描述求出区间[a,b]中所有整数的质因数分解。输入格式输入两个整数a,b。输出格式每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)样例输入3 10样例输出3=34=2*25=56=2*37=78=2*2*29=3*310=2*5提示 先筛出所有素数,然后再分解。数据规模和约定 2&...原创 2020-03-16 14:17:27 · 193 阅读 · 1 评论 -
基础练习 字符串对比
问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等。比如 Beijing 和 Hebei 2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing 3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它...原创 2020-03-16 09:44:52 · 274 阅读 · 0 评论