CCI 复习笔记 2

来源:互联网 发布:淘宝自动评价加分吗 编辑:程序博客网 时间:2024/06/05 17:46

链表啊链表。回美国做的第一个online code interview就是全是这个。偏偏我特么几个月没写C++,太过于自信。现在的朋友都特么拿到offer了,我还在准备亚马逊一面。。。


2.1 除去重复的node


简单做法自然是用个啥把node记录下,CCI的做法是用Set,不知道Java的set是不是用hashmap,还是和C++一样用binary tree,不过咋说都差不多,检查呗。


追问:如果不让用buffer咋办?


这个问题每次都把我难住的主要原因是:我以为O(n^2)的做法太简单了。。。。但是真的就是nested搜索。这题我看了有四遍了得,跟GRE单词一样,永远记不住。


2.2 找到距离最后节点为k的节点


最天真的做法是。。。问问知不知道size是多少。。。


第二种做法有点牛逼,recursion,每次返回+1. 到点了print结果。不过这样就必须一路跑回来,有点二逼,虽然时间上是一致的。 

关于recursion的问题,我觉得是人类都会觉得头疼,而根本原因在于,人脑不是一个stack。。。我一直有一个想法,其实所有的recursion都可以用一个stack写出来。因为recursion就是在stack上实现的。不过我不想验证这个事情。


第三种做法,也是我最早就想出来的,用两个iterator组成一个框框。。。。iterator中间相差k的位置


2.3 在单连接链表里面删除个node,只给了那个iterator


这题有误导性,你特么不是说删node么,你不知道对于C++的优秀编程员来说,node就是大脑想象中的一块内存?anyway,解法非常简单,把后面的数据往前面放。。。


2.4 关于某数字,partition一个链表


用两个链表,然后merge


2.5 反序储存的数字相加


由于是反序,所以其实很简单,加了以后带个carry往前走,答案是用了recursion,还挺好的,当然完全可以in-place。recursion是传carry的值以及


追问,如果是正序呢?


没啥好办法,还是recursion(由于linkedlist奇葩的顺序问题),另外结果放在一个doubly linked list上面


2.6 给一个带圈圈的链表,给出一个算法可以算出来beginning node


两个runner,一个跑一步,一个跑两步,如果两个能相遇就可以了。然后我想,一个跑两步,一个跑三步,行不行?会快还是会慢?貌似也是可以的,貌似速度是一致的。我应该在小学搞奥数的时候做这个题。


后面还有两个问题,这个题目实在很经典,不过实在有点难,慢慢画应该可以画出来。


2.7 检查一个LL是不是回文


首先回文这个词是我今年才会的。。

第一种简单做法我就没有想到,reverse这个LL之后对于前半段。。

第二种做法非常有面试的感觉,我觉得,用一个stack去解决问题,我觉得在SLL问题上,stack可以有很多用途。因为这个玩意满足了SLL的关于顺序上得限制。





0 0
原创粉丝点击