
数据结构与算法
文章平均质量分 82
学习我是拒绝的
这个作者很懒,什么都没留下…
展开
-
第十一天栈与队列
有的同学经常会想学的这些数据结构有什么用,也开发不了什么软件,大多数同学说的软件应该都是可视化的软件例如APP、网站之类的,那都是非常上层的应用了,底层很多功能的实现都是基础的数据结构和算法。输入: ["10", "6", "9", "3", "+", "-11", " * ", "/", " * ", "17", "+", "5", "+"]如果基数为0,则它使用的基数由序列中的格式确定。从栈中弹出剩余元素,此时是字符串ac,因为从栈里弹出的元素是倒序的,所以再对字符串进行反转一下,就得到了最终的结果。原创 2023-02-13 20:56:24 · 657 阅读 · 1 评论 -
第十天栈和队列
栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。从下图中可以看出,栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是。队列是先进先出的规则,把一个队列中的数据导入另一个队列中,数据的顺序并没有变,并没有变成先进后出的顺序。所以用栈实现队列, 和用队列实现栈的思路还是不一样的,这取决于这两个数据结构的性质。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。原创 2023-02-10 12:00:31 · 923 阅读 · 1 评论 -
第八天字符串
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。原创 2023-02-09 12:09:45 · 499 阅读 · 0 评论 -
第六天哈希表
std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。虽然std::set、std::multiset 的底层实现是红黑树,不是哈希表,std::set、std::multiset 使用红黑树来索引和存储,不过给我们的使用方式,还是哈希法的使用方式,而在关联式容器set中,是以键值对的方式存储的。原创 2023-02-08 22:12:44 · 570 阅读 · 0 评论 -
第四天链表
可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。根据题意,两个链表相交的点是指,两个指针指向的内容相同,则说明该节点在a上有在b上,进而说明a和b相交。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。原创 2023-02-04 13:03:27 · 763 阅读 · 0 评论 -
第三天链表
这道题写的时候,刚开始以为head本身是虚拟头结点,直接写然后错误,再删除【7 7 7 7】的时候总是漏一个,后面通过打印发现head有值,是第一个元素的值,所以就需要在申请一个节点来指向head,这样的话就可以操作head了,指向head的这个节点是不能动的,动了的话后面就没法返回了,所以还需要在申请一个节点等于指向头结点的节点,用这个节点来操作链表,当这个节点移动到最后的时候,这时候一开始指向头结点的节点就指向了新的节点了。输入:head = [1,2,6,3,4,5,6], val = 6。原创 2023-02-03 20:06:31 · 640 阅读 · 0 评论 -
二、第二天
示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]然后定义一个新的数组,因为要排序,介于使用双指针每次找到的都是最大的,所以对于新数组的下标要从最后一个位置来进行存储,所以新数组的长度要和原数组一样。输入:s = 7, nums = [2,3,1,2,4,3] 输出:2 解释:子数组 [4,3] 是该条件下的长度最小的子数组。最后找到 4,3 是最短距离。原创 2023-02-03 00:21:43 · 246 阅读 · 0 评论 -
一、第一天| 704. 二分查找、27. 移除元素。
下面开始进入for循环,for循环中只有一个判断p【0】不等于val,这里p的值等于val,所以p向前移动,q不动,因为q的位置需要用不等于val的值来覆盖,当p【1】的时候,p【1】等于2不等于val的时候,这时候q就需要移动了,用p的值来更新q的值,同时q往后移动等待下一次更新。,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件,当大家看到题目描述满足如上条件的时候,可要想一想是不是可以用二分法了。快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组。原创 2023-02-01 13:51:13 · 164 阅读 · 0 评论