自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 收藏
  • 关注

原创 代码随想录day9:28实现strStr()

kmp经典算法的运用,KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配。不太理解,先贴代码,后续回顾。28实现strStr()

2023-04-27 13:36:04 443

原创 344反转字符串 541反转字符串|| 05替换空格 151翻转字符串里的单词 58-||左旋转字符串

第一想法是创建一个额外的空间,将n到末尾的字符串存储到新创建的空间中,然后反转区间为前n的子串,再和n到末尾的字符串拼接。代码随想录的思路:先反转区间为前n的字符串,然后再反转n到末尾的字符串,然后再整体反转,即可得到左旋转的字符串。第一想法使用双指针处理,首尾指针分别作为交换的元素的指针,向中间靠拢,条件为首指针小于尾指针即可。使用双指针的思想,在空格处加入%20的字符,先扩充数组到每个空格替换成"%20"之后的大小。然后从后向前替换空格。58-||左旋转字符串。541反转字符串||

2023-04-26 21:32:23 497

原创 代码随想录day4:454四数相加 383赎金信 15三数之和 18四数之和

如果使用暴力破解法,则时间复杂度为O(n^4),浪费了大量的时间。而使用unorder_map后的时间复杂度为O(n^2),节省了一大堆时间。使用unorder_map,key存储相应的和的值,value存储相应的值出现的次数,然后返回次数,就能得到相应的和为零的元组的个数。第一想法是使用暴力破解法,使用两层循环,遍历字符串,判断是否存在,返回即可。但是暴力破解法会使时间复杂度成几何倍的增加。使用双指针法,还要注意去重,防止返回重复的三元组。使用哈希中的数组法能解决时间复杂度的问题。

2023-04-25 23:16:08 546

原创 代码随想录day6:242 有效的字母异位词 349两个数组的交集 202快乐数 1两数之和

思路:新建一个数组,初始化为0,遍历第一个数组,统计各个字母出现的频次,遍历第二个数组,将数组中每一次出现相同字母的频次-1,最后遍历新建的数组,检查其中是否又不为零的元素,如果有,就返回false,如果没有,就返回true。定义一个数组hash,和一个vector,用来存放nums所出现的元素,并将其值修改为1,第二次遍历时,通过判断hash中的元素值是否为1,如果为1,则将该元素放进结果的vector里面,并将该元素的值修改为2,以防止重复。寻找元素是否重复,主要是运用哈希表寻找,效率高。

2023-04-24 19:35:16 662

原创 代码随想录day4: 24两两交换链表的节点 19删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II

代码随想录提供的解决办法:利用双指针的思想,通过快慢指针的相差数为n,然后遍历链表,当快指针到达最后时,慢指针也到达了所需要删除的节点,因为需要删除的节点不能时满指针所指的节点,慢指针需要在需要删除节点的前一个节点,所以快指针需要多移动一步,为n+1。求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置,此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。24 两两交换链表的节点。

2023-04-23 17:52:56 884 1

原创 代码随想录day3:203.移除链表 707.设计链表 206.反转链表

想法:首先想到的时通过for循环找出数组长度,其次在通过for循环找到对应的val值删除,这样写的代码冗余,因此改为通过while循环找到val值删除。但通过while循环时需要注意的是头节点的删除,和其他节点的删除不一样。删除方式是通过前一个结点来删除的,但是头节点吗,没有前节点。为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此。使用双指针方法,首先定义一个cur指针,指向头结点,再定义一个pre指针,初始化为null。

2023-04-21 23:53:34 930 2

原创 代码随想录day2:977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

主要的思想:矩阵使用二维数组储存,顺时针填入,当填入行时,行固定列变动,填入列时,列固定行变动。由于使用的是冒泡排序,运行数据稍大时,超出时间限制,不通过,改成了c++库里面的sort快速排序算法,时间复杂度是 O(n + nlogn)。这道题移动窗口最主要的是sum大于等于target后,需要将起始位置的i向后移动,同时sum要减去i位置的值,才能保证后来的值正确。通过代码随想录的学习,懂得了移动窗口的原理以及代码的写法,把这道题AC过了。总结:复习了双指针的思想、移动窗口的思想和区间的运用。

2023-04-21 11:52:37 1098 1

原创 代码随想录训练营第一天:704. 二分查找,27. 移除元素

对于二分法的界限定义一直处于模糊的状态,通过代码随想录的学习,得到一下总结:二分查找的2区间一般分为:左闭右闭和左闭右开,当取用的区间为左闭右闭时,对应于while的条件为小于等于(因为如果是右开的时候,在while循环里取等于,区间是不成立的,例:[1,1),不成立),二对于right和left的取值,则是middle-1和middle+1;看完题目第一想法就是暴力破解,但是暴力破解对于数组极大的情况下,对于时间的要求会非常大,因此下意识的抛弃了暴力破解,寻求更好的方法:二分查找法。元素的顺序可以改变。

2023-04-19 13:46:22 1604 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除