实用的数据结构和技巧

常用的数据结构和技巧

1.1数组、字符串

【0    1      2      3      4     5     6    7     8      9】

        a[1]                         a[6]

优点:构建一个数组非常简单/能让我们在O(1)的时间里面根据数组的下标(index)查询某个元素。

缺点:构建时必须分配一段连续的空间。/查询某个元素是否存在时需要遍历整个数组,耗时O(n)的时间(其中,n是元素的个数),删除和添加某个元素时,同样需要耗费O(n)的时间。

1.2链表

优点:灵活的分配内存空间/能在O(1)时间内删除或者添加元素。

缺点:查询元素时候需要O(n)时间。 

解题技巧:利用快慢指针(有时候要用到三个指针)/构建一个虚假的链表

习题

1.定义三个指针prev,curr,next分别代表前一个节点、当前节点、下一个节点

实现代码如下:

      

 

1.3栈

特点:先进后出

算法基本思想:可以用一个简单的链表来实现

只关心上一次的操作,处理完上一次的操作后能在O(1)的时间内找出更上一次的操作。

例题1:

通过进栈和出栈的方式查找出相同的组合,若前两个相同第三个不相同则栈内弹出第三个元素即可查找出相同的组合。

1.4队列

特点:先进先出。

应用场景:广度的优先搜索。

1.4.1双端队列

可以利用一个双链表。

算法的头尾两端能在O(1)时间内删除、查看和添加。

习题:

解题思路:先指向第一个数1,放在队首;扫描下一个数3,3>1所以1被弹出,3位于榜首;接着指向第三个数-1<3,所以-1在队列的后面如下面所示。所以找出第一个最大值是3。以此类推继续找出接下来的每三个数中的最大值。最终结果是3,3,5,5,6,7

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值