算法
文章平均质量分 77
一只小百里
热爱编程的菜鸟
展开
-
力扣天天练--week3-LeetCode75
题目描述:给你一个字符数组 chars ,请使用下述算法压缩:从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 :如果这一组长度为 1 ,则将字符追加到 s 中。否则,需要向 s 追加字符,后跟这一组的长度。压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。请在 修改完输入数组后 ,返回该数组的新长度。原创 2023-07-26 09:49:23 · 147 阅读 · 0 评论 -
力扣天天练week3-LeetCode75
题目描述:给你两个字符串word1和word2。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串。示例:思路:将word1和word2逐项加到result中,直到其中一个为空,再将剩余元素加到结果中。原创 2023-07-24 11:21:29 · 120 阅读 · 0 评论 -
算法-----回溯
回溯 (Backtracking) 是一种求解问题的算法思想,通常用于在一组可能的解中搜索出所有的解。回溯算法的基本思想是,从问题的解空间树中搜索所有可能的解,当发现当前搜索状态不能得到正确的解时,就返回到上一个状态,继续搜索其他可能的解。回溯算法通常采用递归的方式实现。原创 2023-07-20 10:19:05 · 153 阅读 · 0 评论 -
力扣天天练-day13
这里使用了一个技巧,即将每个子集按照元素大小排序后,再将其转换为元组,然后将所有元组放入一个集合中去重。使用 itertools 库中的 combinations() 函数生成所有可能的由 i 个元素组成的组合。给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。使用 for 循环枚举子集元素个数(从 0 到数组长度),其中 i 表示子集元素个数。计算给定整数数组的长度,并初始化结果数组为空列表 result。将去重后的元组转换为列表,返回去重后的结果数组。原创 2023-07-20 09:02:42 · 45 阅读 · 0 评论 -
力扣天天练(7-12~7-19)下
例如,当 n=4,k=2 时,如果从小到大枚举,会得到组合 [1,2] 和 [2,1],它们实际上是相同的组合。直到递归结束,程序返回所有符合条件的组合。具体来说,当前位置可能为2或3,应变为0或1,即减2,而前一位要加1,相当于由前一位和当前位组成的数,先减2、再加10,即加8.思路:由于列表已经按照顺序排列,只需遍历一次,记录元素出现次数,如果出现大于2次,则将元素删除,然后count-1,继续向后遍历。思路:遍历矩阵,找出其中值为0的行和列,记录,然后在分别遍历矩阵,将这些行的元素和列的元素置为0。原创 2023-07-18 20:40:43 · 72 阅读 · 0 评论 -
力扣天天练——week2(7-12~7-19)上
思路:由于只能原地旋转,所以先转置再交换列,注意,转置只需要转置上三角区域,否则会恢复原样,交换列也只能交换前半部分区域,时间复杂度O(n2),空间复杂度O(1)思路:当看到排列,组合,所有可能这样的字眼,第一时间想到回溯算法,每次选取一个元素加入结果然后循环再回溯,由于此题只有暴力解,因此时间复杂度是O(n!思路:不能直接转化为整数相乘,则用竖式相乘的思想,切片做成乘法运算后再移位加,最后输出结果,时间复杂度为O(mn),空间复杂度为O(1)给定一个 n × n 的二维矩阵 matrix 表示一个图像。原创 2023-07-17 20:15:53 · 143 阅读 · 0 评论 -
算法———最长回文子串
方法1:我使用的方法:中心扩展法,枚举回文串的中心位置,分奇偶两种情况讨论,选定中心元素后,向左和右扩展,如果是回文串,记录长度与当前长度比较,更新为长度较大者,遍历完成后返回最长子串,时间复杂度O(n2),空间复杂度O(1)两层for循环,从外层向内层逼近,用j从字符串的长度开始递减到0,每次递减1,求长度等于j的字符串,有则返回最长回文子串。从长度为2开始枚举区间长度,对于每个区间长度,枚举区间左端点。然后将所有长度为1的子串都标记为回文串,即。,或者区间长度为2,那么。原创 2023-07-12 19:11:30 · 149 阅读 · 0 评论 -
力扣天天练-day6
思路:先将不满足条件的元素置为0(负数或者大于max),然后初始化一个新数组,长度为max+1,元素初始化为0,随后将处理完的原数组的元素对应到新数组下标,如果存在,则将新数组下标置为1,循环result数组,找出第一个元素为0的下标,返回下标加一。思路:分别遍历行,列,九宫格,用storage存储出现的数字,如果当前数字已经储存在storage里,说明重复了,不能构成数独。描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"原创 2023-07-12 12:42:04 · 50 阅读 · 0 评论 -
力扣天天练,day1
思路2:按照ASCII码排序,找出其中最大的和最小的,最大的和最小的公共前缀就是最长公共前缀(python中字符串可以比较,按照ASCII码排序)——时间复杂度O(n2)思路:由于题目所给范围小,可以用穷举法的思想,本题类似于求整数中各个位数,加上4,9等限制条件,最后循环输出(有点贪心算法的意思,先把符合条件的大的用完,再用小的)思路2:双指针,左右各一个,先将最大储水量定为最大的长方形,如果左边高度小于右边则左指针向右移,否则又指针向左移,时间复杂度O(n),空间复杂度O(1)原创 2023-07-06 22:12:13 · 155 阅读 · 2 评论 -
力扣天天练-day2
思路2:排序加双指针——先将列表的元素排序,然后遍历选定数组元素,令左指针L=i+1,右指针R=n-1,当L原创 2023-07-07 16:24:12 · 94 阅读 · 1 评论 -
力扣天天练-day3
题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。思路:经典括号匹配问题,用栈将元素存储,如果是左括号则入栈,遇到括号则弹出栈顶元素,不匹配则返回false,匹配则继续,直到栈空。l1+l2的新链表,遍历min(l1,l2)次,将两个链表的表头比较,较小者加入新链表,双指针。思路:相当于给这些括号排序,要求:第一个绝对是左括号,最后一个绝对是右括号,看到所有可能,需要想到回溯。思路:k个指针,比较k个链表头结点的大小,将小的加入新链表。原创 2023-07-08 23:18:27 · 77 阅读 · 0 评论 -
力扣天天练-day-4
思路:删除原列表时,列表长度会发生变化,从而影响元素下标,发生索引错误,为了解决这个问题,可以使用倒序循环的方式遍历列表,从最后一个元素遍历到第一个元素,如果当前元素与前一个元素相同,则删除当前元素。题目描述:给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。原创 2023-07-10 09:01:40 · 162 阅读 · 0 评论 -
力扣天天练-day5
在传递给函数之前,nums 在预先未知的某个下标 k(0原创 2023-07-11 10:16:02 · 61 阅读 · 0 评论