Professional Documents
Culture Documents
CourseDescription
Instructors:BillJacobsandCurtisFonger
Time:January1215,5:006:30PMin32124
Website:http://courses.csail.mit.edu/iap/interview
ClassicQuestion#4:Reversingthewordsinastring
Writeafunctiontoreversetheorderofwordsinastringinplace.
Answer:Reversethestringbyswappingthefirstcharacterwiththelastcharacter,
thesecondcharacterwiththesecondtolastcharacter,andsoon.Then,gothrough
thestringlookingforspaces,sothatyoufindwhereeachofthewordsis.Reverse
eachofthewordsyouencounterbyagainswappingthefirstcharacterwiththelast
character,thesecondcharacterwiththesecondtolastcharacter,andsoon.
Sorting
Often,aspartofasolutiontoaquestion,youwillneedtosortacollectionof
elements.ThemostimportantthingtorememberaboutsortingisthatittakesO(n
logn)time.(Thatis,thefastestsortingalgorithmforarbitrarydatatakesO(nlogn)
time.)
MergeSort:
Mergesortisarecursivewaytosortanarray.First,youdividethearrayinhalfand
recursivelysorteachhalfofthearray.Then,youcombinethetwohalvesintoa
sortedarray.Soamergesortfunctionwouldlooksomethinglikethis:
Thealgorithmreliesonthefactthatonecanquicklycombinetwosortedarraysinto
asinglesortedarray.Onecandosobykeepingtwopointersintothetwosorted
arrays.Onerepeatedlyaddsthesmallerofthetwonumberspointedtotothenew
arrayandadvancesthepointer.
Quicksort:
Quicksortisanothersortingalgorithm.IttakesO(n^2)timeintheworstcaseand
O(nlogn)expectedtime.
Tosortanarrayusingquicksort,onefirstselectsarandomelementofthearrayto
bethe"pivot".Onethendividesthearrayintotwogroups:agroupofelementsthat
arelessthanthepivotandagroupofelementsthataregreaterthanthepivot.After
this,therewillbeanarrayconsistingofelementslessthanthepivot,followedbythe
pivot,followedbyelementsgreaterthanthepivot.Then,onerecursivelysortsthe
portionofthearraybeforethepivotandtheportionofthearrayafterthepivot.A
quicksortfunctionwouldlooklikethis:
Quicksortistypicallyveryfastinpractice,butrememberthatithasO(n^2)worst
caserunningtime,sobesuretomentionanothersortingalgorithm,suchasmerge
sort,ifyouneedguaranteedO(nlogn)runningtime.
OrderStatistics:
Sometimes,aninterviewerwillaskyoutodescribeanalgorithmtoidentifythekth
smallestelementinanarrayofnelements.Todothis,youselectarandompivot
andpartitionthearrayasyouwouldinthequicksortalgorithm.Then,basedonthe
indexofthepivotelement,youknowwhichhalfofthearraythedesiredelementlies
in.Forexample,sayk=15andn=30,andafteryouselectyourpivotandpartition
thearray,thefirsthalfhas10elements(thehalfbeforethepivot).Youknowthat
thedesiredelementisthe4thsmallestelementinthelargerhalf.Toidentifythe
element,youpartitionthesecondhalfofthearrayandcontinuerecursively.The
reasonthatthisisnotO(nlogn)isthattherecursivepartitioncallisonlyonone
halfofthearray,sotheexpectedrunningtimeisn+(n/2)+(n/4)+(n/8)+...=
O(n).
Notethatfindingthemedianofanarrayisaspecialcaseofthiswherek=n/2.
Thisisaveryimportantpoint,asaninterviewerwilloftenaskyoutofindawayto
getthemedianofanarrayofnumbers.
Question:NearestNeighbor
Sayyouhaveanarraycontaininginformationregardingnpeople.Eachpersonis
describedusingastring(theirname)andanumber(theirpositionalonganumber
line).Eachpersonhasthreefriends,whicharethethreepeoplewhosenumberis
nearesttheirown.Describeanalgorithmtoidentifyeachperson'sthreefriends.
Goodanswer:Sortthearrayinascendingorderofthepeople'snumber.Foreach
person,checkthethreepeopleimmediatelybeforeandafterthem.Theirthree
friendswillbeamongthesesixpeople.ThisalgorithmtakesO(nlogn)time,since
sortingthepeopletakesthatmuchtime.
LinkedLists
Alinkedlistisabasicdatastructure.Eachnodeinalinkedlistcontainsanelement
andapointertothenextnodeinthelinkedlist.Thelastnodehasa"null"pointerto
indicatethatthereisnonextnode.Alistmayalsobedoublylinked,inwhichcase
eachnodealsohasapointertothepreviousnode.Ittakesconstant(O(1))timeto
addanodetoorremoveanodefromalinkedlist(ifyoualreadyhaveapointerto
thatnode).IttakesO(n)timetolookupanelementinalinkedlistifyoudon't
alreadyhaveapointertothatnode.
ClassicQuestion#5:CycleinaLinkedList
Howcanonedeterminewhetherasinglylinkedlisthasacycle?
Goodanswer:Keeptrackoftwopointersinthelinkedlist,andstartthematthe
beginningofthelinkedlist.Ateachiterationofthealgorithm,advancethefirst
pointerbyonenodeandthesecondpointerbytwonodes.Ifthetwopointersare
everthesame(otherthanatthebeginningofthealgorithm),thenthereisacycle.If
apointereverreachestheendofthelinkedlistbeforethepointersarethesame,
thenthereisnocycle.Actually,thepointersneednotmoveoneandtwonodesata
time;itisonlynecessarythatthepointersmoveatdifferentrates.ThistakesO(n)
time.Thisisatrickyanswerthatinterviewersreallylikeforsomereason.
Okayanswer:Foreverynodeyouencounterwhilegoingthroughthelistonebyone,
putapointertothatnodeintoaO(1)lookuptimedatastructure,suchasahashset.
Then,whenyouencounteranewnode,seeifapointertothatnodealreadyexistsin
yourhashset.ThisshouldtakeO(n)time,butalsotakesO(n)space.
Okayanswer:Gothroughtheelementsofthelist."Mark"eachnodethatyoureach.
Ifyoureachamarkednodebeforereachingtheend,thelisthasacycle;otherwise,it
doesnot.ThisalsotakesO(n)time.
Notethatthisquestionistechnicallyillposed.Anordinarylinkedlistwillhaveno
cycles.Whattheyactuallymeanisforyoutodeterminewhetheryoucanreacha
cyclefromanodeinagraphconsistingofnodesthathaveatmostoneoutgoing
edge.
StacksandQueues
Aninterviewerwillprobablyexpectyoutoknowwhatqueuesandstacksare.
Queuesareabstractdatatypes.Aqueueisjustlikealineofpeopleatanamusement
park.Aqueuetypicallyhastwooperations:enqueueanddequeue.Enqueueingan
elementaddsittothequeue.Dequeueinganelementremovesandreturnsthe
elementthatwasaddedleastrecently.AqueueissaidtobeFIFO(firstin,firstout).
Astackisanotherabstractdatatypewithtwocommonoperations:pushandpop.
Pushinganelementaddsittothestack.Poppinganelementremovesandreturns
theelementthatwasaddedmostrecently.AstackissaidtobeLIFO(lastin,first
out).Astackoperateslikeastackofcafeteriatrays.
HashTables
Ahashtableisusedtoassociatekeyswithvalues,sothateachkeyisassociatedwith
oneorzerovalues.Eachkeyshouldbeabletocomputea"hash"function,which
takessomeorallofitsinformationanddigestsitintoasingleinteger.Thehash
tableconsistsofanarrayofhashbuckets.Toaddakeyvaluepairtoahashtable,
onecomputesthekey'shashcodeandusesittodecidethehashbucketinwhichthe
mappingbelongs.Forexample,ifthehashvalueis53andthereare8hashbuckets,
onemightusethemodfunctiontodecidetoputthemappinginbucket53mod8,
whichisbucket5.Tolookupthevalueforagivenkey,onecomputesthebucketin
whichthekeywouldresideandcheckswhetherthekeyisthere;ifso,onecan
returnthevaluestoredinthatbucket.Toremovethemappingforagivenkey,one
likewiselocatesthekey'smappingandremovesitfromtheappropriatebucket.
Notethatthehashfunctionisgenerallydecidedoninadvance.
Aproblemariseswhentwokeyshashtothesamebucket.Thiseventiscalleda
"collision".Thereareseveralwaystodealwiththis.Onewayistostorealinkedlist
ofkeyvaluepairsforeachbucket.
Insertion,removal,andlookuptakeexpectedO(1)time,providedthatthehash
functionissufficiently"random".Intheworstcase,eachkeyhashestothesame
bucket,soeachoperationtakesO(n)time.Inpractice,itiscommontoassume
constanttime.
Hashtablescanoftenbeusedassmallercomponentsofanswerstoquestions.In
ourexperience,someinterviewerslikehashtablesandsomedon't.Thatis,some
interviewerswillallowyoutoassumeconstanttime,whileotherswillnot.Ifyou
wanttouseahashtable,werecommendsubtlytryingtofigureoutwhichcategory
yourinterviewerbelongsto.Youmight,forexample,saysomethinglike,"Well,I
couldusedahashtable,butthatwouldhavebadworstcaseperformance."The
interviewermightthenindicatethathe'llallowyoutouseahashtable.
ClassicQuestion#6:Datastructureforanagrams
GivenanEnglishwordintheformofastring,howcanyouquicklyfindallvalid
anagramsforthatstring(allvalidrearrangementsofthelettersthatformvalid
Englishwords)?Youareallowedtoprecomputewhateveryouwanttoandstore
whateveryouoptionallyprecomputeondisk.
Answer:Wewanttouseahashtable!Ifyourinterviewerreallyhateshashtables
(whichtheysometimesdoforsomereason),youcanuseatreeinstead.Butlet's
assumeyoucanuseahashtable.Thenfortheprecomputingstep,gothrougheach
wordinthedictionary,sortthelettersofthewordinalphabeticalorder(so
"hacking"wouldbecome"acghikn")andaddthesortedlettersasakeyinthetable
andtheoriginalwordasoneofthevaluesinalistofvaluesforthatkey.For
example,theentryfor"opst"wouldbethelist["opts","post","stop","pots","tops",
"spot"].Then,wheneveryougetastring,yousimplysortthelettersofthestring
andlookupthevalueinthehashtable.TherunningtimeisO(nlogn)forsorting
thestring(whichisrelativelysmall)andapproximatelyO(1)forthelookupinthe
hashtable.
Thereareseveralotherpossibleanswerstothisquestion,butwefeelthatthe
answeraboveisconsideredanoptimalsolution.
Question:FactorialZeros
Withoutusingacalculator,howmanyzerosareattheendof"100!"?(that's
100*99*98*...*3*2*1)
Answer:Whatyoudon'twanttodoisstartmultiplyingitallout!Thetrickis
rememberingthatthenumberofzerosattheendofanumberisequaltothe
numberoftimes"10"(or"2*5")appearswhenyoufactorthenumber.Therefore
thinkabouttheprimefactorizationof100!andhowmany2sand5sthereare.
Thereareabunchmore2sthan5s,sothenumberof5sisalsothenumberof10sin
thefactorization.Thereisone5foreveryfactorof5inourfactorialmultiplication
(1*2*...*5*...*10*...*15*...)andanextra5for25,50,75,and100.Thereforewehave
20+4=24zerosattheendof100!.