- 博客(100)
- 收藏
- 关注
原创 155、最小栈-cangjie
这个 MinStack 实现非常有效,能够在常数时间内完成所需的操作,非常适合用于需要频繁获取最小值的场景。每次入栈的时候存储当前最小值即可。
2024-10-30 17:53:09
199
2
原创 146、LRU缓存-cangjie
1、为了实现插入后删除最老,需要从ListNode反查key,所以。需要存储kvpair,不能只存一个value。老生常谈了,option类型的返回值函数需要。会要(Int64) ->Tuple,这个不已经是tuple类型了嘛。2、双向链表节点获取问题。
2024-10-30 16:57:45
743
原创 17、电话号码的字母组合-cangjie
这个程序的核心思路是利用递归逐层构建字母组合,直到遍历完所有数字的可能字母。通过使用回溯方法(DFS),实现了对于所有可行组合的探索和累积。指向的是同一个引用,导致所有的array都变成了最后一次修改的结果。2、试了下append©,比insert(size, c)好用多了。目前是放弃了array,已老实用ArrayList。(其中 n 是输入字符串的长度)(用于递归栈和存储结果)倒是没报错,但是跑出来不对。1、array初始化问题。
2024-10-29 16:18:27
1465
原创 3211、生成不含相邻零的二进制字符串-cangjie
如果是顺序不敏感的ans,就可以直接在 0 位置插入 String(arr),但是如果是对顺序敏感的arr,则需要插入到队尾,即arr.size,注意不是size-1,相当于end()迭代器的位置。则在后续修改tmparr的时候,因为是浅拷贝(引用拷贝),因此会直接修改到arr,导致程序出错。var tmparr = ArrayList(arr)结果。2、ArrayList 的 insert 位置问题。,但是由于做的剪枝,所以相对于全访问,复杂度降低。3、Rune(i)使用问题。
2024-10-29 14:33:32
543
原创 8、字符串转换整数(atoi)-cangjie
2、遍历,如果 onlyNum 为 true,继续处理数字:如果当前字符是数字,将其转为相应的整数并累加到 ans,并每次乘以 10 来构建完整数字,返回前检查是否超出 Int32 的范围。1、创建字符数组,定义结果变量 ans 为 0,符号变量 符号 初始化为 1(表示正数),以及一个标志 onlyNum 用于指示是否已经读取到数字。1、string不能slice,必须转arr。
2024-10-28 16:25:30
306
原创 15、三数之和-cangjie
3、判断sum,根据sum和0的差值调整left 和 right。5、remove的时候记得倒序,不然把前面的删了后面顺序就变了。3、sortBy需要lmbda函数,没研究直接sort。5、需要去重,去重的时候记得倒序遍历,不然迭代器溢出。1、先进行sort,将数组按序排列。4、三元组需要顺序相同才可以直接。,所以前面需要按序insert。2、ArrayList需要。2、遍历三个数中的mid。4、回归了TwoSum。1、sort函数需要。
2024-10-28 16:08:41
455
原创 7、整数反转-cangjie
仓颉类型极值是以TYPE.Max或者TYPE.Min来表示的。:循环内部的操作,如取模和除法,都是常数时间操作。,因此循环的时间复杂度为。,这些都是常数空间的占用。:代码中使用的变量包括。
2024-10-26 11:37:07
217
原创 6、z字形变换-cangjie
1、仓颉类型强制赋值会报错,如果不想每个赋值都。2、数组初始化的时候,一开始还以为直接可以。开了个toRuneArray的数组。,每个字符只遍历一次。结果没想到真的是要写。
2024-10-22 17:12:50
202
原创 5、最长回文字串-cangjie
遍历每个字符,向外推开,记录最长的回文串的开始位置和长度,因为仅需一种合理答案即可,因此直接记录start和len。家人们谁懂啊,仓颉居然不支持string直接slice,需要转成array来slice,狠狠的无语了。
2024-10-22 16:41:04
364
原创 4、寻找两个正序数组的中位数-cangjie
其中 m 和 n 分别是数组 nums1 和 nums2 的长度。,每一轮循环可以将查找范围减少一半,因此时间复杂度是。仓颉在内存上比cpp少很多。重写了下官方题解的代码。逻辑题,没啥语言上的坑。
2024-10-22 15:13:51
180
原创 3、无重复字符的最长子串-cangjie
因此,右指针可能需要在每次外层循环中几乎遍历整条链(即从当前左右指针的相对位置到末尾)。向右遍历,每个位置最多只会被访问一次,因此在整个执行过程中,所有的字符总共也只会被访问一次,因此内层循环的总体时间复杂度也是。在这个特殊情况下,即每个字符都是重复的,内外层循环可能会导致重复的遍历,因此最坏的时间复杂度可表示为。结合以上分析,外层和内层循环虽然各自是线性的,但在平均情况下没有重复的情况下,整体复杂度仍然保持在。: 在最坏情况下,输入字符串可能全部由相同的字符组成,比如。
2024-10-22 11:43:45
570
原创 2、两数相加-cangjie
如果想用next来判断,不知道怎么写,说是p和q的类型是Option,所以不匹配,然后if仅接受bool。时间复杂度 O(max(len(l1), len(l2)))但是如果我直接写while(p <- None)会报错。则会报错,还是那句话,p和q是option,所以需要用。也看不懂,所以采用类似线程的while(1)写法了。空间复杂度 O(1)(不算结果空间)1、while循环不知道怎么写。2、判断子节点是否为空。和arkTS一样需要。
2024-10-21 17:17:08
520
原创 46. 全排列
给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例 1:示例 2:示例 3:nums = [1][[1]]中的所有整数互不相同。
2024-07-01 18:39:40
398
1
原创 200. 岛屿数量
给你一个由1(陆地)和0(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:1示例 2:3的值为0或1。
2024-07-01 18:13:39
910
原创 494. 目标和
给你一个非负整数数组nums和一个整数target。向数组中的每个整数前添加'+'或'-',然后串联起所有整数,可以构造一个表达式:例如,,可以在2之前添加'+',在1之前添加'-',然后串联起来得到表达式"+2-1"。返回可以通过上述方法构造的、运算结果等于target的不同表达式的数目。
2024-06-30 16:29:39
1143
原创 17.18. 最短超串
假设你有两个数组,一个长一个短,短的元素均不相同。找到长数组中包含短数组所有的元素的最短子数组,其出现顺序无关紧要。返回最短子数组的左端点和右端点,如有多个满足条件的子数组,返回左端点最小的一个。若不存在,返回空数组。
2024-06-29 22:37:36
716
原创 2742. 给墙壁刷油漆
给你两个长度为n下标从0开始的整数数组cost和time,分别表示给n堵不同的墙刷油漆需要的开销和时间。itime[i]cost[i]10请你返回刷完n堵墙最少开销为多少。示例 1:3解释:下标为0和1的墙由付费油漆匠来刷,需要3单位时间。同时,免费油漆匠刷下标为2和3的墙,需要2单位时间,开销为0。总开销为1 + 2 = 3。示例 2:4解释:下标为0和3的墙由付费油漆匠来刷,需要2单位时间。同时,免费油漆匠刷下标为1和2的墙,需要2单位时间,开销为0。总开销为2 + 2 = 4。
2024-06-28 14:35:02
661
原创 2734. 执行子串操作后的字典序最小字符串
给你一个仅由小写英文字母组成的字符串s。在一步操作中,你可以完成以下行为:选择s的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,‘b’ 用 ‘a’ 替换,‘a’ 用 ‘z’ 替换。返回执行上述操作 恰好一次 后可以获得的 字典序最小 的字符串。子字符串 是字符串中的一个连续字符序列。现有长度相同的两个字符串x和 字符串y,在满足的第一个位置i上,如果x[i]在字母表中先于y[i]出现,则认为字符串x比字符串y字典序更小。
2024-06-27 18:24:53
283
原创 2741. 特别的排列
给你一个下标从0开始的整数数组nums,它包含n个互不相同的正整数。如果nums的一个排列满足以下条件,我们称它是一个特别的排列:对于的下标i,要么,要么。请你返回特别排列的总数目,由于答案可能很大,请将它对10^9 + 7取余后返回。
2024-06-26 15:09:08
774
原创 2732. 找到矩阵中的好子集
给你一个下标从 0 开始大小为m x n的二进制矩阵grid。从原矩阵中选出若干行构成一个行的非空子集,如果子集中任何一列的和至多为子集大小的一半,那么我们称这个子集是好子集。更正式的,如果选出来的行子集大小(即行的数量)为k,那么每一列的和至多为。请你返回一个整数数组,它包含好子集的行下标,请你将其升序返回。如果有多个好子集,你可以返回任意一个。如果没有好子集,请你返回一个空数组。一个矩阵grid的行子集,是删除grid中某些(也可能不删除)行后,剩余行构成的元素集合。01。
2024-06-25 16:01:30
863
原创 55. 跳跃游戏
给你一个非负整数数组nums,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。示例 1:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
2024-06-24 17:17:56
362
原创 503. 下一个更大元素 II
给定一个循环数组nums的下一个元素是nums[0]),返回nums中每个元素的下一个更大元素。数字x的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1。示例 1:输入:输出:[2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
2024-06-24 16:21:14
961
原创 38. 外观数列
是的行程长度编码。行程长度编码(RLE)是一种字符串压缩方法,其工作原理是通过将连续相同字符(重复两次或更多次)替换为字符重复次数(运行长度)和字符的串联。例如,要压缩字符串 “3322251”,我们将 “33” 用 “23” 替换,将 “222” 用 “32” 替换,将 “5” 用 “15” 替换并将 “1” 用 “11” 替换。因此压缩后字符串变为 “23321511”。给定一个整数n,返回外观数列的第n个元素。示例 1:输入:n = 4输出:“1211”的行程长度编码 = “11”
2024-06-23 16:06:55
936
原创 520. 检测大写字母
给你一个字符串word。如果大写用法正确,返回true;否则,返回false。输入:word = “USA”输出:true输入:word = “FlaG”输出:false。
2024-06-23 15:21:41
426
原创 2663. 字典序最小的美丽字符串
k给你一个长度为n的美丽字符串s和一个正整数k。请你找出并返回一个长度为n的美丽字符串,该字符串还满足:在字典序大于s的所有美丽字符串中字典序最小。如果不存在这样的字符串,则返回一个空字符串。对于长度相同的两个字符串a和b,如果字符串a在与字符串b不同的第一个位置上的字符字典序更大,则字符串a的字典序大于字符串b。例如,“abcd” 的字典序比 “abcc” 更大,因为在不同的第一个位置(第四个字符)上d的字典序大于c。输入:s = “abcz”, k = 26输出:“abda”
2024-06-22 23:25:45
1400
原创 238. 除自身以外数组的乘积
给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内。请不要使用除法,且在 O(n) 时间复杂度内完成此题。输入: nums = [1,2,3,4]输出: [24,12,8,6]输入: nums = [-1,1,0,-3,3]输出: [0,0,9,0,0]nums:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?
2024-06-22 19:34:52
697
原创 53. 最大子数组和
给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。示例 1:6解释:连续子数组[4,-1,2,1]的和最大,为6。示例 2:nums = [1]1示例 3:23提示:1 <=<= 10^5-10^4 <=nums[i]<= 10^4进阶:如果你已经实现复杂度为O(n)的解法,尝试使用更为精妙的 分治法 求解。
2024-06-21 12:07:12
694
原创 LCP 61. 气温变化趋势
力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第i(i+1)i+1ii+1ii+1i已知和分别表示第i天两地区的气温。组委会希望找到一段天数尽可能多,且两地气温变化趋势相同的时间举办嘉年华活动。请分析并返回两地气温变化趋势相同的最大连续天数。即最大的n,使得第i~i+n天之间,两地气温变化趋势相同。示例 1:输入:输出:2解释:如下表所示, 第2~4天两地气温变化趋势相同,且持续时间最长,因此返回4-2=2示例 2:输入:输出:3提示:2 <=
2024-06-21 11:39:58
866
原创 239. 滑动窗口最大值
给你一个整数数组nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。
2024-06-20 12:49:30
964
原创 2748. 美丽下标对的数目
给定一个下标从 0 开始的整数数组 。如果下标对 满足 ,且 的第一个数字与 的最后一个数字互质,那么认为 和 是一组美丽下标对。对于两个整数 x 和 y,如果不存在大于 1 的整数可以同时整除它们,则认为 x 和 y 互质。换句话说,如果 ,则认为 x 和 y 互质,其中 是 x 和 y 的最大公因数。返回 中美丽下标对的总数目。示例 2:提示:为了找到所有美丽下标对,我们可以采用以下步骤:提取第一个和最后一个数字:检查互质条件:计数美丽下标对:以下是基于上述思路的 C 语言代码实
2024-06-20 11:33:58
400
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人