
刷题
加油上学人
算法工程师。擅长算法优化,代码重构,微积分。加油打工人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Leetcode 合并区间
合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals = [[1.原创 2022-05-04 23:11:49 · 371 阅读 · 0 评论 -
leetcode 跳跃游戏
跳跃游戏给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到.原创 2022-05-02 10:58:36 · 970 阅读 · 0 评论 -
leetcode 最长有效括号
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1:输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2:输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”示例 3:输入:s = “”输出:0提示:0 <= s.length <= 3 * 104s[i] 为 ‘(’ 或 ‘)’来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob原创 2022-04-24 17:42:05 · 446 阅读 · 0 评论 -
Leetcode 二进制间距
二进制间距给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 。如果不存在两个相邻的 1,返回 0 。如果只有 0 将两个 1 分隔开(可能不存在 0 ),则认为这两个 1 彼此 相邻 。两个 1 之间的距离是它们的二进制表示中位置的绝对差。例如,“1001” 中的两个 1 的距离为 3 。示例 1:输入:n = 22输出:2解释:22 的二进制是 “10110” 。在 22 的二进制表示中,有三个 1,组成两对相邻的 1 。第一对相邻的 1 中,两个 .原创 2022-04-24 16:39:15 · 312 阅读 · 0 评论 -
Leetcode 字典序排数
字典序排数给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。示例 1:输入:n = 13输出:[1,10,11,12,13,2,3,4,5,6,7,8,9]示例 2:输入:n = 2输出:[1,2]提示:1 <= n <= 5 * 104思想:按照字典顺序输出数组,从1开始,符合python的sorted函数基本规则:class Solution: def lexic.转载 2022-04-18 21:03:46 · 261 阅读 · 0 评论 -
Leetcode 迷你语法分析器
迷你语法分析器给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。列表中的每个元素只可能是整数或整数嵌套列表示例 1:输入:s = "324",输出:324解释:你应该返回一个 NestedInteger 对象,其中只包含整数值 324。示例 2:输入:s = "[123,[456,[789]]]",输出:[123,[456,[789]]]解释:返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:.原创 2022-04-16 00:06:09 · 340 阅读 · 0 评论 -
Leetcode 找出最具竞争力的子序列
找出最具竞争力的子序列给你一个整数数组 nums 和一个正整数 k ,返回长度为 k 且最具 竞争力 的 nums 子序列。数组的子序列是从数组中删除一些元素(可能不删除元素)得到的序列。在子序列 a 和子序列 b 第一个不相同的位置上,如果 a 中的数字小于 b 中对应的数字,那么我们称子序列 a 比子序列 b(相同长度下)更具 竞争力 。 例如,[1,3,4] 比 [1,3,5] 更具竞争力,在第一个不相同的位置,也就是最后一个位置上, 4 小于 5 。示例 1:输入:nums = [3,.原创 2022-04-15 00:29:31 · 820 阅读 · 0 评论 -
LeetCode 最富有客户的资产总量
最富有客户的资产总量给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。示例 1:输入:accounts = [[1,2,3],[3,2,1]]输出:6解释:第 1 位客户的资产总量 = 1 + 2 + 3 = 6第 2 位客户的资产总量 = 3 +.原创 2022-04-14 23:48:06 · 176 阅读 · 0 评论 -
LeetCode O(1) 时间插入、删除和获取随机元素
O(1) 时间插入、删除和获取随机元素实现RandomizedSet 类:RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时,从集合中移除该项,并返回 true ;否则,返回 false 。int getRandom() 随机返回现有集合中的一项(测试用例保证调用此方法时集合中至.原创 2022-04-13 20:48:24 · 506 阅读 · 0 评论 -
leetcode 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4提示:1 <= nums.length <= 1原创 2022-04-13 20:19:39 · 496 阅读 · 0 评论 -
806. 写字符串需要的行数
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 ‘a’ 需要的单位, widths[1] 代表 ‘b’ 需要的单位,…, widths[25] 代表 ‘z’ 需要的单位。现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。示例 1:输入: width原创 2022-04-12 14:11:36 · 144 阅读 · 0 评论 -
leetcode 357. 统计各位数字都不同的数字个数
给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。示例 1:输入:n = 2输出:91解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。示例 2:输入:n = 0输出:1提示:0 <= n <= 8来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-numbers-with原创 2022-04-11 22:59:40 · 367 阅读 · 0 评论 -
leetcode 实现 strStr()
实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:haystack = "hello原创 2022-04-06 21:43:28 · 150 阅读 · 0 评论 -
leetcode 29. 两数相除
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例 1:输入: dividend = 10, divisor = 3输出: 3解释: 10/3 = truncate(3.33333…) = truncate(3)原创 2022-04-06 21:36:44 · 135 阅读 · 0 评论 -
leetcode 22括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。示例 1:输入:n = 3输出:["((()))","(()())","(())()","()(())","()()()"]示例 2:输入:n = 1输出:["()"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/generate-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:数据的原创 2022-04-03 21:30:15 · 651 阅读 · 0 评论 -
leetcode 744. 寻找比目标字母大的最小字母
给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。在比较时,字母是依序循环出现的。举个例子:如果目标字母 target = ‘z’ 并且字符列表为 letters = [‘a’, ‘b’],则答案返回 ‘a’示例 1:输入: letters = ["c", "f", "j"],target = "a"输出: "c"示例 2:输入: letters = ["c","f","j"], targe原创 2022-04-03 20:36:49 · 103 阅读 · 0 评论 -
leetcode 删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k 。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。判题标准:系统会用下原创 2022-03-08 22:51:30 · 224 阅读 · 0 评论 -
leetcode 合并两个有序链表
输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:采用递归的方式,当l1为空时返回l2,当l2为空.原创 2022-03-07 10:05:24 · 162 阅读 · 0 评论 -
LeetCode 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([)]"输出:false示例 5:输入:s = "{[]}"输出:true来源:力扣(LeetCode)链原创 2022-03-06 22:22:09 · 226 阅读 · 0 评论 -
PAT-A1005 Spell It Right (字符串问题)
题目解释:给出一个长度不超过10^100的数字,对其求和,并将其结果用英文输出,中间须有空格但末尾不能有。解题思想:首先获取输入字符串,之后对输入的字符串求和;获得求和结果之后,有两种处理方式:方法一:对和求余数,将余数存放在一个数组中,之后将该数组逆序输出;方法二:对和进行转字符串,之后遍历字符串,对应输出;代码://方法一 #include <iostream>#include <algorithm>using namespace std;const.原创 2020-07-22 22:02:30 · 209 阅读 · 0 评论 -
中序和后序构建二叉树
复习到此,利用PAT的一道题作为例题,进行学习。Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree.Input S原创 2022-03-05 21:34:49 · 1114 阅读 · 0 评论 -
DFS解决序列所有子列的问题
题目描述:有N个数从中选择K个数使和等于X且获得最大的平方和思路:首先用一个index作为数组的下标,判断当前节点是不是要加入进下一步的计算,如果要加入到到下一步的计算,那么对于的和sum和对应的最大平方和maxpow都要改变,已经加入的K的个数会发生改变;如果不加入下一步的计算,那么index继续向下移动,已经计算的K的个数不再统计。当index已经移动到数组的尾部,或者当前已经有K个数被加入到答案的序列中,或者序列中数字的和已经等于要求的X,那么就直接返回,程序结束;如果当前已经是第K个数,且原创 2022-03-05 19:33:10 · 324 阅读 · 0 评论 -
leetcode 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list著作权归领扣网络所有。商业转载请联系官方授权,原创 2022-03-02 18:07:04 · 383 阅读 · 0 评论 -
leetcode 四数之和
给你一个由 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你可以按 任意顺序 返回答案 。示例 1:输入:nums = [1,0,-1,原创 2022-03-02 17:27:23 · 111 阅读 · 0 评论 -
LeetCode 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = "23"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]示例 2:输入:digits = ""输出:[]示例 3:输入:digits = "2"输出:["a","b","c"]来源:力扣(LeetCode)链接:https://le原创 2022-03-02 16:47:41 · 234 阅读 · 0 评论 -
leetcode 最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。示例 1:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。示例 2:输入:nums = [0,0,0], target = 1输出:0来源:力扣(LeetCode)链接:https://lee原创 2022-02-26 10:57:30 · 356 阅读 · 0 评论 -
LeetCode 三数之和
给你一个包含 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]输出:[]来源:力扣(LeetCode)链接:https://leetcode-cn.co原创 2022-02-26 10:16:01 · 132 阅读 · 0 评论 -
LeetCode 整数转罗马数字
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况原创 2022-02-25 21:31:25 · 156 阅读 · 0 评论 -
leetcode 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例 2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数。来源:原创 2022-02-25 20:51:21 · 197 阅读 · 0 评论 -
A+B Format (20分)
1001 A+B Format (20分)Calculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specification:Each input file contains one test case. Each cas翻译 2020-07-21 16:39:25 · 555 阅读 · 0 评论 -
PAT-A 1006 Sign In and Sign Out(简单排序)
题目意思:给出一组数据,包含学生进出实验室的时间,让你找出最先进去和最后走的那个人。算法思想:该题比较简单,将时间转为秒,便于相互之间的比较,在比较的过程中直接保存结果,最后输出结果即可。代码://1006 Sign In and Sign Out #include <iostream>#include <algorithm>#include <cstring>using namespace std;int time(int hh, int mm, .原创 2020-07-22 23:35:42 · 179 阅读 · 0 评论 -
浙江大学PAT-B1002 写出这个数 (20分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100 。输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。输入样例:1234567890987654321123456789输出样例:yi san wu本题为字符串处理,初始化汉子拼音,之后按位输出。#include <iostream>#i原创 2020-06-02 21:44:54 · 289 阅读 · 1 评论 -
浙江大学PAT-B1004 成绩排名 (20分)
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩… … …第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式:对每个测试用例输出 2 行,第原创 2020-06-06 00:26:27 · 360 阅读 · 0 评论 -
浙江大学PAT-B1005 继续(3n+1)猜想 (25分)
卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 5、8、4、2 是被 3“覆盖”的数。我们称一个数列中的某个数 n 为“关键数”,如果 n 不能被数列中的其他数字所覆盖原创 2020-06-06 00:32:23 · 403 阅读 · 0 评论 -
leetcode 字符串转换整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“123” -原创 2022-02-24 22:40:06 · 130 阅读 · 0 评论 -
leetcode整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231 <= x <= 231 - 1来源:力扣(LeetCod原创 2022-02-24 21:24:22 · 243 阅读 · 0 评论 -
leetcode 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"aba" 同样是符合题意的答案。示例 2:输入:s = "cbbd"输出:"bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring思路见代码:class Solution{ public: string longestPalindrome(string s)原创 2022-02-24 20:54:44 · 246 阅读 · 0 评论 -
快速排序quicksort
快速排序的时间复杂度O(nlogn)思想:首先设置一个临时的变量temp用以存放A[left]的值;然后设置两个指针left和right,分别指向数组的左侧和右侧;从数组的右侧开始,如果A[right]<temp的值,那么不断将right的指针向左移动,当A[right]与left处指针指向的值相等时,交换这两个值的位置;从数组的左侧开始,如果A[left]>temp的值,那么不断的将left的指针向右移动,当A[left]与right处指针指向的值相等时,交换这两个值的位置;然后把原创 2022-02-22 20:39:34 · 192 阅读 · 0 评论 -
双指针-链表中的倒数第K个节点
给出一个链表,输出该链表的倒数第K个节点。用双指针,第一个指针先走K-1步,然后第二个指针开始走,当第一个指针到达尾部的时候,第二个指针刚好到达第倒数K个节点。需要注意边界条件//定义节点struct listNode{ int value; listNode *next;}; //开始查找listNode *findK(listNode *phead, unsigned int k){ if(phead == nullptr || k == 0) //考虑边界条件 { r原创 2022-02-21 15:11:25 · 611 阅读 · 0 评论 -
二分查找样例
int binarysearch(int A[], int left, int right, int x){ int mid; while(left <= right) { mid = left + (right-left)/2;//防止溢出 if(A[mid] == x) { return mid; }else if(A[mid] > x) //往左区间找 { right = mid - 1; }else //往右区间找 {原创 2022-02-21 14:55:27 · 142 阅读 · 0 评论