Arka fon:
Aslında dün gece bu soruyu gönderdim ve belirsizliğine tepki gösterdim. O zamandan beri sadece problemin ifadesini değil aynı zamanda karmaşıklığını (O (1) değil) ilgili birçok personele de başvurdum. Bu programlama problemi, Amazon röportajı sorusundaki kötü bir dönüş.
Soru:
Rastgele birleştirilmiş tamsayılardan oluşan bir Dize [0, 250), 0 - 250 münhasır, göz önüne alındığında, sırada BİR numara eksik. İşiniz bu eksik sayıyı hesaplayacak bir program yazmak. Dizinin içinde başka hiçbir eksik numara yok ve bu sorunu bu kadar zor ve muhtemelen hesaplama açısından zorlaştıran da budur.
Bu problemi elle yapmak, aşağıdaki örnek 1 ve 2 gibi daha küçük stringler üzerinde çok kolaydır. Tersine, üç ya da dört basamaklı sayıları içeren inanılmaz büyük veri kümelerinde eksik bir sayı hesaplamak inanılmaz derecede zor olacaktır. Bu sorunun arkasındaki fikir, bu süreci sizin için yapacak bir program inşa etmektir.
Önemli bilgi:
Dün gece bu problemi gönderdiğimde oldukça kafa karıştırıcı görünen şey şuydu: tam olarak ne eksik bir sayı olarak tanımlanırdı. Eksik bir sayı, yukarıda belirtilen aralığın INSIDE sayısıdır; Mutlaka basamak değil. Örnek 3'te, sırayla görünmesine rağmen eksik sayının 9 olduğunu göreceksiniz. DIGIT 9'un [0, 30): “9”, “19” ve “29” dizisinde görüneceği 3 yer var. Amacınız, bunlar arasında ayrım yapmak ve 9'un eksik NUMARA olduğunu keşfetmek (örnek 3'ün içinde). Başka bir deyişle, zor kısım hangi basamak dizilerinin tamamlandığını ve hangilerinin diğer sayılara ait olduğunu bulmakta yatar.
Giriş:
Girdi, 0 ile 249 arası dahil tam sayıları veya 0 ile 250 arasında özel (bir başka deyişle [0, 250)) içeren bir String S'dir. Bu tamsayılar, yukarıda belirtildiği gibi, rastgele bir sıra oluşturmak için karıştırılır. NO sınırlayıcıları (“42, 31, 23, 44”) veya 0 'ları (003076244029002); sorunlar tam olarak örneklerde açıklandığı gibidir. Gerçek sorunlarda yalnızca 1 çözüm bulunması garanti edilir. Bunlar için birden fazla çözüme izin verilmiyor.
Kazanma Kriterleri:
Kim en hızlı ve en düşük hafızaya sahip olan kazanır. Bir zamanın bağlandığı mucizevi olayda, zaman kırıcı için daha düşük bellek kullanılacaktır. Lütfen Yapabiliyorsanız Büyük O'yu listeleyiniz!
Örnekler:
Örnek 1 ve 2'nin aralığı [0, 10)
Örnek 3 ve 4'ün bir aralığı [0, 30)
(Örnek 1-4 yalnızca tanıtım amaçlıdır. Programınızın bunları yürütmesi gerekmez.)
Örnek 5, [0, 250) aralığına sahiptir.
1. 420137659
- Missing number => 8
2. 843216075
- Missing number => 9
3. 2112282526022911192312416102017731561427221884513
- Missing number => 9
4. 229272120623131992528240518810426223161211471711
- Missing number => 15
5. 11395591741893085201244471432361149120556162127165124233106210135320813701207315110246262072142253419410247129611737243218190203156364518617019864222241772384813041175126193134141008211877147192451101968789181153241861671712710899168232150138131195104411520078178584419739178522066640145139388863199146248518022492149187962968112157173132551631441367921221229161208324623423922615218321511111211121975723721911614865611197515810239015418422813742128176166949324015823124214033541416719143625021276351260183210916421672722015510117218224913320919223553222021036912321791591225112512304920418584216981883128105227213107223142169741601798025
- Missing number => 71
Test Data:
Problem 1: 6966410819610521530291368349682309217598570592011872022482018312220241246911298913317419721920718217313718080857232177134232481551020010112519172652031631113791105122116319458153244261582135510090235116139611641267691141679612215222660112127421321901862041827745106522437208362062271684640438174315738135641171699510421015199128239881442242382361212317163149232839233823418915447142162771412092492141987521710917122354156131466216515061812273140130240170972181176179166531781851152178225242192445147229991613515911122223419187862169312013124150672371432051192510724356172282471951381601241518410318414211212870941111833193145123245188102
Problem 2: 14883423514241100511108716621733193121019716422221117630156992324819917158961372915140456921857371883175910701891021877194529067191198226669314940125152431532281961078111412624224113912011621641182322612016512820395482371382385363922471472312072131791925510478122073722091352412491272395020016194195116236186596116374117841971602259812110612913254255615723013185162206245183244806417777130181492211412431591541398312414414582421741482461036761192272120204114346205712198918190242184229286518011471231585109384415021021415522313136146178233133168222201785172212108182276835832151134861116216716910511560240392170208215112173234136317520219
Problem 3: 1342319526198176611201701741948297621621214122224383105148103846820718319098731271611601912137231471099223812820157162671720663139410066179891663131117186249133125172622813593129302325881203242806043154161082051916986441859042111711241041590221248711516546521992257224020174102234138991752117924457143653945184113781031116471120421331506424717816813220023315511422019520918114070163152106248236222396919620277541101222101232171732231122301511263822375920856142187182152451585137352921848164219492411071228936130762461191564196185114910118922611881888513917712153146227193235347537229322521516718014542248813617191531972142714505519240144
Problem 4: 2492402092341949619347401841041875198202182031161577311941257285491521667219229672211881621592451432318618560812361201172382071222352271769922013259915817462189101108056130187233141312197127179205981692121101632221732337196969131822110021512524417548627103506114978204123128181211814236346515430399015513513311152157420112189119277138882021676618323919018013646200114160165350631262167910238144334214230146151171192261653158161213431911401452461159313720613195248191505228186244583455139542924222112226148941682087115610915344641782142472102436810828123731134321131241772242411722251997612923295223701069721187182171471055710784170217851
N
sadece herhangi bir değeri desteklemeli 250
midir? / Peki ya 232
sorun? Tüm olasılıklar ya da herhangi biri? Bu konuyu bildiğini fark ettim, ama konuyu belirsiz buluyorum. / Bu en hızlı kod ise, bunları ölçmenin bir yolu olmalıdır. Elbette bir süper bilgisayarda çalışan eski bir bilgisayarda çalışan farklıdır. / Çünkü kimse bunu söylemedi, - PPCG'ye Hoşgeldiniz!
N
, söylemek, 1000 veya 10000