
算法
数据结构和算法
醉后才知酒浓
IT领域创作者,合作请联系henrytennant@163.com
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
反转字符串中的单词--力扣151
题目的难点在于首先要清除多余的空格,并且单词之间要留一个空格,首单词前和末尾单词后不能有多余空格。我们使用双指针去除所有的空格,然后在处理完一个单词后手动加一个单词。具体思路是当快指针不等于空格时,赋值给慢指针,然后快慢指针同时移动,当快指针等于空格时,慢指针不动,快指针循环移动,一直循环到不等于空格时,继续上述操作。每当处理完一个单词,此时慢指针手动加一个空格,已满足每个单词之间要有一个空格的要求。其次需要翻转,我们首先将s所有的字符整体翻转过来,然后逐个翻转单词。原创 2024-09-20 20:51:47 · 331 阅读 · 0 评论 -
反转字符串 II--力扣541
让i每次跳2k,成为每一次循环的起点,再进行判断,如果i + k <= s.size(),说明剩余字符小于 2k 但大于或等于 k 个,所以反转前 k 个字符。否则说明剩余字符少于 k 个,则将剩余字符全部反转。本题的关键在于理解每隔 2k 个字符的前 k 个字符进行反转,剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符。并且剩余字符少于 k 个,则将剩余字符全部反转。原创 2024-09-18 20:57:47 · 412 阅读 · 0 评论 -
四数之和--力扣18
四数之和的双指针解法是两层for循环nums[i] + nums[j]为确定值,依然是循环内有left和right下标作为双指针,找出nums[i] + nums[j] + nums[left] + nums[right] == target的情况。nums[i+ 1]是j,nums[j+1]是left,这些都是要去重的,所以我们考虑nums[i-1]和nums[j-1]。比如:数组是[-4, -3, -2, -1],target是-10,不能因为-4 > -10而跳过。原创 2024-09-13 21:07:59 · 645 阅读 · 0 评论 -
三数之和--力扣15
对a去重:当i大于0并且nums[i] == nums[i - 1]时,说明a重复了,直接结束本次循环。i等于0时,是第一次,所以不用去重。题目要求三元组不能重复,如果使用哈希表来做,去重很复杂,而且需要额外的空间,我们这里使用双指针法直接针对数组操作。对b和c去重:在保证循环体条件right > left情况下,类似于a,判断b的后一个和c的前一个是否有重复的,如果有,b++或者c–。最重要的是,我们要对数组进行排序,排序后若数组中,第一个元素大于零,则后续不可能存在和等于零的三元组。原创 2024-09-11 17:43:07 · 905 阅读 · 0 评论 -
赎金信--力扣383
赎金信题目思路一方法一:哈希表思路二方法二 数组题目思路一我们使用哈希表map的思路,A能不能由B组成,说明B包含的元素个数要大于等于A。所以我们先利用map的key和value分别对magazine中的出现的字符以及出现的次数存储起来。然后我们去ransomNote中找对应的字符,每找到一次且value值大于零,就让value值减一。如果没找到或者value值小于零,直接返回false。方法一:哈希表class Solution {public: bool canConstru原创 2024-09-10 20:34:16 · 547 阅读 · 0 评论 -
四数相加 II--力扣454
接下来我们去后两个数组中查找0-(c+d),因为a+b=0-(c+d),如果能够找到,说明在这四个数组中存在a+b+c+d=0,那么上述统计的a+b出现的次数即为元组个数,我们用count累计一下,然后继续遍历。要使得a+b+c+d=0,我们首先利用map在前两个数组中统计a+b的值以及该值出现的次数。我们需要统计元组的个数,并且不需要排序和去重,所以选择哈希表unordered_map。原创 2024-09-09 16:55:04 · 536 阅读 · 0 评论 -
两数之和--力扣1
所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查找差值。原创 2024-09-08 19:57:19 · 542 阅读 · 0 评论 -
快乐数--力扣202
【代码】快乐数--力扣202。原创 2024-06-20 19:52:29 · 400 阅读 · 0 评论 -
两个数组的交集--力扣349
【代码】两个数组的交集--力扣349。原创 2024-06-18 20:02:19 · 403 阅读 · 0 评论 -
有效的字母异位词--力扣242
【代码】有效的字母异位词--力扣242。原创 2024-06-18 19:29:10 · 263 阅读 · 0 评论 -
环形链表 II--力扣142
【代码】环形链表 II--力扣142。原创 2024-06-17 20:03:00 · 401 阅读 · 0 评论 -
相交链表--力扣160
【代码】相交链表--力扣160。原创 2024-06-17 18:58:01 · 458 阅读 · 0 评论 -
删除链表的倒数第N个节点--力扣19
【代码】删除链表的倒数第N个节点--力扣19。原创 2024-06-14 19:27:22 · 328 阅读 · 0 评论 -
两两交换链表中的结点--力扣24
【代码】两两交换链表中的结点--力扣24。原创 2024-06-13 19:27:09 · 365 阅读 · 0 评论 -
反转链表--力扣206
【代码】反转链表--力扣206。原创 2024-06-12 18:47:09 · 248 阅读 · 0 评论 -
设计链表-力扣707
【代码】设计链表-力扣707。原创 2024-06-12 18:21:27 · 392 阅读 · 1 评论 -
移除链表元素-力扣203题
【代码】移除链表元素-力扣203题。原创 2024-06-11 20:07:52 · 433 阅读 · 0 评论 -
螺旋矩阵II-力扣59题
每一次循环需要控制边界,经过第一次循环后,要进入内循环,这里设置一个初始值为1的offset控制边界条件,每经过一轮循环,offset的值加一,即边界向内缩一圈。然后,顺时针遍历矩阵并填充数据,即左-右,上-下,右-左,下-上,为了填充方便,这里采用左闭右开的原则填充数据,并。时,进行特别处理,当mid等于n对2取余的结果时,输入为一个整数n,输出则为一个。原创 2024-06-05 17:16:57 · 332 阅读 · 1 评论 -
有序数组的平方——力扣977
【代码】有序数组的平方——力扣977。原创 2023-08-25 11:26:07 · 138 阅读 · 0 评论 -
二分搜索算法——力扣704
【代码】二分搜索算法——力扣704。原创 2023-08-17 21:12:09 · 120 阅读 · 0 评论