Lý lịch:
Ban đầu tôi đã đăng câu hỏi này tối qua, và nhận được phản ứng dữ dội về sự mơ hồ của nó. Kể từ đó, tôi đã tham khảo nhiều nhân sự không chỉ liên quan đến từ ngữ của vấn đề, mà cả sự phức tạp của nó (không phải là O (1)). Vấn đề lập trình này là một vòng xoáy ác trong câu hỏi phỏng vấn của Amazon.
Câu hỏi:
Cho một chuỗi các số nguyên được nối ngẫu nhiên [0, 250), độc quyền 0 đến 250, có một số bị thiếu trong chuỗi. Công việc của bạn là viết một chương trình sẽ tính số thiếu này. Không có con số bị thiếu nào khác trong chuỗi ngoài số đó, và đó là điều làm cho vấn đề này trở nên khó khăn và có thể khó tính toán.
Thực hiện vấn đề này bằng tay trên các Chuỗi nhỏ hơn, chẳng hạn như các ví dụ 1 và 2 dưới đây rõ ràng là rất dễ dàng. Ngược lại, tính toán một số bị thiếu trên các bộ dữ liệu cực kỳ lớn liên quan đến các số có ba chữ số hoặc bốn chữ số sẽ vô cùng khó khăn. Ý tưởng đằng sau vấn đề này là xây dựng một chương trình sẽ thực hiện quá trình này CHO BẠN.
Thông tin quan trọng:
Một điều có vẻ khá khó hiểu khi tôi đăng vấn đề này tối qua là: chính xác một số bị thiếu được định nghĩa là gì. Một số bị thiếu là số bên trong của phạm vi được chỉ định ở trên; KHÔNG nhất thiết phải là chữ số. Trong ví dụ 3, bạn sẽ thấy số bị thiếu là 9, mặc dù nó xuất hiện trong chuỗi. Có 3 vị trí, DIGIT 9 sẽ xuất hiện trong một loạt [0, 30): 19, 19, 19, 19 Mục tiêu của bạn là phân biệt giữa những điều này và khám phá ra rằng 9 là SỐ bị thiếu (bên trong ví dụ 3). Nói cách khác, phần khó khăn nằm ở việc tìm ra chuỗi các chữ số nào là hoàn chỉnh và thuộc về các số khác.
Đầu vào:
Đầu vào là một Chuỗi S, chứa các số nguyên từ 0 đến 249, hoặc 0 đến 250 độc quyền (nói cách khác, [0, 250)). Các số nguyên này, như đã nêu ở trên, được xáo trộn để tạo ra một chuỗi ngẫu nhiên. KHÔNG có dấu phân cách (Số 42, 31, 23, 44) hoặc đệm 0's (003076244029002); các vấn đề chính xác như được mô tả trong các ví dụ. Nó được đảm bảo rằng chỉ có 1 giải pháp trong các vấn đề thực tế. Nhiều giải pháp không được phép cho những điều này.
Tiêu chí chiến thắng:
Ai có tốc độ sử dụng bộ nhớ thấp nhất và nhanh nhất sẽ là người chiến thắng. Trong trường hợp kỳ diệu là một mối quan hệ thời gian, bộ nhớ thấp hơn sẽ được sử dụng cho bộ ngắt thời gian. Vui lòng liệt kê Big O nếu bạn có thể!
Ví dụ:
Các ví dụ 1 và 2 có phạm vi [0, 10)
Các ví dụ 3 và 4 có phạm vi [0, 30)
(Ví dụ 1-4 chỉ để trình diễn. Chương trình của bạn không cần xử lý chúng.)
Các ví dụ 5 có phạm vi [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
, không chỉ 250
? / Còn 232
vấn đề thì sao? Tất cả các khả năng hay một? Tôi nhận ra rằng bạn biết về vấn đề đó, nhưng tôi thấy nó không rõ ràng trong câu hỏi. / Nếu đây là mã nhanh nhất thì phải có cách đo chúng. Tất nhiên chạy trên siêu máy tính khác với chạy trên máy tính cũ. / Bởi vì không ai nói vậy, - Chào mừng bạn đến với PPCG!
N
tới, nói, 1000 hoặc 10000.