Contexte:
J'ai initialement posté cette question hier soir, et j'ai reçu un contrecoup sur son imprécision. J'ai depuis consulté de nombreux personnels concernant non seulement la formulation du problème, mais aussi sa complexité (qui n'est pas O (1)). Ce problème de programmation est un mauvais tour sur une question d'entrevue d'Amazon.
Question:
Étant donné une chaîne d'entiers concaténés au hasard [0, 250), 0 à 250 exclusif, il manque UN numéro dans la séquence. Votre travail consiste à écrire un programme qui calculera ce nombre manquant. Il n'y a aucun autre nombre manquant dans la séquence en dehors de celui-ci, et c'est ce qui rend ce problème si difficile, et peut-être difficile à calculer.
Faire ce problème à la main sur des chaînes plus petites, comme les exemples 1 et 2 ci-dessous, est évidemment très facile. Inversement, le calcul d'un nombre manquant sur des ensembles de données incroyablement volumineux impliquant des nombres à trois ou quatre chiffres serait incroyablement difficile. L'idée derrière ce problème est de construire un programme qui fera ce processus pour vous.
Une information important:
Une chose qui m'a semblé assez confuse lorsque j'ai posté ce problème hier soir était: ce qu'est exactement un nombre manquant. Un nombre manquant est le numéro INTÉRIEUR de la plage spécifiée ci-dessus; PAS nécessairement le chiffre. Dans l'exemple 3, vous verrez que le nombre manquant est 9, même s'il apparaît dans la séquence. Il y a 3 endroits où le DIGIT 9 apparaîtra dans une série de [0, 30): «9», «19» et «29». Votre objectif est de différencier ces derniers et de découvrir que 9 est le NUMÉRO manquant (à l'intérieur de l'exemple 3). En d'autres termes, la partie délicate consiste à trouver quelles séquences de chiffres sont complètes et qui appartiennent à d'autres nombres.
Contribution:
L'entrée est une chaîne S, contenant des entiers de 0 à 249 inclus, ou de 0 à 250 exclusif (en d'autres termes, [0, 250)). Ces nombres entiers, comme indiqué ci-dessus, sont brouillés pour créer une séquence aléatoire. Il n'y a PAS de délimiteurs («42, 31, 23, 44») ou de remplissage 0 (003076244029002); les problèmes sont exactement tels que décrits dans les exemples. Il est garanti qu'il n'y a qu'une seule solution aux problèmes réels. Les solutions multiples ne sont pas autorisées pour celles-ci.
Critères gagnants:
Celui qui aura la mémoire la plus rapide et la plus faible sera le gagnant. Dans le cas miraculeux d'un temps lié, une mémoire inférieure sera utilisée pour le brise-temps. Veuillez énumérer Big O si vous le pouvez!
Exemples:
Les exemples 1 et 2 ont une plage de [0, 10)
Les exemples 3 et 4 ont une plage de [0, 30)
(Les exemples 1 à 4 sont juste pour la démonstration. Votre programme n'a pas besoin de les gérer.)
Les exemples 5 ont une plage de [0, 250)
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
, pas seulement 250
? / Et le 232
problème? Toutes les possibilités ou une? Je me rends compte que vous étiez au courant de ce problème, mais je ne trouve pas clair dans la question. / S'il s'agit du code le plus rapide, il doit y avoir un moyen de les mesurer. Bien sûr, l'exécution sur un supercalculateur est différente de l'exécution sur un ancien ordinateur. / Parce que personne n'a dit ça, - Bienvenue chez PPCG!
N
à, disons, 1000 ou 10000.