- 博客(11)
- 收藏
- 关注
原创 代码随想录算法训练营第十三天|栈与队列part3|239滑动窗口最大值、347前k个高频元素
我一开始用的栈,思路是先把前k个数中最大的放进去,然后i从k+1开始,如果第i个数大于栈中的数,就入栈,小于等于就把栈顶的数再入一次栈,这样的问题是,如果窗口内的最大值是窗口中的第一个数,那么窗口向后滑动一步后,上一个窗口的最大值就不在现在的窗口内了,也就无从比较获得此时窗口中的最大值。看了解析,解析里用的队列,queque在没有指定容器的情况下,deque就是默认底层容器,deque是双向队列。
2024-01-30 10:28:38 347 1
原创 代码随想录算法训练营第十一天|栈与队列part2|20有效的括号、1047删除字符串中的所有相邻重复项、150逆波兰表达式求值
感觉这道题目的要求没有讲清楚,我发现按照答案的写法,像[{]}这种情况不可以,但是像[[]]或{[]()}这种情况是可以的,按照题目的表述我没看出来有这层意思,但是想一想平常写数学表达式时括号的写法,显然[{]}这样是不规范的。
2024-01-28 16:16:24 367 1
原创 代码随想录算法训练营第十天|栈与队列part1|232用栈实现队列、225用队列实现栈
STL中栈和队列往往不被归类为容器,而被归类为container adapter(容器适配器)。栈的底层实现可以是vector,deque,list都是可以的,主要就是数组和链表的底层实现。deque是一个双向队列,只要封住一端,只开通另一端就可以实现栈的逻辑了。我们也可以指定vector为栈的底层实现,初始化语句如下:队列同理。
2024-01-25 20:45:58 455 1
原创 代码随想录算法训练营第九天|字符串part2|28实现strStr()、459重复的子字符串、字符串总结、双指针回顾
在c语言中,把一个字符串存入一个数组时,也把结束符'\0'存入数组,并以此为该字符串是否结束的标志。在c++中,提供一个string类,string类会提供size接口,可以用来判断trsing类字符串是否结束,就不用'\0'来判断是否结束。关于vector和string的区别:在基本操作上没有区别,但是string提供更多的字符串处理的相关接口,例如string重载了+,而vector却没有。所以想处理字符串,我们还是会定义一个string类。
2024-01-24 19:14:03 426
原创 代码随想录算法训练营第八天|字符串part1|344.反转字符串、541.反转字符串||、卡码网:54.替换数字、151.翻转字符串里的单词、卡码网:55.右旋转字符串
设置双指针i和j,一个指向首,一个指向尾,将两个指针指向的位置的元素交换,i向后,j向前,直到两个指针相遇。
2024-01-23 23:32:55 353 1
原创 代码随想录算法训练营第七天|哈希表part2|454四数相加、383赎金信、15三数之和、18四数之和
一焦虑就反而什么都不想干,上一周一个星期没刷,这周来补上了,并且尽量把进度赶上。
2024-01-22 19:10:04 382 1
原创 代码随想录算法训练营第六天|哈希表part1|242有效的字母异同位、349两个数组的交集、202快乐数、1两数之和
看了解析后作如下改进:在定义数组时可以同时初始化,给所有元素赋同一个值只要这么一个语句就行对于bool类型,最后的返回值可以是false或true。
2024-01-15 23:16:56 448 1
原创 代码随想录算法训练营第四天|24两两交换链表中的结点、19删除链表的倒数第N个结点、面试题02.07.链表相交、142环形链表
我的思路见图,一开始没有设置虚拟头结点,画图画了几遍,发现还是要设置一个虚拟头结点,另外,最后返回的不能是head,因为此时head已经不在链表首位,而是变成了链表第二位。看了卡尔哥的解析,还是解析的图和代码更简洁直观,也更有逻辑,特别是要学学怎么好好画图,感觉图画得好,思路也更清晰。
2024-01-13 23:43:42 439
原创 代码随想录算法训练营第三天|203移除链表元素、707设计链表、206反转链表
题目描述:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足的节点,并返回。这里的链表的不带头结点的链表,移除元素有两种方法。
2024-01-12 23:04:38 431
原创 代码随想录算法训练营第二天|977有序数组的平方、209长度最小的子数组、59螺旋矩阵
用暴力算法,先把所有数平方,再排序,在八种排序算法中,快速排序的时间复杂度为O(nlogn),采用快速排序比较好,C++的sort()函数是一种类似快排的方法。
2024-01-12 00:08:26 492 1
原创 代码随想录算法训练营第一天|704.二分查找、35插入位置、27移除元素
我的思路是,每次发现一个等于val的值,从这个位置开始,把后面的数整体前移,覆盖掉val,数组长度减1即newn减1。另外,这道题我刚开始想过用如erase这样的函数不是直接就解决了吗,根据视频讲解,erase的时间复杂度实际上是O(n),最后size能返回删除后大小,是因为内部有一个计数用的count。也就是我一开始的思路,这里附上卡尔哥的代码,也就是一开始left=0,right=nums.size()-1,这里的right是数组最后一个元素的下标。,如果目标值存在返回下标,否则返回。
2024-01-10 23:28:05 945 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人