加入收藏 | 设为首页 | 会员中心 | 我要投稿 四平站长网 (https://www.0434zz.com.cn/)- 云服务器、对象存储、基础存储、视频终端、数据应用!
当前位置: 首页 > 站长资讯 > 评论 > 正文

为云计算团队制定IT接任者计划

发布时间:2021-02-07 13:48:58 所属栏目:评论 来源:互联网
导读:这两个方法孰优孰劣呢? 网上很多说什么方法一过了两遍链表,方法二只过了一遍。 但其实,但是方法二用了两个指针来遍历,所以两个方法过的遍数都是一样的。 它们最大的区别是: 方法一是 offline algorithm,方法二是 online algorithm。 公司里的数据量是

这两个方法孰优孰劣呢?

网上很多说什么方法一过了两遍链表,方法二只过了一遍。

但其实,但是方法二用了两个指针来遍历,所以两个方法过的遍数都是一样的。

它们最大的区别是:

方法一是 offline algorithm,方法二是 online algorithm。

公司里的数据量是源源不断的,比如电商系统里总有客户在下单,社交软件里的好友增长是一直在涨的,这些是数据流 data stream,我们是无法计算数据流的长度的。

那么 online algorithm 能够给时刻给出当前的结果,不用说等数据全部录入完成后,实际上也录不完。。这是 online algorithm 比 offline algorithm 大大的优势所在。

更多的解释大家可以参考 stack overflow 的这个问题,链接在文末。
 

这题就是给一个链表,然后找到它的中点,如果是奇数个很好办,如果是偶数个,题目要求返回第二个。

比如:

1 -> 2 -> 3 -> 4 -> 5 -> NULL,需要返回 3 这个 ListNode;

1 -> 2 -> 3 -> 4 -> 5 -> 6 -> NULL,需要返回 4 这个 ListNode。

但其实吐槽一下,如果真的要设计一个这样的 API,我更倾向于选择返回偶数个中的第一个中点。

为什么呢?

算法题都是工业生产中一些问题的抽象。比如说我们找中点的目的是为了把这个链表断开,那么返回了 3,我可以断开 3 和 4;但是返回了 4,单向链表我怎么断开 4 之前的地方呢?还得再来一遍,麻烦。

Solution

方法一、

这题最直观的解法就是可以先求这个链表的长度,然后再走这个长度的一半,得到中点。
 

其实链表相关的题目没有很难的,套路也就这么几个,其中最常考最基础的题目是反转链表,听说微软可以用这道题电面刷掉一半的 candidate,两种方法一遍 bug free 还是不容易的。文章之前已经写过了,点击这里直达复习。

今天我们来说链表中最主要的 2 个技巧:双指针法和 dummy node,相信看完本文后,链表相关的绝大多数题目你都能搞定啦。

双指针法

双指针法在很多数据结构和题型中都有应用,在链表中用的最多的还是快慢指针。

顾名思义,两个指针一个走得快,一个走得慢,这样的好处就是以不同的速度遍历链表,方便找到目标位置。

常见的问题比如找一个链表的中点,或者判断一个链表是否有环。

(编辑:四平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读