- 博客(36)
- 收藏
- 关注
原创 12. 整数转罗马数字
根据罗马数字的唯一表示法,为了表示一个给定的整数 num\textit{num}num,我们寻找不超过 num\textit{num}num 的最大符号值,将 num\textit{num}num 减去该符号值,然后继续寻找不超过 num\textit{num}num 的最大符号值,将该符号拼接在上一个找到的符号之后,循环直至 num\textit{num}num 为 000。例如, 罗马数字 2 写做 II ,即为两个并列的 1。罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
2023-11-13 23:19:41 68
原创 13. 罗马数字转整数
通常情况下,罗马数字中小的数字在大的数字的右边。若存在小的数字在大的数字的左边的情况,根据规则需要减去小的数字。对于这种情况,我们也可以将每个字符视作一个单独的值,若一个数字右侧的数字比它大,则将该数字的符号取反。通常情况下,罗马数字中小的数字在大的数字的右边。若输入的字符串满足该情况,那么可以将每个字符视作一个单独的值,累加每个字符对应的数值即可。s 仅含字符 ('I', 'V', 'X', 'L', 'C', 'D', 'M')罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
2023-11-07 23:34:26 76
原创 134. 加油站
题目比较明显是有规律的,官方题解给出了数学推导证明从加油站 x 出发,每经过一个加油站就加一次油(包括起始加油站),最后一个可以到达的加油站是 y(不妨设 x<y),从 x,y 之间的任何一个加油站出发,都无法到达加油站 y 的下一个加油站。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。
2023-11-01 23:35:04 83
原创 238. 除自身以外数组的乘积
比较明显的思路是用上一次计算的左边和右边的乘积来计算下一次的结果,但是涉及到左边和右边一个是增加一个是减少,所以用一次循环来得到结果不行。进阶解法也是一样的思路,只不过只保存左边的乘积结果,这样就可以反方向遍历,保存一个右边乘积的临时变量迭代求解就可以了。给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。输入: nums = [-1,1,0,-3,3]输出: [24,12,8,6]输出: [0,0,9,0,0]
2023-10-31 21:51:16 53
原创 380. O(1) 时间插入、删除和获取随机元素
变长数组可以在 O(1)的时间内完成获取随机元素操作,但是由于无法在 O(1)的时间内判断元素是否存在,因此不能在 O(1)的时间内完成插入和删除操作。哈希表可以在 O(1) 的时间内完成插入和删除操作,但是由于无法根据下标定位到特定元素,因此不能在 O(1) 的时间内完成获取随机元素操作。为了满足插入、删除和获取随机元素操作的时间复杂度都是 O(1),需要将变长数组和哈希表结合,变长数组中存储元素,哈希表中存储每个元素在变长数组中的下标。// 返回 false ,表示集合中不存在 2。
2023-10-27 23:16:29 51
原创 274. H 指数
根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她)至少发表了 h 篇论文,并且每篇论文 至少 被引用 h 次。由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。解题思路:我们需要找到一个值 h,它是满足「有 h 篇论文的引用次数至少为 h」的最大值。输入:citations = [1,3,1]
2023-10-25 23:31:56 35
原创 45. 跳跃游戏 II
在遍历数组时,我们不访问最后一个元素,这是因为在访问最后一个元素之前,我们的边界一定大于等于最后一个位置,否则就无法跳到最后一个位置了。如果访问最后一个元素,在边界正好为最后一个位置的情况下,我们会增加一次「不必要的跳跃次数」,因此我们不必访问最后一个元素。链接:https://leetcode.cn/problems/jump-game-ii/solutions/230241/tiao-yue-you-xi-ii-by-leetcode-solution/输入: nums = [2,3,1,1,4]
2023-10-25 00:02:18 31
原创 55. 跳跃游戏
1.题目的规律是给出能跳的最大距离,如果能跳到某个位置i,则一定能跳到0~i-1的所有位置。也就是说从最后一个位置n开始遍历,假设前面有某三个个位置n-1,n-2,n-3可以跳到该位置,则n-2一定可以跳到n-1, n-3一定可以跳到n-2, n-1. 所以从后往前遍历,找到最近的能跳到该位置的点,接着再找是否有更靠前的点能跳到该点即可。解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。否则,返回 false。输入:nums = [2,3,1,1,4]
2023-10-18 23:29:05 38
原创 122. 买卖股票的最佳时机 II
详细推导:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/solutions/476791/mai-mai-gu-piao-de-zui-jia-shi-ji-ii-by-leetcode-s/?第i天的利润由第i-1天推出,同样分为持有股票利润和未持有股票利润。解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。
2023-10-18 00:01:03 33
原创 121. 买卖股票的最佳时机
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;解释:在这种情况下, 没有交易完成, 所以最大利润为 0。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]
2023-10-11 23:24:23 36
原创 189. 轮转数组 medium
1.能想到的最简单的方法就是新建一个size为k的临时数组,将k, n-1的数存到临时数组。输入: nums = [1,2,3,4,5,6,7], k = 3。输入:nums = [-1,-100,3,99], k = 2。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]输出: [5,6,7,1,2,3,4]
2023-10-10 23:05:47 56
原创 169. 多数元素
思路是:如果一个数组有大于一半的数相同,那么任意删去两个不同的数字,新数组还是会有相同的性质。给定一个大小为 n 的数组 nums ,返回其中的多数元素。解题思路: 题目看上去就是有规律的,肯定有巧妙的办法来解决。1:通过哈希表 unordered_map记录key,counts来实现信息的存储与查找,能较快的完成题目。2:将输入数组排序后,第取n/2个数就是答案,需要借助std:sort完成排序,也能较快的完成题目。输入:nums = [2,2,1,1,1,2,2]输入:nums = [3,2,3]
2023-10-09 23:23:56 37
原创 80. 删除有序数组中的重复项 II
当且仅当 nums[slow−2]=nums[fast] 时,当前待检查元素 nums[fast]不应该被保留(因为此时必然有 nums[slow−2]=nums[slow−1]=nums[fast])。解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3。输入:nums = [0,0,1,1,1,1,2,3,3]输出:7, nums = [0,0,1,1,2,3,3]输入:nums = [1,1,1,2,2,3]
2023-10-05 21:59:09 42
原创 删除有序数组中的重复项 easy
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]
2023-10-04 21:48:05 35
原创 11. 盛最多水的容器
重点还是找规律,首先容易确定面积计算公式area = min(height[j], height[i]) * (j - i). 那第一反应肯定是暴力破解,两层循环遍历,外层循环从0到n, 内层循环从n到0.方法没有问题,就是数据两大了之后会慢。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。,水槽的短板 min(h[i], h[j])输入:[1,8,6,2,5,4,8,3,7]...
2022-08-25 23:00:15 65 1
原创 回文数判断
链接https//leetcode.cn/problems/palindrome-number/solution/dong-hua-hui-wen-shu-de-san-chong-jie-fa-fa-jie-ch/这里需要注意的一个点就是由于回文数的位数可奇可偶,所以当它的长度是偶数时,它对折过来应该是相等的;当它的长度是奇数时,那么它对折过来后,有一个的长度需要去掉一位数(除以10并取整)。第一种暴力破解,最直接的想法把x拆分成一个个数存储在数组里,然后循环比较最后一个和第一个数是否相等。...
2022-07-21 23:26:50 1580
原创 Z 字形变换
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如“PAHNAPLSIIGYIR”。==>下标间距6-6-6==>下标间距step-step-step。==>下标间距间距6-6-6==>下标间距step-step-step。==>下标间距4-2-4-2==>下标间距step-2。==>下标间距2-4-2-4==>下标间距step-2。著作权归领扣网络所有。第2行2-4-8-10-14。...
2022-07-18 23:09:43 88
原创 无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2:输入: s = “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3:输入: s = “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子
2022-07-13 00:33:43 78
原创 2. 两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807. 示例 2:输入:l1 = [0], l2 = [0] 输出:[0] 示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9
2022-07-11 23:22:02 46
原创 1. 两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2:输入:nums = [3,2,4], target = 6 输出:[
2022-07-07 23:42:08 33
原创 经典杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2:输入: numRows = 1 输出: [[1]]作者:力扣 (LeetCode) 链接:https://leetcode.cn/leetbook/read/array-and-string/cuj3m/ 来源:力扣(LeetCode) 著
2022-07-04 23:23:11 47
原创 长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示例 1:输入:target = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。 示例 2:输入:target = 4, nums = [1,4,4] 输出:1 示例 3:输入:targe
2022-06-23 00:09:56 147
原创 最大连续1的个数
给定一个二进制数组 nums , 计算其中最大连续 1 的个数。示例 1:输入:nums = [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 示例 2:输入:nums = [1,0,1,1,0,1] 输出:2作者:力扣 (LeetCode) 链接:https://leetcode.cn/leetbook/read/array-and-string/cd71t/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非
2022-06-13 22:51:36 249
原创 移除数组元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而
2022-06-07 23:56:54 128
原创 两数之和 II - 输入有序数组
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1
2022-06-07 23:44:28 71
原创 给定长度数组拆分
给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。 返回该 最大总和 。 示例 1: 输入:nums = [1,4,3,2] 输出:4 解释:所有可能的分法(忽略元素顺序)为: (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3 (1, 3), (2, 4) -> min(1, 3) +
2022-05-18 23:53:35 299
原创 实现 strStr()在给定的字符串中找到另一个字符串出现的第一个位置
实现 strStr() 函数。 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。 说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。 示例 1: 输入:haystack = “hello
2022-05-14 23:43:09 486
原创 翻转字符串里的单词
给你一个字符串 s ,颠倒字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。 示例 1: 输入:s = “the sky is blue” 输出:“blue is sky the” 示例 2: 输入:s = " hello world "
2022-05-04 23:56:40 89
原创 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s = “cbbd” 输出:“bb” 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母组成 作者:力扣 (LeetCode) 链接:https://leetcode-cn.com/leetbook/read/array-and-string/conm7/ 来源:力扣(LeetCode) 著作权归作者所有
2022-05-01 23:51:29 156
原创 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入:strs = [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入:strs = [“dog”,“racecar”,“car”] 输出:“” 解释:输入不存在公共前缀。 提示: 1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成 作者:力扣 (LeetCod
2022-04-30 23:21:18 56
原创 对角线遍历MxN数组
给你一个大小为 m x n 的矩阵 mat ,请以对角线遍历的顺序,用一个数组返回这个矩阵中的所有元素。 示例 1: 输入:mat = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,4,7,5,3,6,8,9] 示例 2: 输入:mat = [[1,2],[3,4]] 输出:[1,2,3,4] 作者:力扣 (LeetCode) 链接:https://leetcode-cn.com/leetbook/read/array-and-string/cuxq3/ 来源:力扣(LeetCode
2022-04-27 23:43:15 335
原创 求解零矩阵
编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。 示例 1: 输入: [ [1,1,1], [1,0,1], [1,1,1] ] 输出: [ [1,0,1], [0,0,0], [1,0,1] ] 示例 2: 输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ] 输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ] 作者:力扣 (LeetCode) 链接:https://leetcode-cn.com/leetbook/read/ar
2022-04-25 23:45:28 461
原创 二维数组旋转
二维数组旋转 给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], 原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ] 作者:力扣 (LeetCode) 链接:https://leetcode-cn.com/leetbook/read/array-and-string/clpgd/ 来源:力扣(LeetCod
2022-04-25 00:01:10 256
转载 golang-基于channel实现的共享锁
@TOC问题背景 在实际项目中,希望用n个goroutine去一个带缓冲区的channel中读取数据,并且每个goroutine每次消费1000个数据,如果不足则按具体个数消费即可。为什么每次要消费1000个数据呢,因为希望在每个goroutine里面使用redis pipeline去获取这1000个数据的对应信息,这样就可以减少redis的访问次数。 而Channel中的数据量是未知的有限数据。...
2019-04-04 16:10:48 770
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人