数据结构与算法
文章平均质量分 62
常见数据结构 & 算法,本人的刷题学习之旅
思变。
知道的越多,不知道的越多
展开
-
151. 反转字符串中的单词 (中等)
利用split(“ ”)根据空格分割字符串,后再循环分割结果,依次去除空格append到StringBuilder,再append空格即可。= ’ ’ 的下标 i,这里以第一个单词进行为演示:" eulb si yks eht" ==反转=> " blue si yks eht" ==移位=> “blue si yks eht”返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用 O(1) 额外空间复杂度的 原地 解法。原创 2023-04-13 22:12:45 · 39 阅读 · 0 评论 -
【字符串 + 双指针】剑指 Offer 05. 替换空格
字符串,判断每个字符是否 = ’ ',根据不同情况向StringBuilder中拼接即可,时间复杂度O(n),使用了额外空间StringBuilder,复杂度为O(n)3、利用双指针这里从后向前根据情况填充字符即可。占三个字符,而原字符串已经存在一个空格,再加上。就是返回字符串最终的长度,需要拼接的。中的每个空格替换成"%20"。指向最终字符串结尾,这样一来,的双空格,所以得出以上结论。请实现一个函数,把字符串。两个空格,最后得出的。原创 2023-04-12 16:42:21 · 34 阅读 · 0 评论 -
【字符串 + 双指针】541.反转字符串 II(简单)
与思路一相同,实现方式略微不同。,从字符串开头算起,每计数至。个,则将剩余字符全部反转。个字符,其余字符保持原样。原创 2023-04-12 09:51:32 · 71 阅读 · 0 评论 -
【字符串】344. 反转字符串(简单)
定义双指针left 和 right, left指向数组头部元素,right指向数组尾部,每次两两交换,同时将left-- , right++,注意:因为是两两相交换,所以循环s.length() / 2次。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组。输入数组、使用 O(1) 的额外空间解决这一问题。这样就可以实现使用O(1)的空间复杂度完成此题目。不要给另外的数组分配额外的空间,你必须。原创 2023-04-12 09:49:58 · 33 阅读 · 0 评论 -
【排序 + 快慢指针】18. 四数之和 (中等)
四数之和,和15.三数之和是一个思路,都是使用双指针法, 基本解法就是在15.三数之和的基础上再套一层for循环。使用双指针可以将原本O(n ^ 4) 降为 O(n ^ 3)感兴趣可以先去看 15.三数之和,上面有题目的链接。请你找出并返回满足下述全部条件且不重复的四元组。原创 2023-04-11 17:01:55 · 28 阅读 · 0 评论 -
【哈希表、递归】202.快乐数(简单)
编写一个算法来判断一个数 n 是不是快乐数。truefalse。原创 2023-04-10 16:04:06 · 67 阅读 · 1 评论 -
【哈希表】349.两个数组的交集(简单)
将nums1的元素一次add进set集合中,可以保证重复的元素在set集合中只出现一次,之后循环nums2的元素,判断如果当前元素在set集合中存在,则代表有交集,将当前元素add进retSet即可, 至于retSet,由于nums2中的元素很可能也存在重复,所以也要使用set存储结果集。将两个数组分别put进两个hashmap,因为hashmap天生key不存在重复,之后再循环第一个map,判断每个键在map2中是否存在,如果不存在则remove,存在则不需要操作,最后将map的key转为数组即可。原创 2023-04-10 17:04:11 · 174 阅读 · 1 评论 -
【哈希表】1.两数之和 (简单)
利用hashmap解决,key存储数组元素值,value存储该元素下标。循环数组,利用target - nums[i]得出的结果值去map中get,如果get到,说明相加 == target的。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。条件符合,返回当前元素下标以及map的value所代表的下标。没什么好说的,比较简单,暴力循环的办法是下下策。**进阶:**你可以想出一个时间复杂度小于。原创 2023-04-10 17:21:01 · 38 阅读 · 0 评论 -
【哈希表】242. 有效的字母异位词(简单)
利用数组hash,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25,创建一个长度为26的数组即可,将每一个英文字符作为下标在数组中标识出来,标识的办法是循环s将value++,再循环t将value–,最后ret数组中但凡有一个元素的value!= 0,则s和t不是有效的异位词。后再循环t的每个字符,get到相对应的value值,每次 - 1,最后判断map中是否有元素不等于0,如果有返回false,没有则代表s和t是有效的异位词。原创 2023-04-10 17:34:32 · 42 阅读 · 0 评论 -
【哈希表】454. 四数相加 II (中等)
454. 四数相加 II (中等)原创 2023-04-11 10:57:36 · 28 阅读 · 0 评论 -
【哈希表】383. 赎金信 (简单)
383. 赎金信 (简单)原创 2023-04-11 11:03:47 · 32 阅读 · 0 评论 -
【排序 + 快慢指针】15. 三数之和 (中等)
同时在循环体内定义快慢指针,left = i + 1;给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i! 如果nums[i] + nums[left] + nums[right] < 0,说明当前三数之和小了,将left++,向右移动一位,增加当前和。3、移动快慢指针的条件限制:如果nums[i] + nums[left] + nums[right] > 0 ,说明当前三数之和大了,将right–,向左移动一位,减小当前和。原创 2023-04-11 15:58:03 · 36 阅读 · 0 评论