From 98ea0ab02ae4020c1cfc70e0a33bf05259ffea47 Mon Sep 17 00:00:00 2001 From: krahets Date: Mon, 13 Mar 2023 21:51:34 +0800 Subject: [PATCH] deploy --- .../classification_logic_structure.png | Bin 91318 -> 91439 bytes .../deque.assets/array_deque.png | Bin 81350 -> 81398 bytes .../deque.assets/array_deque_pop_first.png | Bin 0 -> 65342 bytes .../deque.assets/array_deque_pop_last.png | Bin 0 -> 61557 bytes .../deque.assets/array_deque_push_first.png | Bin 73131 -> 73180 bytes .../deque.assets/array_deque_push_last.png | Bin 75217 -> 75258 bytes .../deque.assets/deque_operations.png | Bin 65348 -> 66745 bytes .../deque.assets/linkedlist_deque.png | Bin 60662 -> 60656 bytes .../linkedlist_deque_pop_first.png | Bin 0 -> 57130 bytes .../linkedlist_deque_pop_last.png | Bin 0 -> 60154 bytes .../linkedlist_deque_push_first.png | Bin 67557 -> 67589 bytes .../linkedlist_deque_push_last.png | Bin 64511 -> 64521 bytes chapter_stack_and_queue/deque/index.html | 114 +++++++++--------- .../queue.assets/array_queue.png | Bin 73317 -> 73369 bytes .../queue.assets/array_queue_pop.png | Bin 0 -> 62574 bytes .../queue.assets/array_queue_push.png | Bin 71767 -> 71806 bytes .../queue.assets/linkedlist_queue.png | Bin 54649 -> 54655 bytes .../queue.assets/linkedlist_queue_pop.png | Bin 0 -> 55909 bytes .../queue.assets/linkedlist_queue_push.png | Bin 62943 -> 62979 bytes .../queue.assets/queue_operations.png | Bin 57813 -> 57069 bytes chapter_stack_and_queue/queue/index.html | 62 +++++----- chapter_stack_and_queue/stack/index.html | 2 +- search/search_index.json | 2 +- sitemap.xml | 102 ++++++++-------- sitemap.xml.gz | Bin 634 -> 634 bytes 25 files changed, 141 insertions(+), 141 deletions(-) create mode 100644 chapter_stack_and_queue/deque.assets/array_deque_pop_first.png create mode 100644 chapter_stack_and_queue/deque.assets/array_deque_pop_last.png create mode 100644 chapter_stack_and_queue/deque.assets/linkedlist_deque_pop_first.png create mode 100644 chapter_stack_and_queue/deque.assets/linkedlist_deque_pop_last.png create mode 100644 chapter_stack_and_queue/queue.assets/array_queue_pop.png create mode 100644 chapter_stack_and_queue/queue.assets/linkedlist_queue_pop.png diff --git a/chapter_data_structure/classification_of_data_structure.assets/classification_logic_structure.png b/chapter_data_structure/classification_of_data_structure.assets/classification_logic_structure.png index 86c0653ad55c971c59cc15a10efa155842083351..192c855a52326860903e2f64699f79fcdc26fca6 100644 GIT binary patch literal 91439 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

)rS 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 Zz*QC@&KwLO62pK$Nl`hGJRu#Q{{vUt#Jm6i diff --git a/chapter_stack_and_queue/deque.assets/array_deque.png b/chapter_stack_and_queue/deque.assets/array_deque.png index 67c4f2c38faf1779c2e8ec713bf94a35c78f7d90..3ef1c2889175ecc2040aeb64a6fb03ab316488e4 100644 GIT binary patch delta 51441 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%0DlPH|d} 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 z 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 Q2K-TyQ$ld<-Z630F>x_JArS{lj3D77Kte)a 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 M^R`N{vgPCd0m9!62LJ#7 literal 0 HcmV?d00001 diff --git a/chapter_stack_and_queue/deque.assets/array_deque_pop_last.png b/chapter_stack_and_queue/deque.assets/array_deque_pop_last.png new file mode 100644 index 0000000000000000000000000000000000000000..7c759310fcb05347e7a34c869155b43746a5f416 GIT binary patch literal 61557 zcmeFZWn9$T7d|>OGzcOgN01T)0Ra^TkXEF-hAvTR=xzoT5d@3wkZxh<8W1q(?l9=? zhP&aY=Nx~Z`{Ldg_s#w5$C+`@H}-e$wV$=tvz|SH%8F9Ngw%u(2!vQh`o1azf&)In zI`LuPO^jX^3f`cOs#5nL`R$kIz<-`T(vmS%P=K(3&-f4=C>aFn^bqhD0;N7X`ScW7 zD9!KBs?h5{j{(;Vuz+Bn9S?!%fcMisM&RG+Ie))nB|-nWViN4v(KwJKtY4pDo#1GQ z@BO=8;EljeTH6rbdiuP zP~i+@6bORtEn2R z8moyO>Zok!&#P}>_*W3EU~XAV3M!)HK2{`KNRB~4WKgp!i-+O=zs9z6#n)Z7z;NyHwz1ku&{7zOe_h)`PJjc zk5f`o*4Nj=!YIhsVr<962^?8s@i&?"{@Qn7zt7%oEvKUtD7lkraU_4Qr4bjjV_ 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

J6R*_fP8sQy4B+%jtRa=8J@(21k6Tx_)$6LU^}N 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 z%0D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 Divt?H literal 0 HcmV?d00001 diff --git a/chapter_stack_and_queue/deque.assets/array_deque_push_first.png b/chapter_stack_and_queue/deque.assets/array_deque_push_first.png index 215486a58fd5a3877f6e0029811bc322012ed264..04120335e4ab4faa2cae0c4fba315fcbd99a66d3 100644 GIT binary patch literal 73180 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

V;rvd5^N3G>&tY38X=$+O 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 CR^Ofg literal 73131 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%0D;|K~-l@`9SmJ3)NS<;)lvJJ(TTv7(G> zKJ_C|W7o-e$H43X(9NqEF{5?WwvwswjiA+J=q5K-7h}o&+ zfqN=!RgAW#ge%_DA`m;P`N``2_>L&dYl8XRo!~mc?cUY2+9&!Rp}M!F1g^;iv>26v zl#hRr1qL_3zF%#;$Fz~Gi>@!}eRy#2vRb^M`z@N?5^cyO0Oh Y<|!dl<T439V|@xfM&j3t~e$5m-&WA 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

MEQi{H_v;jp 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 EAJ`YH-v9sr literal 75217 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ê*A1i?sOEyOpj^ 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

dn88*Fk%BQ47}S|oca?- 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 QB*0H!*I1`U%Rc=70RDOB9RL6T diff --git a/chapter_stack_and_queue/deque.assets/linkedlist_deque.png b/chapter_stack_and_queue/deque.assets/linkedlist_deque.png index 5e4fce6c3c7a8f32ed0f987a810addffb97b81d0..407bd6205a9437a3e44235257f2b016bb1b38926 100644 GIT binary patch literal 60656 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

@$^TGZhDeKg8%gWe%Q%>mbPuWbSxeu|Z! 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

  • !z{o;j8HjJ+UN0;39o<8?@e|f`ir=^Rj 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 literal 0 HcmV?d00001 diff --git a/chapter_stack_and_queue/deque.assets/linkedlist_deque_pop_last.png b/chapter_stack_and_queue/deque.assets/linkedlist_deque_pop_last.png new file mode 100644 index 0000000000000000000000000000000000000000..f05b270fd99c662b5ffcc0839ee6c9b417de66df GIT binary patch literal 60154 zcmeFZi9eKW`v*KT)`(;+va}bW#ZrVx$(F5*u@fO=iN?N7rBb0}DO>hsW*F;?h8bFg z?8ZKpqL{Hn#v0yJ_fz+C-_QH`yzd|I(=yX^&3T>6v3`&5aYY#$YV&Z3azP*v9$lRa zmmv@~@D|p_2?H;1Nj)fdf%;z7)`S$d?3o1rxa(xD>ug{Ekp}NMA#6~72+P(b;1>ic z`s>SEU(th#{ds>GdgMRXfHCj8LRf!Y4}n;M*R3CW@Mr5gf4#C~K>r>w1NQrBHb@4` z@At4aa5W_S!nqLevdvq^!WRPJeYf=onjpg~2IdXXy>QMn06InENEM>eHgEb_U>5d0 zxXgNiPf+N%nX!pOtgOSa>&K!_d^Hhp#HTW)F`*B4iWt@XWwU;T~@!XMl zuo5pUYgyq*BUzL?AC-8uQG)S}PfYY2tSYUksi~^!<;Rm5dn`*%y^0hx`sBLP-6){oP>QK6Z6vRDGhPf{NS$aK)rDWWeJfL6i!|i7sdSLw!|CQVS z9PLSZguJt~k0rf=jcmp5cfuTME}!5(-H-U;xME0;#nIPnC?T(M?UvgKE_8!D* z4g6YW2W@lhyq53>uj-cv5tFEhCKck)bao=y!+U&4GjZpCOA|Pb@7ubB4$JzGDlJQr z{CaLPHY(Y2?UK;`G!$|cj5@d*_q4TtI3W@+VzLLKdqtwQ|I)WB-zi~Me# z>EiutP-{sDahn|~@9k<)3tI4wv}3bZo73@C4^|B$Pa@UoX1poB)&1tpgP9ipnhreU z1WfM!>U>_K>?++xe)y*87q_vjK(v6&HsJYBSjh%jt$`cyPjoH-#AAd91s`J4~ zh=OUFwD7+r?RrhbxRrql=bAnk=yy)`F_`y+NcbJl?AG0Dq=W&ORgeFM9{0!>|ju+P=suoWnmFv7mi;wQM|tzo$%v- zba{sDSTQNyEfYa4;qNJTmt=a1b+I}S3&$P3sI+d+Q^ZpLQ~#q6A9EujuLLh$M0$x^ zf2?e#(039p-KY-qH`a}d9YP%Y_hCE{LyuWd%ZhyPvb`S^p}pjqwQ48sMo+Q-kw(sx zh)2b8pD_1^oI(eOSZ*MCREYh4ev)symFRc=X*ePxkaaMe^0sOnckY4Uh|qyaK2$EAZ>u0frMqmU2zpdF26O23v8d(~ZtdG22>Mara3#CbaV{RloNqB2E!_hE@h z{(m1gmrk9Ck3VN!@$QEoDbs`htDKxg5pQsKfnG%AAxKYUi^n_IzZVxNV_&LV#Zl#L zrPcgztHmiO1>q<&e(=wI<5Psfyt|5zO#f@f|9AEO?a6;j`v1wv|LM*@ZQB1?i2t(? z|Nkt+k!{Cv`Tm4=85wMijg3k-dNU5iCnbs8I`3e$Lhu++0@;z)BjHk^j8V>O=OZAg zJcyX6-@a<>3cS6i!%JP}^((Q%_DJIs=J*fdQRJQQ5gF(`c(~JR{@*81LbOOI?Anj$G39+4I}oN(sUq2lBpm`e=P{;!|ttL2b>9ZP4eEus{EQ88()y zV`C@^B8=TaQV^H;XLt7g9ZxB-wf2-_rr_ zZi+}j>emlPEdDdlIG#5ZO;c(HY)925Yg^bqKRyILer|m|`OlXBN~7M{ zL_qc|y@d3~{y7P)3=D?8^6jNvse@Ka3+2@!qG!?!Z>xr)cP$MC1bi2(-W%g>^uH&~$BwSuVB#Bdiw~W5x7%E<*RYNf<~{qpj=b34lyJ

    RX3a;}W@|U!i`Z51NXy7n-eo4 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Ξ`Q(^`fOW;rKeDxC+_8xf8xS$t<5bi3RRz^P$NTKqy*u zd@xP>!Xri3_BONGhN}byZc;YGXbvTF3StfS4g(F3aN=`)p-&x~zlz#^mn-oow4loT z{0r#)$d8^B=;kv^pBXLovq9UH>2u2|T}T69aH>zZ?&))k0s*Y`@3nX`9k9B3#XXzD z&8H$7Oi^Jpn#$Eke4F9^U5%p6sYYMIFJ6=@HM^fdWfj*V=pW&-ND(LJ|K6O*cIfu; z{YRKN$cM6JqZoFw3O6OnJ}rgEpuI?wqkEfjpu$3-ic~BaWmU}`8#&0!7dV!|wU$Ed z!hVup>jtmiCIw{B2N>WjZ^MPxPsx0Kw(nQeVEb2YSH~KSKk}D*T*Xkv&Zr{II-f&*pvsX&2AM1u4Zv zrGv^2(UfA)QaMycJYYw}ZUd%mGch>J!?#G^U)cF(ET<3HU?f&kU6WnHr96S!-6KnC z2IXB|qA8_g8(w3gY?fl+fIslZT3hJJ*rm=at~YCoJS0O1EFatu=ECpWUG1@ZLvMRy zD1}bi&#O{ES5#d+`NCVU>#@LrPmewcZ(e2?eRPs&lUdw6u#Q@+9@3cQHzlDro93)T zo(R~^XPWPxnKZ2gl9a0e;Rxw(+i~AHSH==hy0iXw6>q18GkRA2)@K z0}k~#`fnMrBt=m`uj8W3bFph`c#Q?9MU-xPEf9Z{D$*Ex`wnQ|T12TzxxX|XQul6; zrYTmC{~b#mE`1lMJ6j-)WCr6jkVB-uh0^V(t3p)9(u%C?y(`ZVwbz&KvlxmWp1*QK z4S#0L(4w;NH857|2<6Q*58*CYOX9pLy_MD%4Qw^Mdt<<9t%bNp91C+(9p$}U+%>O; z*d%+fYHc#TueR9&>Ys4xOht(tLk8PsQ1^RKhU?G@AK)10wn_?P2 zC%4_iMT-c<24I7i>taYMrCecsHZk$Gt5&Lo5>=D1ZJ2~U{x>%TZJ~Gm8+}Oa?Q12G zTTek#2mijMHeppe^&)IoBl~NVYY1=E!g!4%)5NU`hqN4shU79UvbSJ!>Mx*@n~wwdj*Hr4a0 z=)#K&*Go@L3qA)5FHTG9r(^Gr8@+KRaCb0OAZ@4XWx~(m7fdr3 z0p*yQ?@Dn+a?T|iU#YDA;Ue5X;p#|EEktWO%hDb#oRibfA5w>Bx?dF3c^i--EXl8QQ8 z1Y^idnw_XrAg1$81%GOgq_$L|fEK3@fIj?Z5?1}W9{3t&hlN!E%d@H>4XGHo<@!f} zUde9F>%P|ftl<2r82OD#L#NO(ifT*0&W$ttje7RQG$AweRXh|8?F_w)mGwoZb>ca| zhdz95m2?xv!KL6Yo^zXDn&jcOJTl6OAhZmJ7qX0n2Q-yTlT=oLCp3RyJ3(lsPA3II zm|Mzbv)lof(S~3->a}7b%VK}o#vb6oST(z4y2$i9#t*@v@qKqPclsNVdx&Ac6W*yA zz)iTrh>X*k@{8zNpRsT&@;7i*egKYiU5xZ;jUaE$wGpEuz&hYLc>aNl zWF?>>Oas+R)h@|XTa4rd30Fcc!7bHN6ZSwSh5pJ}I063txjruiA2MylII<80@33~> zwdQE~$wARJH23L|L9Q!F0;KCOEH#fDD(^MStLTNMfbtC6Q$zodjk7TIlJ01NT&ru@ zcyNWiD?E5Di!HqJ@UVfmS>-LBtoIq%vCmyY@7fF)q@3XjtjEpQ_$^dG^$aO(>13kL6}aYLdZ3n!cOyw~)ZdGpE2CVHnZ?;q=lTrvWnKxhAeY3~3eTWY zhC1rGpWr)GVW{?1J{s3JF!-kSWJ%Syp$dr~qVgbR9s0T)u4eHJTuhse$2~?(O53?@lEr~#%K1x*ldIe{u^HTZkFooDF5ec2(+9W()Lv2%9cNd#_ z!>!jwCAnYi0FwuPuD*cSrvBYW+?Ms6b2l==AvG%bZ5t`~$#x7ZI=G>|`^FFf|3It~ z@lz&vHRF{2d-QlH0oI1%b@T5_nzf$<3Nsn>xpP+f>-G>XLQ5OXRy_o~8YAc{=_qIu zSxpJ#g~M!vb0SoyRf*VT;41RYwep2DmN zsV#Oi;n9(P<}Rgr#$6tU6&0?bLKb}`n&U*t6&2*-w1Pb_=vId+mY}iF<};0m%^6>3 zXDr1;Ad8g2i4nG#IU%vm{s)n zyg&~1aa=lYBsW(-=@@yv*pr3$_f`cIC(M1>lOz~sa>(xKRd>Udg9Wf@mkVfEHFQZc zZeEzB2p=w>zaOD>fS7kFpy(80g9=Xya@EPUKEVU4pPJ<+XDIR{o6I?WK7SI9+hTZQ z=j6k1n9$G9%JuS*WZGp)>+O!Yzvl@M6`sq!zW=qgjY*x!nECQdSKFx*l2k)cQZW^n zaH7>w=DZO=N{so@`(-(sO{}t#`gU>$*5Ae40&Rh#7@Wg3i$m+i0#VY6gxYF^ZD_oT zNJ11k*C~`Ck-f2vnJ~S@#rnl-`n&>kTo{*I(igjdA~-Tp`&*G@bYwtKzGa`}yGJP9 z^ZA!)OLrz{W6;y*8n5{}*5_Ij-4;Pfz3TfD_8miw5aweOQ*{es$O>a_v z;C}xo(Pj~xWSxzZDT9=ST#FfIxg9)rmzE~_#SxJU25Kb>{gBx7EL_<*O64hLuk(X~ zNO17708Occg0Q=ZS8ZYb+(n`S+Gi6W{hMWaj9Z7+jCgh9&v|6rdV+-0KJAESf|bzj z@GuCOJw?qRpX7(zhE9HP8OS&t3V)C$A!9ukIxeCX$QQaNvTsnu)DiUC)!C+n7I;*d zvka?2Ab6cB3Ua6b%8fZ7F;>+2-dLzUJ4;z^MO4X0FFkr`5zzx5!??0&W2kK>388f_ zTy<-mSh{jm>T@pndW2_&c#FBp;+eX{0#4Ew~Q zG)#h-)bHZ>#QPIX9=#nLDG3#KD04Ee?tzLg&sxlddXv`T-CT-4dc&{rtJFQ^u*+XZ zLl#)F?!1DKa0vB zXpmvv!k|d`*}9ZOv>yth^Z^~-XI~{C)p9SyI_}HfLI7BAVLN^`8VII}1Mh40sC$ z;!yTwElMYKKyGxoqF<>bAM^x%j_=1yGQ>^sHYNo=0#=NKNS_PC(JpI$ zf3)mee8^4m2Qw0v7LX_sQ(x2)qjdE9LX|2AXxz~9o5=bkydlYud}UO*m57R%0nch4 z8}Sksl*gv8f!}V`xiHm%90N19;G4BJKGiMaw$u+GZs8khg?pGSf)jk;jP!iAOLjj0 zCB}^n-URydQ^$%d@Xbcb%t@S{elDls!?w!$s?U|rLDli&LN}e1Ox&R+S9sTj$nr|ahrAWNqZu9FROp$szVVWY$?P7R z(n&nJc%lk0 z9s^8uVg-&>FlnHPoZW@>)5To>k5RrMkI=N0+uNkBn2vwOVXBIZrWOEo8DfnGW@4j2 zPYtJP!R)n>D6s@4KRfwI`cHfWmLL_m@}QVso;y%)S`owLr&Kj>9w@ni(=C$Se0Rsm6NmTyf66-PP9z1vhS=lN)H|F3+P>jEu=3T;~|PuGS+VqHi+ z^?dT<{eZS_jLZiIGqWfXBk=NrXyodg!WlH~YK@1V|9jPuP{3}fZSmJWAjDB0_5_Dn zl&3{+SWiI3i4)+#piAP5ZNaI`$K*9HF|V0Wl|7e4M@Hzi_M@mEZ`-y3Ye~w0hq#^zJ8F2uNhIk0SbOmpy zmSQS45Xi$8_&*^A??@j{Q=n_#9o$51tM zL1hEd;cVGd7QMFZi4vF7U1Cg&D+AJJy0WzImckgaetVV>17c3p3oK03_PO(;wbPv` zhXzjspF0meay~bshEN^5ov*~@JR%~$2!+HK(nd@nXvy_{H1;#Vc`F2{@%IZ2&bRx_ z=t$bS^Br2w8=0s+=$yDvv$ov(HYq%IbhUNC4CTr}?i9PBX>s)t+OH$#EjTWuC3ClD z-~1;n;H1$Zmb56gnCHD~Z>)hGr6iy40+Qx2%iYH6yB}7six2P&|yFF00Y$<4y z($_iPnK~#2RJdGUcmd}ktMFaS*{0Tit_;3L9;(kf`qD2gOoP%mt#62K>#lEG8gTFh zT+gs1pTC0*dqd)(1?!iTEtD6%cN#EH4><))=_z%qU0+<}KjRSn$4=j-=^?_Hqdv2J z?GxMQBwxU}gAF+%^O!J*GjPwFmN_D$cdL)0mJM5v(_C7=2xaDKn%UOk=ouqIR~D0=c_3jAz9RD_v;z6d3 z0NEuAdnT5$BQ*NF&#ZH(o=!`cHUdVx?j?gv{0+u7Ft_YU;ohMv>Hm=MKLmb&zzfHJ zby50|;&_EAb(*n*EMJXn8`v(=TK~NzafA!&619K^Hs91|UrRV~g9~YE3=E$m&NlkoEs5~uZ?IYI(b2Y5 z?YVG0BSgJZJIkG<|mOSU32PE35Vj#L!W9#KI&jFGl>SZ!s?#~ z*}dNxR_+06qhe*iF{Lxck=|j?Z+7@i^{R| z2{T^CzpFn&>8E&YSj&bsvrc!o@UByuvkM>-Z(7?wxnT?zER z9m=;f+7R^)-K>8uO=tr7zGt_+u-R`*7W(3eU`ZAX{f&DD*vt^dDaj6)90*AB#l-KXexuC)7XCkq|4&r@^9cR# zaQ;uL{7;Yn!@m8`0R7K${^pbX&sX`MllA|Ugn2LAAS)jYfqLM ztCz7`qU5XE+}ke<@R00%r(^;=H4O$ZDff+h9;M`4bRhOkrEY5Q(woU8Ab@ zcuEnJ-p>;w+%Pz?tq?zyLn{sO%#MuZ9{FYVjXL7uqUx6+h%?N~DGc2bUwTSD7U+E| zxAl`9@hW(ctRX9>09QfCO9s8hj_N>u$XJwfKh~2P^OlU}Gx!;7UsMpGrF}tpA~!JL z-wt-|i5SW-FP>2p9$vO303wXt5_{Qv3T;`9ttVT%ra89-RdQ2qv;#|sH`H@W{%QKS z`&#my55M(p`~VS<|AzWIFAkKN&Pl3JbRM$#`dpcL*muNU>UodDUWXpS>b9HUkK0Rn zJ5{oPl$UukQNM*(7$DR+eOgzo_)lP9{m+&BrnC4#kT&gewyXNjh(7HSY^}O~k{`aE z|Cn-|2G)qNSZ(spsMKp0kZ)JOw9#L z`iSq&_vuRRKlUxIz1joKPI3NtdvncHv)>d=fQqR1IO1lNvmSPHv9%VvTBqr>62m#` zxMW_vQ@&Ssx%&9vS0Hr?*Y)wRl9t=AH~hpuc1M-8t_NOYxNS&k5ptL+uf+Dg1N_;1 z1|no?WzJloY~(E2RQE9zBL(xttVDC3^W`YHn;NGhF#zInuED%s zy%W3`44n*D@9iJIe4FXwp#o; z@j5CtRg&AuggX8p+uK@Kb7Q=6`U-=3c&yIADDKt_lu2aab19B zXA@2&l@G;fI&ZufSC^}_O?5jluJEa{Y>npDJIULdy%>KGr)9Mjk*-9-{%j=?NQ~m+ z54TmY7(3HyM1Fc^$NhO(*G23RukPqd0kH#1`R9zf-%lZ;;)|pG9ydp2?EWmHJ9iq6 ziJmx2TM1rH^skFou73?yR56GlOyBw@1jrrxSVaUJo)4G^UkBu5xDAr+#?E_;1fon1 zuTST0bG5EF&(~6^6Rv-@3zRpZ(PtpSrTg|`yxyAW*Kq2MZP&9#+SRJ90*az;#%jwY z*2l@VL*g*yxGNxZn_&7!oPhfKMXMv9dyVP&f91lAxW1eq=EuK7H54kr5t2@>l*DwL~p6x93vt{7Ys}Ld`9upt?}@? z6=D1*$|R7>4Ox#a$Bi$q{TVl7iGFAVPa=22p`1_(p;IPKDJNmy)OG%opA>W=c#QQ! zEV84Qv!`{qO6m~C36aBTw*=|_Rp!3n$0fNV0Fd~kYqhyQ8 zhhMkUj?*-^fm{ORZZl)WwDp9Y$@YywOgLbF4^4yyXQu!C4f#}twch#=kLPA)tzJHI zlK{IeEe6_#p44q>mL2i_tMr0tpZ?LxSR+q8+&kqgvCk`<7nBO{(T?cZV0GLV>*@7} zF@^j3d#!j{uFDakim^Eo70}BI%jhOlS1TCloHc$Q6`2Al>PkIxUPoCr#<$I z8RDrh6JQiOfohes7c!GUMImw7W@$@gVd)ehGK)5ur7x^`CBx7UVOwR;xWB@IrM1=r zZBAF8-Y{}y<%T)EMN=Y+>ip{TEu@9mVfrOrV?2xAB%KO$juNP=Jh-|NqDLPnb7?@h z%RG4=DanX>*LzmhZBywo2+Qmdv4BOE;CdJ2W2d!Jc2%cu3DsJu;PEDVGH- zAAl^8=EwMU%d4Qs=C!{RzjyDPPmiMFk+T{0Xk+3%-YNGVwZZsMgoZ~drT^yXMF&MV z-_?HeGV{lF^L3ZNRALo)O;aq!+sonJ5Wf$h( z#+v<_9g5G@`}iQ`w8m(;BO=6=>SE=Fw&>tw$|5!Dd}hzR{mh7!V52#D5cyjXt+&xd zl#Q>+xy02IqP*ullE2QD4=W}==2C=lk;lQrw6be%Ca?Pi;}j>HjyGw|ULl~UssoGK zdW-P$it5o%-CzcMI;qOaUt?;8u+@Z|He>ro7ydBu)I*yR4UFo)mok`7ln@HGey+FF&%*zF5PUm+Fr+TQTCN zYAv7x&U^c1KE5y>dge!ueSAp69c?3Y!cB@icgU9pc*Y1})?K?+DeZ1it{KHUQlm@BS z3M&RR#$TWFAXj#YzYoy_>946<_2K<{ij&rK!{&>1m%HgbeY|@;ztHw*R?QxN8i1v2 zmU9es+Lx879Q~0ESTnm4PMi5(?) z(84fy)GwGCSjHvVqJ|pa2z|jr-6ND?YIwpgJ`s7jSAWYfWg69+BX#tZs?QXeL^NSHdR8TQU4h&2a>hwo$SJslOhH>5$C+jv3QtsX1>Qno4 z#U*JmW8RWAhNP+{0FIaD0p-_C;!HFvg$NR^_@}E*ohdRev`fgJ*Arg3&E)qEe=Ww7p*&I%!9~GTdGxp-g?= z$JWo+ti-BU$~H`pby~%ypD^ci=hyyF_3^CsMXa3Hwml(Ta`Me45`E~CpM`V57UhB} zBClUGc7aD;1BJI`v=xiHE`iXNT?DIqAGp&dNep8r3!_Xhqlbh|ynvDRKjqYXC{D_> zXWBCslJhqH$m!Rp(%J=;+hnNwhJ9FW=Ez*PCl85ymh2gm$GKz;J8N}Z`4F+Wk{S`a z7To??A((#v7BffcJ^n-6g;|f=>rrXlGYkVDKP5Dsw0;|fj^_5)zs8MhF)%P}5El*U zH5#w_j8Y#IOtWVD=rsE&tg^ZC%v9y86LOD~=f8QeDtI$gdcag~lc3kYMqj57QKv|4 z#rc2$6y9U54vr!mM3#AOe$DO|$m8^-A>1lf@f73&HI3;O`9+{j<>c1VsEtOADXuTn;%lk_Lvc+;kExm1F<9E#x&DN_4e920x=&P?oRw1 zAOATMXLauZ=d@)b3SJ8~J90m*`)W-CgVI+m^X&I|`50>S_dTK1-m+>Yb_zE;vP?-U z^lmcemu4ArNo>?B(|lG}NKw>o=FPnv%5{u;q%yp$AXOMj3*vcH0@vL|mO9$uicmd8-4fyQ12!DAH89+d97qTKVi zy)=GEMsK4VF<+!+NI9Y7PaMw?<*u|iHS*?3eil=lJ7nno=PXW7?U?-5x15MGm37>k z-_pNYUKxb9jH<6>_=lEAinEPUA26VPwfY{d(bZtA`TeC(-}b;U-F{!l_K;~+)J~Uq z*B^;Rp?j7lk?V19kEZ5s>`!)|NkYZEXEmrIpS}`U_=Nqvf21KJ(Eo|`y#t13*U4f7 zCY)}D>(N5@nC`&BB*J*#BFlFMRM-m3eFiZGJ@5d8=Q-f24v&(2S|W1Yd9THxrm%T) zcD8F_)h3tMc91EgG zdC!NnGhsZIBCFj++AeItRQpL|)2MgD6P!|6`R@owFjkul9#vcgb`F14|H`)0W!6>r zM|5?M`6OP2MBp$Y+>)2oP)O=I-)+-U_0_&iJo5r@`59ehE$DhS`Gz9vM7)n)^$UyIy~A+pI<1{qUS-Ang&4`lG<>Ls(S7|4Tu{Jq~IT+PCYr?Cv)FH>Fddq#-K|x=A zPdC4>G}pTRUxC|z6`{ozL&kj8GfqZ$fMiqmbW$BSuV}%UQskQE`B=<0OfeW<^xS6r zgi&MPrS@kLQoTK~clN3#6JUt$0OJ_L1Sm+do|$C#(}p7rqZB79hJ{_nlanjB zkMO{*%E{xbnUn-bLQR%8D{=+rj4gIx*_diDC$3dv1d)83QWvvS6)R-b*|-1Za*y;Q z4#nn8uZ4T_D255k$AmPV#|k%;KW`TC>N_4)Pm~y?T6fX*^tGa>=y+JGIz&vyjKNh6 z8qE(eL_X2iKgBI9Pgv%=81{Yob7unGfwRQ8(q`Z+3PFmYCp}G$f|}6fcl4@!)go7u z5z)8Cj;%N4L;Kucqb@bjDm+Yj)^JzZdEV>pVcLVW=Y6&cZQ9v8 z@rFkiPYkA%u@H76v>X?F)x!qbC7Db(5>`I?#UI7%g)Q{)TvypPSU+ftrVepheOZXF z6w5$LKFHt-LUoo?aa$@;0Sr`N;p5GvmOAY^35=33nQEVw-fSBQRu760DR8<0pB4y; zd)!8~BVp)TRA4HGz}bAcqRI&H9EktrIZWbeUp?$^vTTl?v+qMcnEb-dt((^u9LAOS zdG&;bxHUv}wb`vdz?~qVcj;IUz?>yk_L72Wo~v1uBOCaDk-H2gYce`C!Qm71W_HWWkl|Hh4lmUC$KpM z?;IW$WUOVE$8hSsiBh3M!QU!W%tgHnkc7!M78wkrJv5~VkI zsZ*PgkFv^+su(b1+C@Tg1^m5?tx}e7dU)B-awM2_P)7b~(s}!(l?15C>*dUG#puB=xg{ za1w1p@n=oTu?F_&pXywTxhL57q;$KbwxyDidZ~LY$*Q7^BoZ7mXraY#Qz?5uXL}94~br%@G;+-{elu4Qj9{Z#lO>>cjs!+Qm0GHJ>+bE z3ddu@*%qP9?zS+h+QAO&z2VW~`|@s)UzLzr7JkjU@VI@30)U||NopUN02sPyS)r}B zq(MDxo4#{paN>0)=}my<81%V*+G=aYo1H`DH`osaIL>POX;b?D!1vN{;a?won=<_8 z*Z=>HronLp5JH&1#k%ou7A~VkMi0zp?FRTB7XS_TA!eeY{1@TU3c#VVTd`XL@EJQI z9N3ZJJ7|G}Hy|+GbIqidinqMIK81q~^*|Hw)W4{JW2z&J`)x!PBbt>nk<)!k!{$Zi zH2Xu6OwvhQR*l{$qo=JFdwSvgV_rOh2QAoo?O|>g8`-%Q_3n}YiTed$RGY))&Rar?!egl8pM&agkF7Qhs4$LXXyuIY*Z zm}GK42!=;S0DogGXg-;B+3T|yW`IM7J7_hBUG#HjZJdhAI=&!)_yFSVomh*C229Z> zFPEKGp+*mhIPzwiVo+9l6UWUvRAGwC$L?EEu{Qursydl8Ii2&k#Q?@4;{58Uzy9j5 zd(Wxgaa_=44)(6xMPWbVaL57?dtJcrVKrOeSB_?_vqH|T z#qCkQsFte^zzR84tXABE6)sU%$o+P%;Hn%@R$P-W;X&$As+L-CUi+t_bT>Tn{^^b@GZV3-ARK z;gC$%6~LTcUH}uJwftz)17O3dx`C7dj;JUUM^K}b1%2VXS;b??*XyJ*Q$17xnde<{ z%u8*d-K*K`Q~C}Y^gD};Mi;7j-l30@@E*_FPnn^5a_?BT>#PranPA0Jw`^pnn2ziv z}INWWt;7vz@1K5eneoyKwo22Sm~J;)}CAd06DhTf?k6XaZ&+=Y8SBZe@O?!yLw8K|AzCJUfXaek5#-u`T4~`cowT#Ud`tF7ksX7Fz(3avE17)pE92^h|{Q)mr!GdyMZIJ z+QZVEnNw`1Qg&IM^|Z%DdD8ptjn~ z3`!HXCJo%B>PtAC^55XmoFBWAI4wsInf`dWvKcOLK~vi+2^?jm`U{0!B@wTeK6eID zdqQQX_KgznpSvHl;`IyOx;BmYUrRL!TCbd6tR`9%za)t>Ffqw15+O`hP$_PEQXpTMwE(4ORL37{9Yw_! zRZxj5(q#DolT8(nkC!c|Rp(<731ir&u{QOeY-7`KU5N~+T`up(Hjww}0m_24;@jcY zS)7*ZRi-hmM;y!O$HbtB`M?*9BWZ@qvkU&DDH{6lMB%qoh|vT0#dtru9dBN%j5rN@ z6?ZW`VJlS}RA&hSuIApxY4sMqm;?rbcUH@fWV43vvgoTJ>?d*C$nfs4#})^}b-|T1 z(ee#NHg1X=<$bDB8RC>2h{i<5=}*0IyD=4N0}*fS80a_0woe~{sT$RH-}fQSFt)|P zzEkmn>zuRxT-t!&$u(gVmA6DMQjh5>6Y3jYG!5*?<#vfIogyWs+Xf7A8h7QY`w~&p z?U#Z~UeZds5MOyO)C%Oky7Lb~OH)XBQv>C8iowz^`FU*ai2?t68wVqc_yC2x}_c4i{s zJ?PAP2Pds%;*`&>n@&!O&!`0Iqaj=3G%LnwWTy1)XD z8>V{n=MF~QE22>`z0t}$hzx3;sNaUhr}gO~Nb!Vvp0XPD#LE}wxBQZ=8NRNb9O@3y zhMy$rhVy|@ta*^>m~^sUCgyPaPX75<0XPTp`n&@9Jqay zyVZLFXv?fi^wk}^lrcIyMbUj!_ikVa$-SMK+%&c|az*&TnoeQqnNp1%@n%`Du%#yH zea8&gk8nT=$*JfwQN3=gO@chQc79~l|Q1c4A# zj$xP;Z|w6_o8a|^Y+ zq_JUw=t^oyyc!=zT04n<#b%FhRp3jfI!0zJDOcCIH8bWI*0qKs@KI;J=KC7e;C1JL_6ZX0K%qm6oRqLdc>0GJq5ZAC` zQNe6l=$T_d9;Ao{I-zBH!O__{TbHL!AJ@Di$-}S_oaF*lt4QizY}O{f;3l}+LT$k{S&2dOb>#$;IOGJ zYe4>zNbj3dmyxTZL`mUK;wf?HV0~{Wgz#t4<-D;R70w40kT8hlKjx_6Mz+R4&t#4v z5Wt@r^Wyk{LQ=dq-IHubvbgfDNL^b6CT-X$F~}q-Zi7e#=?gO@pYo>ig}oRk*_J_Nph|+-Ky$$(GLkc+9fMa>d*oibAwew z_f>ZqYTDV##NAuNaS3A*$yLrItL_8cXMQg*+uDbIvKH-vSU0Il)Z3*p27$RB!AeAo zl6&hwTuY98>RQq;>1CQWQ>izZdq8^oU#I@uK0Gl zX`zgW0?Px`4R3RIYvQDybR4OwmodvcFChCaf0O3(5cr}VQWgxvgs$JHuTl9}Vw~@M z&r>tN)Zt4m;wqhrNp`y&y!2xd)NN>@Zq#(OSxC2f;jW8MlqagrMbj@gVnHCBKLT7$P4laiO1XlUN^?+A8>u#iBN&+Kzu*B9AzB-Rf#Pg*;9cK5SzxzjU=(4^jLIGQ}g zl|iiK-jl6-Wvh^pU*7Jr7%t-_;-o%qo%K zE;ZAp3h0=JI%p>bSE2nf!Y7j5EGFkXgJsM&`34=}TP|d+r_aj>A{_k@L1AU>Okb@w zTXJ164voq#RE@I1gq}eRFV^W=<8L;-IxXsz0(CK@oo?7XYOEWpXJd#@Tt~ESe@qTF z*Hzdh7V3v+SaK^|Lzn4BEh7MJ0Tz6JXdz68Pqm3b#!tj(%}p$kJaYN97G-^B4@-p0 zCFXT(bOt)7TFNo`F9@4_<-UL(UznsTzKvC;hOqabxbgOV*@s8obMo`kHvN>n7>a76(&}udMlS0)v!Dt%d{iQ`lHU;TaoNEz+n?qHKhc7P@B=>RN_ejMa z!tT$n$cA7UW#4HCZ2j~f3Ru&#I{^Q6VlC;M*GDUX)n;WbLrKGO@xEi>rgl<~E2p(& zJXt9_?ZmP|;K9I#$O)GZO17V*)KGEW8CNh53dUcpUTjvt(P1`nBf-t8_wGhq707w6 zrT0+j**$p-&oz0zxy!?ztK1iceaXCTV?A`dp&FKyrD95<3LNWyMCCycPBbXnc~t7v zGvb>2u?srdRG7<9Ja;=ihF8MmG)=G2)IsO()d}mTcv9s%FgqA6bgU0-LxM1!hIanjI}qia=#Lk9k7W7u`F!+K1v>3nx1m*TiEki&!w zYxFet@I_0icR3o$(DNO4%e724c5qr{vm_*SGgflILW}!zVwKfd zye^N@PdLaC4A6ZBiP(2(?~sSKo|LThJyZ&FnGLC5eBI6@i*1#fDCfvQzOx^jTiDTS zjb>>u?B!;a(@68eyywW9CdEe=U)cz8UVFJKuzD}pmS3sXD@M}k@*Y&fdW4SC9PTT8 z#@1G5nn}E$yU<4!{PmLk^5?yGr2MJJ{D*Jv_ZMRA9ZZ{=zoL>s6E?|9dEl8o6|2ou z(N3ooc!WVa zm!6Ff#x3@b38(MAh;E%77~yj#H(#w_yUo=2{5TAQu&HN^rc)gZHI95U^{z}9ltrGM zkOBtzZ8{)Y=-bC~X-3Fj>p6FLYlX;(BwF$3D`it94g=(OVd=^(v`}I5pO#g0T@U6Y z)V3ytN65w}x=lhCzvOhm$|_%^)M9;QbzQLz+DdFf%YGYc5@tIn_Y*l~gFIF3u!cA& zIHig88c*v=Zfhm`9kfEb(HCPTvCHGCcIyEt^HaB8%1Uq7^)LP%%bKsvBedW}K#X|v z7149-97H~j8{eLNr9fLLiYR5O;t8DK%HB73noaI@6L-&XTzevCl*u}+LS;&Gib7=Dn5H@DsJ1gRDB@er1?_n*FbkHS#O|^#^?E6NPLn)pdI(dKG{I% z@ROOoi83x5mJ}%C;=R?9V6h`%Sw_fetV0s7HRZX)(_ThvqqZ(xkl_2Pmx?_Ig2BZS z!eDMU%->xiJ`z$rIYBlMv6|7nf?n|rcD(S8Mll52vYfIdw&qP>=QF1jig1MXC50qW zC^==&N&#;1)>ujw;q*yg%vw%1d-{twbQbN95*K}}_CtBg>G1yEz1A6LXJ-7WHcBxm zW$9%pB-o2SMzqV%&<{Z-mzKmQgda)Q)>GcPFtP~+MO$D!^Z^J}LYRg7feT@G`Y2MQ zFX8xO+Xs3^X#oIR8PH2S>i9q}Q~RkaX%O{;Q(Bzv^i&vi^m`q1B{s*9%TslXRyMKY z>Nb6{XtDxB92L6h1>uFH*p_|j6h~dts0sqM-7q;Wrp>3RF0&x&S9&Gq(gSoV~^PqB!&7o z%In|};c$?=c|LQtQeo4!w-n-8<@*Ke@5LBjv{6dn)b2xV`Q+VFk;Da%d#(L@^nyOq zr#)sd`ypE0@w`DUzE_)(t3^Knt{EJeM7vl)f4crW_>8uDmT|c>vaZebE{xc2L8%YN zG&CnahiFZ}eIcDFwr>-Ziu{|;m=2Te8P*}h{Ubwu7w z(^(Wup|BM6SWd_b)H)~8NYM-gASO}3qRAYCy9WK8K$2pmF9Eq$9eJNo81c;ox05I% zg$rt=Qx<(nx%30QpUnKt$EWaOo|ZP-(Khm39kwp|(@E6FWp;5@`B$asUBa6;2AB~i zMuL|rt5liPUi56%j-6y|)>bI?+ePiHvAmbI1cg$|#yT?R%Qg{>{)eRp0B|QIGf=Cz zJ)JNjWwfdkTlDs;vr=3L6DqijlM+B4ElrkDU46dro(g5Qs5HO6c1}SKS;`D50}>)a_yzcm`*JjO*1nui7ZD@Az~aXM|6JmeYk*& z*3v(k;EN-SzrIv>Dd}M*_tSt8h|4!a>_RY~_2N+~Jl(`rh~Z1U?nt zhx$byVXCE3@fq|!J~PWEiXB$5FIg5P@Do=8Ma+wb3s*6@MAthT11(>t8BAFT=2{dG zH0DZ^*=XAtD=5gcKyZTDuJM@`ru()w}ilz1Chss@D+9PrA2Y9w3>)lEN(zR zE?e)KZMRc0!~Qf5wRW4Lm0Ge5x5I&r(L^bp%v6#b_l))8TG!K+ikP&x_}aIT*dKND ze~txd#Pq+xaGOk;hdFnov<5C1zgp4cS{W9iq9TjUDy(Gi-wulZf!<`wIIbL=TDCnD zy}B5V&NVwNHsAZSVS7}QZrBUCDI^#PS{oG*u}S<>#vZo{uUJc(9$xXsV^0_8ujJI> z8_!^QM){0tnL18Vpy}PJ&Eoh*6FO5~NblLpFrqx$Z*B3!eZrrjr?m}m-CsEoG1PxM zW+1g{!8A>BDO|=T$RgEuKd96Lh{kBK`X`pX!7Qla#T{8>*^ z5vS49;&{85Yu4v|FxtrOynpBKg@ji}AaJ@s#T0Swyp`X6r^HASpdP#I6oUd}Vc zC7(bzFTKid7|4Y7+p?YIxW8Cu*E>VE-xpw@tu1uK=9nZTnjg;{cJ5>{Uu51N*YsVn z$u+9ijU+0K)kqkczFb0E0wu!fcRk1XhR|!pB8_<`kmC#l&l)i*A3xh&A*9!kH0X|p z_n1^EdTOQMv$RA}8Fyb{MN(<&ZOiIMM)7=-W5F_Z#6Xe*O8&ZSM{obA^6OTGB1-inkcTOE1p^f zoRVQ!3_vD?7^A2?&jP8UgrariN~0?|FF$6|^p~;fP&*hp2_@VZ>AD#p!%e{}YJ&c>YA3ueLFSyJG*Fo3SAf;XM4XwMUb+S~FCP8-cOwjZs7+cSP)Yk#_5 zdpCv{g?Nf0oYSVW>1dQ#t=2NX%cQbN7hJd?go@1LK}U<=ExoRaAWN>XwJ}C0-2i+b zdtq=51u^C~_ozAwHQVHJly&;`@9S~N1HT4O3e>*>;Ng$96q*4f@Z-A(whlQ$)rj|< z79-?Io=9UTmQ@DqT=6c={|nW`bdTpusg3f~@2j#X>$P+AeFE0^&~^1SU_6S|rd2czw<21X?* zz=jfD8^0zLYe>v{V9T5r1V}KDgqR|ca8#)Rda*v(0*pyS@YPr$0ZL^jkL7%WVIIuR zTp8i!&3X8Do$xSRxik_meDlj>@zn9Np<@48KP8axP)dkT7s9(|nRT%0hR0PESb=<2 zp?|zpkAkB5wn0uDo#fb=eIiPXUw+2$2n^@kD=JwHWn?z}$?Ov=A}H4TR`3S*z#@m> z<40nU4&4IXezvv7!DfR|V!_0giBok#sVBk8ptPQc?la;%xW1-0g}*vI(W+JvXWow= z>FJUMefb;*eOiMDn0cktbgP97Br4d`VDK@#9j^$<+@@ONDWm$(ie$y!9PuBQeX!Sp z&b=(bPaJ?vgd#xh9@x<21^g*n{}K)%e&F|Q~)6>ol`}Q_$Zs{l}*fIk3!>Ds#1eEb?ud4vx zJAS`Pb^qj%5ItaiMbo?TP_$CoM>_f(@y{++OnllKz&H*JAN0S8RP_e1OD%pT5b*)+ z=cW$O%9f3GvO81Vs5eiQZ;!?C_eDzsa)4y~lzZ;DAMPP|i+`Ovlk^R6KPP0dd_7Va zD#31CHuWKN;?EU;QZC>#PfHK%ig<}&i(P-il**FP{;Fk7SdLvOo;&kFbnfCW$;k&y znoek+QKbLz_9;pfxE>4=mhC}t$6P84EJ9CLmHtm|r)46$K6o!lY)+Ibr0J>6>Shl5 z`=a~eOn&U;q)hNcO=ypn^8CGqP)hJ%<@V-D8nAldaCp8=cBi)aGPAF(mUztO&0mj& z>ru6xfGJHBH01a9p;#!sgiQ3K9F&BGVPj%{NphMOT!`1Tm2v-^_^+erb%6?mxPOe{ zcOm`^gcynVe(vu=EC_`7Vxr36x5wPU+UIZhQ$_w;8+>VyW0Fle8vF7{M$J3Grc7^%}UX{a7=d}9F`QX6Io+Mz3@l% zYnQ1EW%mgEWVH`U+TodjJU@8#$G?e?g45w!*HWt%Iva#m_TmTkp^c;kk%t-wmZ6=C zkIP|Nl?4i+IFPo8Fh9G$WLj0(v*87g1xwly2VNN#(eSX^HNm_xWj;QUe&Qfe(xKYV zpIP(+n_!9gH%tvDe-W6UQOMF|uomyli?8FHyiKq!y$0NV$XwfIPhbqW4whddzq>0q z^PzAp#ns-F@Ym+@X+HC~+kCNzsjNW5CbQzZlSBfcy3^;^m`Ai=6%$$sxZOnubjBEk zN%db_qk1GZXhC?CXs?6Wl@uRD)z&Xq!3RK2(Bc;AZ?H{e^PjEijvFutCEoDUq|=0*N#GTs_` zvG;NF=;@)Y2l#Kzn64%mI&4#FG9@|tZPjX36nY{)0BMTpr+1q^{zXUzvd>?&3~Phx z=8h3Fc8xt+8n$_wEOh7Z1y&pF?Y;rE2#SE&M%OddfBwpVDk5?cJ6G@dbnl>r@{uS&L+e5W!HoG+L4@`Ib% z%GbKSf3c|;P59KJCX6Q3cQ>Lfi{QslbHl?=yAenWGPvu82y;l&z4N;=|7MW{<9-Xa z>@)~k*sVK0lYurpBZho_(BVA>O7B8BXDfkbjagx;JszS?b&b3NC2^*gI~9e`2Ne6@ zwP=0ZYtNN`XoCVUUeLTbMK@-44sJF)!Edyz*r~M^mDe5_h`9eLjNl6ao?C-oI$ban z92o;F;KdCOmNNXCZ3Fp;$W@>rc7YLe5d$z8{%b{h2TScy;?6&R=#(Khgo7^EXf5N+ zm@uBrZ_=DI?Bjm$*beltQABAxe-GgU<%Xc@Fcz1H3?g$~3zjh6Lvl{|k}0{t_TG^o zk5{0-O9s`hJP36}0XJNdX5cw|_(6}Bo(E-m+@L;l&T%PpSXMAOYz&n6y47EwfcEnh zP#TFRy)&Ghg`N)@J6XE~L1~ID;kb`6s0Reqc`p}Y$3eez*XQaV`f>Vg8FIAvyOC!0 zh7`2xnYy<3rckE|q{bD}Xpui&XqX4ZDvSTACenCOQao#KBkYnG zo&Kqf4X}UeM@a|B!<%5?{g8vAq?t~@&jWo}+5d;DuZ*g)YqzE)L`nsuK|-Y)=|*Xh z?(Xgm=|<@e0g>)*=}zhH?v8J5p65O9IiF+ya13DIvDUhB&UsA&#IunJ4fGKp3-cdI zIHx|`14aeGhlf?7N2jCKXJje&;@Avn(d7U$m}B>ia%Fol-ZJ602>o2?N3`FC5s5!bpo z+m`0NKZ8*HFSl<&UkVR6IZEE^p5Y8Z2rN$xU}$CkI>2hBjx+*rY8E|rY4qb2Kx4)f zyJhz!eYSH4FmY^)Sc;b$f5~iPNXVwm;MxghA1Lz8%JxlW&(#YKJry;Tu8--$n@=(p z2UDw$cmxc2j^CDKrE}_T)gd!C0k^eEL}vQyUxyGzPH#Av41r;y0g&I;NY*8|IdDwu zb5k5FU50xfnGvt=@cy! z1U;|&##xt!Q-xyj!Xe?s0l)b3H|72DXpM%Ki`;JVU95d7)9HU@hY1Yqgy9nfz;=K4 z;z!Kaf4vg|Ci`hWQ;^y0>B^$y&nK-$eK=ge(qPz(iXY`B(D&Z#Gj-AX?W7s`sl!x@&s^fzqsjZ&>HOY z(vmiUt%_y8$+&yWvQV7V$?M48=C*u}T|{)bxeO~hcXfpdWOd!+w3|^ch#LEiNS7BH zU4}I2n|044-e+Hua3I&|h8AV>$w8v`4(+n<|1lMOFaULVl+OPxzVRBupjGMjx1Y1_ zng{K+E<#soO;aSVMYmJQwwdv_21B2XHT>-WGyD$VImJ0jv6~q26nYJR)7&J>;bH<^ z2mALBfF!g7?T@1I10*lXrizlj>eJP<>F&m%g(OpW^;WnR_uDgqDa)mNCTzm+aQ8BP zx>pzaVg$N&H1KaU!Mi<4|2;YW2NGIJi-kv|C8^Pj@_VLljXu46b$Hv$%uudow6zsEJT^0H%Z<~Dh{ zU|YEAA!MgR0LUyI0{C~~%wBXOWcv67MXJK`!H*D#dpzey1(G6)0NVAdnbKy7td6X1 z^TJ!uU{wb+8gm-+SU19Zg0er6_KHr6GktW)&vu)FQ8!}ShtAYokkCC-{ryd)lED)wcX$B4zClQT8m}k7yc?fv{?%}$ ziG@&XR*jdzAC(QSP0;~TL$gv+>#cEbqjos z64!~<=NGaQov@)~aI1deyFZRACtbha)qonmUCc^U*@65`amv1MKGpqvx~JIw&f;sF zVwqIDg#t*@At}TsK1B$Q@THL~bk^c)?xRDOzX3dFBy}bzNz&st*>vvjUb_SMuw}lI zP%e<&Fb?*xRfRBk4Ey7w2%itqgcTPzoP5^iNuXhTuYJ)ly_ys5>Tz?bId>wa(zr7$ z&xr+9?PuHsoTr4=at#LWzh@J4`9+#T{>YcLNsRX=8^#bVREkGfFgtVr-vQiP!dh*K z6kc6yh`W?91I&WvlLK_e^NrCR?YQoDusNGC$z;f!1eg}e+ zI}jd-=Q3E*^qSiPv1+}W{KBdklSZHh0KljpP=u}lDPl`5?dGe>CFkPx;8dyZ^=G3L zMl$QsPm~O}vtZ-J_R-z-3XK7{zI*yp4~}=-H<*HQQYP z$oap4A#;G&h@~xl?m;1W>socwIgNp0_`F3)E5dUDAb9X0#N*^g8jyDYYBJg1*ziEW zp9TW2yc{lx!Fa<5?_;1$BL9UaUyo>Oz=9-(#2Pqd`Wu%X@;Egh*Al_|;FR+_2L_m1 z%!K}T1Gm9|E9-eWNxtEklbfiB`gof5s7KR#%9;cC+#HP~y?BRZowQ7wgAE>YX+-YJ zBOIq21zdXTXw8>ovYW?aosKyt4bbru&Uo~mWb+AywM8(<%n;ssJK>uTPwM2uRxm;o zaIAwa6IRc1HsAkgulo}Vv7R@IrGT3;jMWFV4aCh$0u}XS>+|GtJsxitA#@REdMDr| zLT`BPCj-)>hk(DKkV=kcEd%I71?LD^ZQCKvL#`8Gtp@;u{~J=a=V{WS5Zpslgqt2X z8jV0WW(o!V;V6K2uNmm}++Ie6C4-Qpq16d!;n2<*DC%QMGj_ZzUGL5o6|U1&P371e zs6E}Jt-bpGSUuQGzr$aDX1Cj3tfz$=My{rCFs!e%C zf3shp6*RfIE&>rS0#$Agz<0p3&51P!(ma&ORsszfjsPK<)d%tT+?&a^I%OZ~0zt4w zuL0Bl%YbwZA~a(zsVD4#>^0p6LV_5F)}$X_K9a}FB)(X<`s^m|UQrSlmt+QFAhO)vNKrp^2 zC?5=tyUeK?*>(Zp+F@xIp-|PkA6?cE`5}nbQS(&?-Ifb^+Hw~NXQ8!c4S7y+J2^IC zmH=$sq_CO?&%8pGYpd@)UDNreS&1NKq}L?YF2+YD;4F2#R+TaM6Nn*eGy2m{x)U=v z&AJnJFRp0|l(gd`;}yxH+B1_Zo16jfLB%k|KGTi+A^gopM)*cM7)Jx_F^x2bk;Y~n z{Hro?n%UgT6%Zh1NY^moN$gs18<>v1`z(D8DemjR48o|F!J61Ur8jjNEnC&Ql1a`X zock4HktBj&P=Lk}U)m0^F|FeR(_3t>fDb-`PzL$2 zD8;~BaLe(Hi8la|n4F2(&p!ja!Rn=rkx4S-jC|aP*CkE!;!;>+(8By0PayolR_@0Y zplz_)ZOx8Rl(bu$%zd>Wt!!jQ(MCFW!lMUZ47d@BWwc3AiiE zG_>|*oQST94{zh!qF*3;Ag}OxKIB`rJRaFjY-E#x&N?Zt9ID2?!tG!AoQp}qdrY&V zcXG4l;`Y!UT-TKa8aYhjh69Nmb_!p2MpZ&q$;Nf{}j!k34Q^B{OPWauKyJj%Zn$8nn5HN)f#hJ*ODj@Ny|c&=VaD@H0$ z85Y1U|Kh&MwvkxoG@q%UEhfKobjp>Avz$bA&`2*Dp_|AGh?U;lohDWl%Sz8f+cpcZ ziug-!e=X8nF=81(gaMi>>X7Pl?{4SQkxG=;ippFxS_{QxO02A$RQ0|=5gP8J*Cp*o zz=z+z+PrzhvO+^<_VxOq#qvkH1oO!uqLL4LZ&hdPSOQEVAGD8#35!FU`E&1ZsU?wL zdT)*-I^JaPO!9-$EDb2LSZYJ63m}rv1N%hMp{2m$2jb6k$35TDuN*7OgvGAUouuZ0 z7RkMweQ7o;sE~T0%ytzxR^8~ep10WAy z2dQCmR?f#gU1k*-T;`y()PNi_P($IPH`(4=p&0ioSW(Ge{`1Y`H<$WyFO47}u{)Xg zKdCk3teyo-A+UzGc;gX>>FcmkV{)I+TaA+lHycyitx_ptfoJ&vo+U+VzToL1V~F4) z0~uwR+2~@h8FY1*nNB$DZ6g+@`1M&Y_CDTtj45qd`;qxX01^fekw|_*~hfl$K z#1tIKj@Shp7KS$_LDm zz|liWo1@=hKxqb)j-(34nda6BeJA(A2QbabIbjY11M1yGEo4BeLoHqU+uxy`f69_F zXdpUs`Bf(g|61NFo!KDsvm65!>}fMI_e7>eNg0cr9MNKUU23s??N*CAcQ;`^at*s(X*b53Px^cYR=! zU4wAC&r!l00_S`xkb<2GSBJ4H0tjT^j75an-Uj++$^U78OZt{#F03CEW${_;^xzt! z+83EO5-JFqA>c{y!lC9MFC1bN3#m$gl+(yw&kxF>6wc~bvzAG(jI_La>Eo|ryIFOX zULq-4LaR5u#Nk}thaUP_uA7lxy!!?8cpJfn*+wfxeM-B!QE*^4h3|^^$dG>W#d&De zIbRb6fm=yDJNqt1mP}^5A}+1(>i?*El7d@8+6Cq`46lH)AI$?=%Tu^c^Iq%uT;{U{ z1GXT(os%$7al{PYiAWiiV%j?~f7acBTu}lpheG6*R0Nj0qRNZG%9O}cbrBy11F5+D z>|^nHq7;$k*N?Mf;stmKq0tl!t37`a=or@2Et}?f@k8$N!JoYa)eRwS&_e_MY#lDt zTNR>jN%7JNsN>Mpu6>7)b9WiCW(pr7if&}1r$OX7Lt_RB;Q755Xr>I33LvH-oez^3 zfsjE*D2-zb^$Yw83RD`J@Dyz6&l@KR8PBZny(R zn)`elaFIJjuEpy@st-26ot#68{fF_hz@UH(2^m^<2^o{=<(9KI=zc7MWHgWPXV0g9 zhHMZ3v8e;7#QcBGwM+|6jqkGw3YOXy2)hoL*m1odCQmbcu)q>ljh)Dw`hM0_dkiE?XIGFl)ut3oal% zP+R^2kv#C;fppamR>4Md!X{{jSOjFzdS$&m-`Ocn`>l=py874HR@8POkFX`z+_Wuj ziYTwC)89at&@n;G*V755qhGKfi$w!-@ef;2MP(_|m2T(wLM{MQpd}&{+mS1xTQVg;~N=bRoM zD6s)sI1*C1c2+8ghCwB>n!TER^OH8Tl}D=`7VjscLY6Sx>vsr*K%%lL|F>|USq_Xk zZOiHsp2aOKFa);fZ0w~pB5CLq6s2l*&iS-w*(<_?fWP}o`mQOJ&U|2 zwCDejxRC)s(pHA;vwVT*2P7QW>d}#^LT);Gx2q$NF;G{Ie*uLh@n(;En^&X(Zn0nd zzt?6zt>erqt2wcHq1Q6$_V7-tvVts4BRgX<>xx*cSCOMNyf!@`T*LPR zYt3C((q*4HzN7cs^`qj(J*RO5jYHO&t8Z-TbV~c zovB?&CNNl9mHlMaQZVTe4qm2x_%~>Sg1lxc^a7u!U;P2L4_l9SS>ity@Fi$IVAsb( z&No=@3}6`kXYvKJAFvs6_!J+WCJ=x+P3Qk^XN7_1~)mS~`LwSW%oKSnha zTyel@yrBH)ONW4QyS!s4LHOs2)R|s~&>BMYAs{|6hxvAc`i9A@{|LH0POae)ln5v! z)0mIfgTQ|LWo|D1ZWtftPs>+3P;PBiao)fcaR)k85Hf$2mtm-98S|J=jN ztqL#hmJ|v*Sg=UVFmw$MZRe{GTy9H&ctp+GlXJ?YR{sqaM5j@so6cd|pSwY_jYpEv@GLEMUy$Y1W+iqn-2Wz%-l0-srN`da_8Bi#lo-uTP z!ZqwcAGpX>gZk7ZkLzI?;k9nC2ek8^pXl{$we+I*J;F{F-#d8!=eS>b9j2+^-zaN= zDguNo4NB^sKv6`2Cs_K$HFfrLa=coSNl=2QgUl(J{WTv2Lqk(Cx)fvlh*!SoWWSM5 zgQ~sy6gJjLX#pC)ICUx9tSd0}hoCqy=ift;CebUySUnD4FvE#pxeJ}=%qu~gnBFLe zKmWP1pQz_w4Uc6mrAuyCOSb)~`KO&x;RS)DfFs;z1kpq|2Zt|P60d%D@oy*@ERHo0Jw9kx@$%l1zR z(gjAsyaP^g#zlPaV9L<0UaA+vvsUnR zpS1p|M%ACBHHY07ezcpgm?^D)YN8t9dYe~G0|8#Q<`*1m)uG;~APY+b9?n#!EE3SA zzIgSdIjfT4;m#~NvvV46?>rqTX9#WFyly+ER?Vh+NdE?qRaO3@An69bLt3)3^vd?| zmOP-VVru&5_K%%1akk$rkA{a5=>@-w8l?GOF$TT-7Tinx1|41>J(<6QqZ4TpdMxoz zLHK?4*t~&$Hm8G5layh0J(FGa_4i*4(3|XkrvE^d{8l?%ck@tM0l5 z5*Ft>sF#hmo_+R!kY_tIz3E7F^x$|{9)TF>h4?n91#}z)YsC{1^~gr{g!$k`(IcUx zV1?yLiD3#!tnAWcJ(+gu@WO9DDi@o~ObpAXS-8{U*kqh@Se`db+7-EiKM?{SVj5_e zRB4X&m(4;PEL1bazlmW;Bb8uAIxvIaGlD|A5Z6LlCJ9s>CJ*pPoGsCX}1%kiqs0XS|)^y%C9-~?cRn(EGM^X{8ba~V;;EqK2V3Zc&FwniZ zu;LqaSe;XcaPNfMQuAjOvOK1djMsBwifP>J2ZK4B2_@!(yq=!Wza`pPE`B%j9L2m7 zWs)|1xY^Y++`ayMwcGIMSF3m&EdiTFa>@=B0p)sglLnAHeL`||o?)pC;Np!wB zDL30p^|v#)#g;hBcgpN`z57utEr{wCl$5a_w2{BJzMJ|=0@FiI44ph@SeyX%0@!$v z4<9~a%_Ul!->%D|S#UL{6hov;MoV1Nh2hB5E!kePn>-)oV|e1em>$Gq6viF@NX zyWyB)7gCWU%}n1e%jd+T<{>I;32yS3k{BBQ(eN$Ge_v?&C?c`wz-0*D>qR>4p#xOf z;jbetylxk-5p-$}Q#_d3@L(lgVH*kAgFS#Q2=17{jf(LT+=_q~(KBlX{b~a1a!Lg& zy->(AL}Nfl*s>ZHWP7o4t8FPqnkFvebW~wG3|VD#$v=YYGmwDm|9D2iBt#qzHzh)< zV9+s;s?-|A0DeX)Lkp*NUq<`at+@&Mi*=6HoA?Y#k1TIVOl(8DFjDYy6># z;z_t0$A~zna29G@%BNQlNdOH;iORic8#Pfp-Hjmra=0a)KjSTHJo!hkrC%m^!C6Il zo3dk2QNr9Y21<{YK7M^q=~E{Ev?rHN;migKA7eCrlh>p|ha@Xq(5dH9Uvm+rfP?um z8T@T4hA9+ey^g0z1@Ks7&#^ysK5Y&R`pe?`n1j+`a_?2#5;uktm<;g~V&-4}`-;3U zRYJcj9J*TlM=^)Do*on$ZtmXHmVrU7&3Sr96V0)#W(#vBD+4S_Fdx`Oh>q}nP{xC|hLN-Ie%C4Yi!Dr}gE zb)8>(FTp0EfsWwQsPNFnaQMx4`TaD3TJ3vNw)?>wb;y^Th_`6u*5M3VZgQL%WX5@# z(mxNNcL96s-gZm08nT!u;1Jn3e<_oL`z+nUVzn(91rND*IP4C_B%gYMl+(lYa!LRW{qS{ap7 zYl`Dr^Hh;JXT7`FA<4@HjfV@}aw2o1u}IZ459|-#7%jm*4#e*R`GhfLFbjg+3KFCL zd&K?(^5Hy6&<4#><5@2S(h*n_?p*%ZPwQ7^*qoO?JeaHeQ53%CzSa|v`du~6AuhYE ztSmEKRq)GYFy9?gH|#&hhnNWFY_)SlYqu zWO)be*&&ppJT5&+7&&SNvN9juD+0 zzfRL!SEms8x4&%ThDOtSQ*b)6=G0ABna{>Gon@OH^bY$Mm6bM_&sL>yI=;A7F4OA)p>=yAb>B05 zs}|5_OVVGxV^yuSSqF0r^xPe`N7q4KMgWQxtbz^To0$v;*Ki4ddJhn7O`b2anE$wT z=8uX85?)Z$J{u7QKo92JiHQj;3W=@h@?6c{vLlcPr)L^B0Q%UNV60=FGA;&HauvSA zQb}qGUbBs@!r(hHVn$%U(tW|65l7S%4B?wYO7~DLm)C8|F`P-lF@wo4M^bKbQQ(zI z2V+f&kRTc~W^nW{#y}ryK~NlJf2Q&lXj}Vrn_Y;&#pG$KtQg~SyPN?zqPS&RwP^?( zhs|;!xe7J0N-kFlWaJJr`P%yC=KDZ$XrjabOuML+bO!h&!(?lJM?a?5BU`!J-nlYz za{oYDa>*mTazOkQ3F~d}u-u;^IuHB?F$_Fu3k(g?Qt~t=*B#Is zX0yL7Qco*PQLVGv1|r57OvZScV3@?O^@=!^uRVd!nLpQ|P|xw$vE_+Y0%u+2F*0%4LxdhjJC*xLC1?KDyEBr&(T-5H~Ul z3RTf*BFLH#CvoInWD>pW<7Hw>DtT`D(OWX}%fZWv4kn91mn;zj&US|Gx{+e0Jbv_L zEEiiEz%;;sK#LY#3ApMQK4OcI^c4eXXKvkOv%WaGp;3d&?d+<}Y6BDfT~nEP<-`E& z(s!ada&0x|8`&2So#mej{w#=MuW15UXx@_%B$*Qh4NI91)u{=jH!hGRH0I<9Trv9m zvP8L~FiBB-j)Kjab1JO33Y4sf_q^k%F|>IhkbQnX?qAd}%9y__RNc2r`dsV|_-`o} zoqhJB${J(`p6m+iR+x-V@#gV|=o^i%?%-o$no<+9}KOI8_?p(REwvf^} zz_}EBNdED9Cd_Gfv6(l9fYZTlk)m}1(zVwchN%Bf{FaaE9hXy(%msHp;KJG78O6wR zVbDQSZMQo)U!g()M7jRsLD5pU{+kR;oAXcGWY#Y2fG8om%h>#AhT zPfv1jU3m{kQL*W{3#Kdsovv*5Sv%rV#B*wYdkYzm&Rsi>K2TpyL_5I%^gbqKS z&6#2)D6w&p2QJS$7z8(J3=v5n0-xddv1)kP5TA(Ua^G}mm`cg8_kG3PCM zBstu;@!c2`dx4X-u@5Gu_#7}lj26VmbAM1sGERqRtXQ7S^NR zGu~GYl~9zIEY?_)g)uCFDIV4JOH4LvVrc%GrdGrJ&zu8l;znAE)RClKm{%EO2sMKQ zw5DT`$BFl)%;80c*8OQ-Zt5G26Pv?@Mslwdk?$xh=BBhn9)3vU*gQ@TG4RE26Z|)5 zAx92`3;5~VuOXhF$`Yo4j)2FlW&pZX&_w?+T@aC81SRSQk>5{;Wb{?>He~h&Nj)75 zMT8K5P~vws0y~F$b2cVTxfeS)oz`=P_huU+6mCRTq+WjkWI`+lw%$%M78}St^i-s< z)kos!TST?zRg+O$2M7?RnO`2v7ecQ|-rEG1q2A^${5|kD;f;>V%UVWK^L$B@lCy~BLaBW!fdDkBVU1usG znyQ5K#pf_Mh&;!`2nUTfJHXHOuS4c%a1CiE0VTvvxRQO}wK%>V-@LcE6(1JB)E5KT zSZt~c!&z66<=NA=(!(Z;=Fi@TunQX{BI`D9m+GOV&DCrpABS#eTz#-l7Asvqc>IeP zq!X{s=viJtcB~Nr^x8AV&KOGE2t-3+nT$^Y1IFLtbxKeEg1JC4Z`QRsj_Y~n#LifB zZUIbGmwX3w(iL}uU-d0tlw>dzaAsTU{eh^>lm(y_Y!X_mOC*|HWcMm`t zC^+@>HJ~gdCDip#;r&84gt@Q3v>h=`B3U=s|BfmSiT!HlXZO@~(Qw7_6t@Se6k&l0 zV+1R$mV+i`0LgCn`VedAqGw6lf}mDGG4XkZ&xu~jJ`h&p+)eDLcDhJ>gCM^eCnL8O zmB^?c{FhmkPlu$0Y``jb0Z7z8}AJtrk; zmaidUY=V%}E~b6|Lp?@NWHXvW{Xr7_p6c{3V^zD!NqF}v4UGB5G|2umhozh$`Az`#?NX8jRH_qGtL^wT$$vp%eZ7PmI zwi8MEIJE8Ln+a8@k)J$S91qlflr<1RRQa8lf7xB$yuf8#%Z}4PZbrycXStOkIgfqL z68g#`jHzNg8wV3n_%I$?ccrQ@MZYDHvG|x~As#xcNXs3#=l3zdf@Sk44~WBk{-iYp z-9CtW*WqA(sn?4;>WVno(0I4sWxzW#oRbk9OYXEsuY=q8<~!d+jSLbz0_U92#W(W3 z$ya60bcJbR0ot3>akw+>Mzta7$_=fW*S(4*sK)#L`ac49eX*qI-9hJ!*(Yr~Y)`Vv z3wJ%J2&K?O0qR@$)ap@eavu+h3vm>qLlcm#jasm(RzYPRe#{9|CJ#ZITcc9+ZV@77 z+t__cMwU0i-XSez#Yk}vRD-KUBPe6<6NXQH$xlD~Q5m7gQQF*sNSayqMnPRu)nD7pQjeW4TDZBYwKtAxj@cL}PV4De3D%s)XS6m|6kt8H7JI*BD zY*vFlBJ7rFvE6Y(6}k2{!`KIZPP`FSF@&Ufj=kB_QGc4iG9v5*2$o6JRUps#UF5Y! z!vKgGzfSpQnA?#?w%^dds-lCDmelJghjaqk@SL;wJ&Yr6HZak;v&N8G2tf_8a?=z@ zLq;4w`0%-}Ilgt_-IH67$2y`i+6z^ESyAscKxeMQzQLuR3XZ`bNH1(fa`8ZMVib$- z4D(cNB4=kI;d0zOKT9?@QR;E?r{!ctKJJuhI-He@iC?jOW3S9XhxtGWt>O_}CP`GW z@hP4@j?b_Twe@CsrQQTXzUnkWkP9nZRc|cv((`X3w0_9VdGp`mXF#N3!p0~k#1isD zwlC1uHHNQBZ!rZ?a%!AZUIR;rnbqb1l!Y5XzBpeg9-!^@QDen0&7IY*DhZbcvt?@g zV8u!_8!o+nQ7{bp8$l>W<6^4xJqRNEOdwuML&)oZabAx2XEK1I4Pb`IwE)#AyCSKfqZ3% z1+!%bRmROon|D3o(mZPS%S-nNhqL;cdPm{vVL_f}?--%~Qih6S=2+PYDgF`&@*BuK7;?N6ML2kk7t`9R;h?##^G0dLdctHjImrnjN<{S2YcVX@iHUk39`Rwpblx}X+Kh5N#mNkexJ~%D5*2BWoW^AS$ zg|$tid@@m5GjkqyI{QH>&3b&;I>q+@bYTTdn41;-%E*q4U!J}EF3{D56ngtttx0aP znm9~zx;3s9gauN3FjKO?p_0n*!5C?|EXqez+)&$FL3hdheFrz!)&1(HI@P-#7Qd+y zPAk?jq1dCZoQ+F9D0g3`$YEk4CL#qtL^Erb@AbuRPRHC8jlZcMA9Xp5lohMpGl_i~ zgW>UtVw_&T_!EuqZh$gI%1ld2T9mjGyJ!RS)lTZ;IE4)QNke8kJT)VA=q>xmzeGZO-c-SPOo!3 zI64&XKxaw$jFXO{%@L~sk&n`_`;$fEHjXU}t&2Iil|*t&j>r6c{?%r@XNX=ZVnr&j zmbZ1j*?bv0SdL@WF8F#RWHhAyad8ca3?C}h;k-OR!yG?x%seCWL zlZ!VfzfGOqN$L$wu1bwV%$waGMU&D}*q_-tfT?_N-Fv7(oqkE5B+W`wh`NZ*6Mes3 z0vGoeALBYWi}UVxx+U+`66}Fa)CCy(rmOB9sQ8|Gg@wdCW_bjm>`n5rk*iy?Hf*n% zNLcRtUmVe*or(s;_$~ds!u%gPE5F#OTfK?oW<4-P0+pp>N0YS*^$@x5Ey8LT)M?vk5Pi9L z#%)|87^im(lkKnW@^niA;6R5zni}(A87tyzi`+X>XeRXB)2=s)#`071gWFy+3`oo$7k9Z2ScQn`>+^F@HD*i!eDtKyo|GtFeZ*zc`&Ym;+6 zz?C>}9-T~!uupo%yWv3Z?O^bp{*uii%~!IfJV8R$MO4Mui4npe3qub$^NIrFD2TCN z9<&Bt;*bwLfYmes!=h0CO!GWkt$HBclJR`GEBa;B5cP9gr(IRWMqG$q5CO&9k^FFH zuYAZs{xIexX?Yex+&k~q1%D4G_$5Jl{HS(najA1zCaQ=f6wNE2#iZJnrq38N6_!yy zA&}-;cr^NVO>;4l4<^1AHScTQF?Fj6zc8Ge*-~9_KT_~WXz4>}JQQNL*M5mY526eEn zJ6=(c8o<9p?kyty8u{lB!tEe;jdoB^Hjy2M>t;>=MyyrOhu?UmCU0=eKN+k7sOcXO zX>QU;E9@*Ab<+`q+CIK2T(n#}AFs7<30$doI;OT&JOAW!~)H2XOG(sPspTvQ5-258)3;>8B{C@)hZ?(=-5BDJ|jB&%zOl9EP79E@WZ}0fBa2N2ZI%!N`E{M)GgKL zFaN!xWeSQ}v6&D>UE{5OA#n9CAcxv3M-?3EGE$lOs+&>mxbv;KU*V~4n@Clny*sQd zy=>556}F6-(X8SXd+?i|hlG~C6#6rLu|4(-?QM*c4j?63xOE#~Bf~`*4E*Ak$}$;# ze|4$$N-jb-a!P&Y8vW3OXxE#J2B6H<%Wz#$MHtb)1PFI`zb~$aS=j_&ZGktXA}{*{ zNrJ`5BI8r+0pF1-Ip7LOa(On4U01fjsRUz9XyJquq1MlHN*;f#^?c`3^A;+LI8#JQ zj-Zq?zgMfptH$Mr%CTV_lM=XrJrCK9bs_{|JS-85oj8laXMZ@#VaeDqt)!eddMtRIV1WL2_^Xq@Jv9nNUzg+8~ zOj{#Iyl$yUiF?Uv{eEP~%?JXIP|42I{L0*u+$iWdvc$sW{)Jo9c7VmqYYqLX>6l=n zz4{W2-n44)h(lf%Zh_5+YDJWl0-Y`M*Q`{#kpq{zrNhEZe6XP36deg%3evKv5yme) zm|u$@{57>}i*x#2ttZQrW4LCWhENlPhKr{I0|l^1S&naVRKgVW#8r1NSbq{QLigu= z_>!F8T`1F{9RwK;xt{AIU z2JBQM%^aWaV>_@#M1uJUk;I@jF>>laV|Yq1J;!`ty}fwJ5n+?g?da|UiUvj^CMM!U zH2gpr1(vrr-C%(LIVqRb;&PW@&r*3dp`Sk+<5&K#nBRhDj=PoIeuHLzX6l)klh-_r z*}MTyrjOFsy`E$l)9zZCluTQz*p+d6`yB$(&Z~61ZD@W!*J;`mz}nd86iRo|rCa*- zoFM+n&19^aR)#iu&ndf+XR z%j$kl8R-Zs8I3oO zgVcV{u;~7HQ<|G@!*&Z7lvV>jNZw0no*^_XhO-ddH~X`q7EU8i#TxHd)s2`5VV|@- z^xBl4U&^oLkKc>V;ZGu zx7Cxd1ufiLr->|P9ZhImvSs2QBGDyX`^TZu$Y#X}H&NDXyMQh5Wl31-@$kt2zb%Le zYH16tzcR}0ByfHTy(Y#;AVByAFdT|6ylRM|^qR0~Z5d#c2KR|qFth04d*iXMhiQ}x zoRO)xd#%zRzw*+gc)=@jokeb8pa!8LTI$3zglcKslp5cJK$#?}67bpmsFwNh-Zz&Q*cYcf!B39_3?Y?ZsU=s)r1ixuzIPS{?}6ZF-||s z`}nS1`_X|~t=ce%pD?$RmuQo~nuj3Ma93T3cze~EMAwuH zJa@BSg=s8{uSI7bDmT(-dG2%#L@jdqWqGN@AE@;KtR~LuKCERCjA}6(S#<vfFS*AjJMDVZg@M={;08O>X5ZWCO2Ea(uFxZ>d5*RS1HDujxB z*>Ym9o0eJi&gs5WoWCci(~woz9pmPhRVpc`X1frwKXfND>kZ9O^C;!L7+_KHywSfo zKYn}UiOOY5v66<#w9)#@;klv;prn<9#*wkS^-sweIgPEHLg~W(^!IXj0W39H?PHU1 zOusZg4w+HDFyzTV-H1UoWsGi(K`rej%W3atHN;_Ph-Q^^oZ?&miGer?E3JLtuoKl2 zoBN)PBIB&G#BkQ~(+(S3YMnUT`)|NO>2rw=2*BwGY4!M%Q*Q-F@iPklgG^X}6F?1J zVe#Jij8jb$H9CFx%B(I9SG6o(=H`p>ZrJL8;3Nc80daEB%fC(kixfcjHbW$KydDyW zb~FrFAp2JPH<}*4NJVi=8<`>~s$OBbT9tQJX-aB;i(x3a_ZaWHtTG&?I3EmqX@mwA z_J4r_P8eb_ty`+mg~nQnZ3$tW>*BB{>~&-8VCb-0aS=cleB}alo?y>EiRu5v1Vm#& zW7pOAV3gj8wnmpo!b;P@M_5($!kc3Ir!GsYdc;Eanb?7vu^2n}TVGFTX7~Tzcpw3^ zg0Vy7nP=&Li$b^hXgNgO* zEYrU5yO=R@63_41T)}Eq)r+fu{qNzBLi-X3#t8h7A^-i)rA;#?Ohl1S%+AzdRVjLsX%+A1Ey8(pV;4|TKlKHsb3o-ss&mafWc~`r!g)=lsBFSd3}1)e9GzNhS{;C zk?fFiwy8sL#~=PrqrONicR-1ddg;gu_Qe#a2z@csR8+h??jpL}n=S|4wLHbV<()eF z-M!HkZ`iRa<0>1VUcu>j@KZV91;Ne5K9KatWHB-_0zw|%B%rUaD2EjFG+;Zz#~=mT6*5jM&&D~ z@&Gx5oU%wI03GN)DauLA$Syx7t^`O0fO?LSnk?2FiUxzp7J)agMKXslZk3aO%7;7P z$wgg|^Qza{WUEePi^l)W5jF#4#k@&T^TQ3mRro5(7k!1vS14Q=Qkj{S&oE zzdt{{2MKUmnTXV1dH=+!Fb5h+5u(c<5QVZr6)^{+dC60kD~n2Ko~+YJaYDA$k`U3k}n|?JzgL{{<;1B~+=Y zs@{T;u`CT|fLq?WF$;Q#K+B5kqAX2)3T@2VLYrHkBCvt$YU!J`?J`${TBRI9$6;{$ zbqg$7L6ODA;;|L+5lCq$&C{Yjb3JNrWE{O8td^7Jo=CagxUWKxbpHftaX|DI_TCEO zZbS|Z^TlBbcv+_3U+;i6wI|0^L7@bGbo*&h^HrbvY&Fsy8uiRmFRyG zvFx(B3O3g0UawvpZ2Ot$A*?h)mn<+SkE8!(RFzH#ay2X|Iwi*f*q(F9co^@_K?PSo{$=73*w=%@#QWqIYj);>YR8av znyLRnXBdZ83)EyvPGhOWhwI~k=;J0G-f1I=P^@eB*;c~DxGk?t7)r!x?& z>VmRJ#|38U)^w2x3SlB<^Q4z>W9+SVMWC4$+=W@Xefx`x#(PIkUuXc}^$XN)dXmmw z)@!L?T=AU1D$o&XJy_>YwrWFKh`>gaxhzBOdCPay+-R`U7kNXT0m1Fuy~{zRalJf9 zk@%cg3Esf})cA?5;nZL$EjHG9mkla$zq}8Psl=sIF8h-kepNaydVg~+_)MjduK&~^ zN`TcuqIn%qa$0q_cgA<$r5{N2X~SYNH>~M7&rdKT`xd9@a>YPX z8hPHbR+h<)Th)#6s;5QoekqnYJ0Q4ox8D8M;Y1x3mr-w_!Px=|)ynt}0AjArTqvM9t!I{zjakFB(hBR~DY>Yt`&Pi9GhNthtAlIqH<7_9Aj9^nEWa!eJ zxA}S*%Ap)Q@Owf4MS7UWmC@6XwI$KCU7z&PRfh#$ zInPAvoe-+jtwj5d0!@eT#Z;A+6juOj%9)fqtt@t@ISb4&|55cF1IcXT%dd4(8s%d= zXMR3fDjsbnpMIvU1jx+Zr&-GI%VG6+g&{+e(Ihd5ymHOavQ^6h`a3ClTlPcdO&J5q zvC4A$RuBQGBih;2UX#QVC|6e-Q)k@Edgtq3{931adB#=Gn$`V~DOxlYjK5*H^){fL zC<B{q-5kretye_{7koie>A*^B!L|%!FiPrY7>l;Gu9|r?~CI^hodJMW)GGmb;)6P zvjlx%KqW%w3eDyeQWca`B(-GEma<_egk4B!(lF zD%Dm~5>F@tNE03vgjbWpWB-q?uK=ntecy&7BHc;~NP~cYw19L-Dkv%4-65@XcejFs zbax}tjii)-ba#Bufpyp2|L>bQ!!UYy-zV?BudALcj1+=A&Y)Ceuf>cDb4O8N{PfZ% zK7`DCpr)K6?~Uk-bVc5euS*w8B)+U02fmrm*Y{iT?J z{a^Z;)j47v)*9IwnI85?*viA-C(ncAmQUyaBJ!uANWoZF!&S^gGiN^F(th6tn!-nL zL^~02t&h|LHsuYBjYZ&I{0xAF($cl2gHs#cvgfK)`Bp63aysNrNCtB`_Bw_!klp>6}^)HHBnG-(^L4Z1igh zz<`vlHV?%5ZPWp{8uGn663fi>6e(J-i7OM?ok1#ihS;Ss%MG-CTjr8PP?oq1xM89O zahD(FQ55c7yq!8TLRq8>V! zofe=Q+;vB8GE(W@U9Slp$t1U)ITv8f_`5VA&R5%N{7WE}QbJC8l54Q7Je5;_+L5&} zEStGxmi!YDW2LvI7TDQhZF@4!FXc$gXL^KsNIgm?oRtxS$#(4MZj8h~CY^yWcfv4F z)nr=N=57l4qBf9!@us*V`mMcm2k8fBZ2&}>ml8`|nJ0`Lj$lYAiuSyUp2KdO`32Rq zVXX7u&?+;5FQkf=`9qrEK!zvpAoJv5W#eUjXmom5HDyasRJ(L_Y`!Y?&^!hs&Qsx? z5CS&3y7n%-MM#{;NQ&-b({Bq}u?vhIMlPVH0M>I_g%uuQet;N)`oP%%10sy5^TDD0 zZSNNPL7>J3SsBGEpCJJEhL!6=l*&%7rg$LX!!WiZdr=Ht)Rw z$Y3S!ypBO(DCM#5aC(08va!mwyRk(swCoF7*p>ufmQQ77K$}Jw93;yvFZTu4I2PT` zE1747I^-HJtH&qIu`G#NO_A1<*v=Riz^(fO)EllAqkLG*KTI|?^ob$I#nCDQ z1r6|hQn;gP1e}(d@|Sa=?dVClB8kSSdc03t>gWlbpN^kyeLa$lM`oNd)bBz)rk9!A zVT`PL0~SGkmdXX--5sI@fVC_xqvNvs8&_l#AKh^k+H{(Y=9z_C94nKKJA+z3+f z9PP`)19Bx!@kdnfwYm=!+M2R)BN&tqN~CE}szkizT13LhTIFaPx@9JF7OPraSCGwj zVaa;rQs6|OkPdFhkpB8Eb*CQYua5YrK?n|`D~C?B7)8N#ON+`?1J`dB-AqYn3}81N z>-<8hu!Nd*cEFzXEn!O1r17Zs#)ZpqPI}cZDz8r%J``h_DE~&FKZ$F2F<6;CnH#e< z4@1nQV(ZRIxwl0(k@9f&Gn_yczwaK4ldj|9@2FNkyP!Xeoo>W5hc?oH&7*;X_2$QY zpL>Sm`GS%QAmUn%e(!y ze(O^QOgRYsj{AgD_j#9rN7BrhNMAuq$#?u1da20NsV z{{SOtiLv9c=~W6wdpkvdI;Ag6RbXC zW0+T-Ky+l}?=s2HiKgP3kyYpHV2NFHjF|<(Fu`BBaW2F60?;QqRnf+TbM7^n0K# z*f{WpyiL$xgFYUDUdp08R&wQ+pY-HEgDe#+bES0oC*pi@G~Kq)<51+-y9L54K5L!t z_*J!|qpjG;Tj{g$<_U}yy~qRxXSL)%F1k^)G(ktX3!2`b0NL!zgx627INUv@eC^}go7}@^Q+1N?&1B?ksVRe z&8~Uz%6Zx=m;T9zPOr2|v${CJg)-FNOEgu=sbtd7Uqbe&hb`nnp|>FU{)sNgrGnjP z5#hrAK8RI7KcpIPOR#;o5{KkBrV_u$rY^K}-Y-4794vp7=G#|{@fP-g)tO!vHBryc zPqcP#w}VqAu~&Ztr1Nm|I8l__x^ov54kc659dOXKR5pG0>b7du>x3#P=rJDl%1Aa| z{CqNj*0u6Jb&NMmOQ-83Ql2+{41Rv45HVX|BVH_uB`^sy8^;6miCemS=6j<8D|N@T z$h?(YMw4VFx`K^#Izje()dWj};m)M*FE&C@iNk znsG#^XP8n-9NkbWw7}woLOOOFyBLb7DB9B+D@n*VpQ|}Fi`d>>x8qo<5{(*MpDGR; z9XK9UHX4NIvm9}R7@EyNb!xL(<3$J)eoVE}qOsH<_x5Rui|8%)v5Sd$BhK!VE*bQ7m_(q;(=U@s*xq7ybzp#U3YV~SiWm3enPo4fw{D$ z=p^5S;X_F@NeGHm9>MMvOdxYc^uGlNnhl>?CU>Mirr^3S;mkdZpDp!TRe0dp25mgt z_&DAMbpXUPJA&}j$I)_po`-q7zSB(ErWMGti&ZAYX|k%Q#mpp_ovAyq6XVr{U^GJ2 zAfWKL+o~R$r}e^71Zhv;6~H1bZrdfp%!iFO{cHq^UU&RNNXN9;F5M?%IR4StI3arq$7 zky^K@ocjTmG=@Z_{$~1Dx0mxs#xeF{URy849{xOv9 z@v@D`3nf0tbV7dy0y+TPq0URV~%;s+yz^W{Qj5i*Fd{#$D!IoPL3 zyiwx`)kFKWbskr3_wYm^Hi!~2&D$%-Sq!8s5+8&E=nH)Eq6Sw0bb@}IWc=$a0QGPM zKb41ANR_f!6S}~3W6~?q z4SY5`fLo{Zy);u>)Nc=QJkVzn?|3HgNy92+sD{#ajB6!nQD{j{Q+SJvTw#^i_R-qI z1vpVBvI3>v?iX+KzG?(;M5EJj^mGJ$#cB_n{EGa7;%T4m5-azZH)R+0_+yFuFC<>P z4H^kf8>}g+`Y%$7{3gX*e4dwY+9#y%rgf>E>^?M)B-|?2T^k?gA@6e{ntuPCDjN4u za;Ii$!eJ1P=;Ms|O&s#mc3B*b0to?$?Q77FFJf6s>kdyQz}k1ZVDrY|G`SSd$yB2A{KjmiuA!+LUYLhXrh=^qT zWyaZVnD=R3J4BMHO=yo>ky`sj9mzjY+Q>`J_#ucdL`fFODsB`VbR4D!8;?`Ki?-bY zA0er{`eZQ3P*dAnC|qKZ&-Dz$DUel!QTsktw=;i4ad&vWeEAEI%+~!x+Fbue=r)_( zm9>!l`Cgl)E{?U8NQBqK=Bjajr74@eu(Pu%S7YaGLYo!unf;eqC9CdIOaL!`j)S_5m)4G3th+_M=v~aYa)j#cITuFk8?^S6?y%9V{Br+U*t>2Yn3A?p0`1VKmksSQYn!Y1th%34 zx|sHvoNLesSUabRd?L+)_cGjmMIOkcSH=@0)o>aOzT}v;yz^Z5tpt{OcS;9}^qr?Z zl4VP=j7X`P8*-OJFvv5z-Lx_QZ>V8Xfy8-V37sgsAb_f*|_rIa8Qi-$_JwTYyrEX zL+WYkTQx||T`&2HaT=F$vPw;@D$aNg%xn#+z@p-@6zJ>4Oc4t- zb-C6Nh&z=JkhzDj()bRy%gPvDgU;tL49MPJ7f((BWH6aF{4PVqAMUk|k}#@Ol9sEp zc~f~9w_N+IJg8oUl;jAU7K@)z)&|%LEMX{YoCUvYLw`1bvEH5VdOCEg-ZZ!M!RW`Q zr_Eg~FE>6lJrFb6r>=EkohvmQBuk2{di7Q*3oXEre9nHM&A&~ubPMT90YnER@nxVei0Kwc;b6^0EG0N3&4i zDu(mxpuT#qc^(GygD7+eef{+Vki}y0>~Q~lI@5$~bQLn!>8#9mQB_QCNMj>)ZlM*? zY_vrtw*_}n+V9IL2=~h(Gvo0V%R$K?i!FJ^Gc>yIv?D)U)q}R zAiB}vtQWJiaX)$cVpZ(N#J|5aR!e z*_L82LmWPI{6#O%tOfJqn?AWU`H`+uSBriFgAq24!GzGVzPRC))UL=~(zTH*RB31A zT2}9r6>-9ip1BCUd=}ZKE{7g*YibZx?hYWQ<}a(;Vw| z?2~V@ZrXsYy0S4@tHjirctR=B!JYUzVqWwuC@0BAfn2P&3Y&(9U$&K#Uo-A+6Fg_& z+&g+hJlEwoo#2ho7T#2X+MN=2J|Xkeij`S{J)NxNWh1FpydL{whSDhJFOz1p%ci0h zMya!WA94@a^J!Vjv)Rh~QPyHR;x~mc_7Kl01{EC>s--rpe0FrUMCv&X=SrL$ni4Tf zgv3neg5gue^?c-$c3fCk2PiT9Ff`d<3H^6x+tyAKDM}hhht#27`!|X-wx(|`ThLf9 z=@+--Ti8e8_H62K!_1lT&$*W$CeDKy$~P6npq{rM$OneN41z=-KOf@3)@0%q_n7U* zWcvCeUbK3LW#0YqzWx=MHOU(bJuL&V$btXs>_ZN-Je?T%6%M4i&ab+baW=)q{G-z# z;ALw1^eBwisgt~NRRP$w-#{)k^5THa0h0#D^VDS7wPZ2U>{&&h>NEGReVccjQHg9i zm8_|foxUqyZ;xs`FjhDOXa^uqDM$M^;)TQZ%gvP8tC?d?XEO_@skau*lf33y7p=&X zmKGlsmO1tLKf=dg6+~@&FF%4fLD%x09~6IsR8SLCZke5I5BKlY{Cs;f>D(qj4yt7* z^a>dhE6mOg0GI~EvSwDW2ek!J$etVz>YLFMeiFuxkB?X88wZ}vRMbW-mr!O5-kQE*5#a)5RTC14KsxMylBKiEyZ`^CTRH`V~5kgrb7kE zaJbdGB3x}4kwY(Gkh})g2uU1N z0()4F{vq7__{E#18)F>0bkbYlMIL|jeExb-2T#FsK!m)|Q#h>*hy%%PjgNm6X1qdh zq2na{7;+kiS79v?LiG;Oi=DctT_m;*3l#*mAQ%J3EvPA2bf}bz6Z`DBaONpXo|flb%6fd!H1RP{;7RZicCotzj|n@WDSX32tJwD!q3Zx5k%$C#-l9KDK({sJco zvxw24uX{~z@$xAMb(fHXdUpFzDfmGCaD<(wlyAZ{k4kgIBgdI;r{hG4(eeC=N@LNX zYh&qNa{jYQpG%iIr`L{?8P+uKbPg>v0`=27z;`F0Wfye zRJ$L$fi{|N-E=?4@IFHEsgT6LS++DCEk#g(z(UfYrj+hRk5hNRn4D&FoKw2$u>aOy zk!l9m@tC;qCuS3Ql1~y9wi9OSYmc_3^0(XYDV^V{s?wFZ^B6`wnZy<0YL^ZoZ7>03W4aOd`Gip>=P0TuPx}G&X#b~{( zIezZa*t$}Xl*me&PzW@IBoL*QQE`)j{DO#8@G`3xY-YDhtcK_qqQ`CcQ+1?wisSkI z*06bJu5{j;db@EB*|YQ9+}sbf=!U^CeILWkQ=oB1W{NZlrCT_mKkn6Ih~3m0yXg%7 z@T5$+@=Tg2_~tigE!DIDab{DzO%fTkfIU@p%Nt8(3q5f$c<}+1}ml-ZO8j`TRBP}x? zHgP#nlpMe3K&syAO|k)T526vst=f{yf>YDdzJ@lxvLknUu<6Z4%`688Cpwit#YiZ) zEw?8|1XJ_tN2OkB5b{O}3A({^h{I+Yd}enw;y8)l@%-zspfbSu3VQ-gg^}gB2?G?Z z6H#I2cqLH9hWOxCN$LqSeM~Ekv0lYstiIHN->^DWxhVCYk5Hw&1D&fdxa$0xqoDEP zZ-L%q04H_eMxakrOS3AADu1zW5GqB9nJo_9a{p9`jrL~xH;U8`*HiXm+UGE&$9yuH z(~Zk}$=r=rutj{}uG|MkUDX0fG1U!D98_?TLNcl6GREIPzEa$e$(7;g! zz$nmuB+aHZ&_#0_`vyNXIbgBtD@d^3eaHO~gA_`rxuucw;}tJL@MB0j1^BwuB*Co} ze)AU*l1(Bv-A?s*22(?gfB7w|dHZq~d6vyzic{A~-6b6R-OhQ;d;S5EyBGF+Zu14GFeO7)Bka=Ku zy3$QgHRprMla#jb`)Wc>3CZ&DL&p5fe1semiTjS+%0c~EHV$Mongz2LczUFwaPRC^ z9c>FQnOD8_0xQP11H$!w*Ye81VPwYmcgZt<^gQh!mM@=G@?vzVu)G+GcF5~o8T;@W zoeW$kU{oA5e>27OWAiLMCz>wE%}r0AkEcXtI=Dw3vOST$=-%(NUXQx2ZB`j{3+P3| z4T~%&3R4T;0hjklGrAi8{)-(cT`8;zt<9nmC1s3VBO@Q}%;r-dS%;nI~+Y zF!ZhyzR;lKMSR2lHYXTt-%n87Q&4A+i|^0xk63j6GB)7|Z}-6b_=$JOC>v#kMC+}N zX-k9=94{-Ve*YF;r<_&`iAF0C?p@q_3GJnV*GHRUg+O;xz03Fc_?1UKW^ue2;Ij*iRfpf49wEI~xxrWD_x@LjvO#cnEWByalFTC0 z1MdC$8mPIs3s&{<6{g91G7#Cib2R(a{`q8~&WZ&Ze)D$(&CoC8(s}TF z?5n#22O^~XaDoQg66Yj1M|@?@vRC9!4qBuMTi-?BnuNf8ZF<}A;ArE;_XO!=5+h>X z=x&Y|!Yg3SQ-PU#73Br>Uc=BKOHNmzm7g8Z9$ebz7F_K$JvzAj-r^+5KAt~OLrJoj zjeaY-g)x{YdCKe!-;Rp9)UmG&3Hp(2GWZKK&V=wJY=8`D}?uxdug!y-hk|vUVrM8@1{Cz zKyizc!s=y7{FT}IOVp*AB1on1IDrCRqV5iDe6Z{oI^fVTyK%Be!_mF>psrJCbX66R z5|4yBNT4==_;-bL(ARM5UHBW5{XVn}QIOKBl2&bD?+vd+FrxY=~(dCM#SiDi*zP{usGMT?$$_CKIXB-@1_!VYD=OjES^sMq zNll;>LQQeJ%EINdOtK8;yjQ2=h@32?nIV34?oB!N|D2LI9KaZA6hhLjLlhhRH~9dEvJ#J+Wvjd2N);Kor^{@1Mi>hO^=jUj##98%YF8bZWgBiN=ul}URnjN zgvzqp95u;qpNE5W^Q{Wu9uKA6Ey(8W-pFx-Tau|$7%q}V1g-QPFj~R%RKwEoZ`KDG zmETqgZr1AeS!qEqB>aTroCYdwalAalNc-PbW+6C}r#pW;<@r?M`^f?{82wdz1HERR zpTMTdtVNF3iKKahT2#PE$o5Zj2lNY77;*@vekeE0UtdmFN-X}KD?DqT3AO`wau>j!3E${v8CUL*m1ptAf`eLYuYMH1E z_eZeq@6C+j^#m2^4yyy6My5b|0Z5xdn2Ibn(_T_OF_K;ua|k2 zP!BY?o=3`Xf6HP9qysfI+^JZ4#v4)WWe1Yb+eZP#&5THGfWmS8UV)#|n&9~WT3H+I znf-<%C@6Ggfu`Q_%68vDgK}5^x`A_E14dfo9}}=E4kjmG+)@wQ5fpm6P^rH;du)&a zE-DPT+lSEO|M!PR2jY5m04)O_lJWR0HU1ZDZ<;ki637~kjtwBuT8!d)Ay$We8kfZ_5aFS7;b zXFwF9qyeHBp6st{pL@(*>v^?)v0Lo!w2lY=2^~#5OwF<9>GpPbd426Lp6qtmOv>z| zRBq?c@0;hDl!^xKYY#e}^VFgqv!4ZUsn@99kwi4e%FiPUqk+5z7a;HfLvBvaBUzZQ z_O;JJ>&4G&A}y`2duPf?*<#t>pjZze7xdZf*kHWi?M15FML(anBT_dD+p|i8Pf!2| zXx+#ynlq3?ULU^A(0gLg&t!W!nCO@bz)RjS@R#WoPIE!rd5pQZ$-y9Y?%EyR9|EBK zwx+*@!@*)T{XF;6t41gb@VI`c?0QVlU zvs#+yCyPK^3%amQh$ac;Xl2s7LSwK{T_G@yD8<#vuwN*Y^p17)iV&89fsuKZq3N!t z6pT1mhZ?yZ(lxT-q9f;i^QcE~uk4I;@h$uI4-Ad>;itl1V(m20caTP>extH-f96IQJ>&d`kkk5{*aLci( z%;)Hq^fV7|u=QSyou?tK!)JVwoQDmKqLBgbP!wGLa_Kl61H(U=o>UzQf3I%(q0ZWEv7mLdE#xQ5BCW<>UiWVK!UT)!Su92SeMfW zU4-f%^$r3#JDj?|gVZVP)miuQdDr;2|(qE3J3>V7ESY zxy;dM1X|?A3uXZQ^wJ?Ez0wdZZYyP3n-BY-$wZMQ!be|srV=ZOn-IkR#X<+TK-knW zYQ@?jXm`|rrOxZ@CZi1neFS~L+pExaqqFnI>vPbB#y+$O2rU4vAPSv{iHRzOhhl-+ zDS#oc(IJAftUBXhX&y>RSZ#k2?7ccaMDTGC>&?`r@ zwlM;RAwL*5fS8p}!o307`OsY1oh1QWak9f~e8t3E^9OlKhsl`yoU+lzijf#MDU`~r z)+4j28K#rYUnGT&i;MRUQBm`MbtN~&t^6Fb&4vbQ7ofdteX?Q|f1geTPS}hnKx4_3 zxCEFqq11?70C4CXs8x1d-e2x5-IIJ$UuHVNQuzGWr^r6;b^7PMa->LSpxjA(O7r4m zR|KPp{b0VFmnIHR#zg8UTF05h)_R-o;`q2wTD`8C@tp8!nJ(qd27ccCyUDQOjQ;$0 zLFBN&!#A7uAFCp$2~@~$E`~mDn3#W3HTS;Ej2P5FZBA9%_>VS10ocCut`|1)0p#V8 zqbk2s$4k$9#H&B!a9d7Rs@KQLW+!dVh@_~I*VvatE`2f-Uk>EEbFT^fkJ+{*H!XdO zT`)Zfunz?e8W!k&us)M5;yrLQK6b_B80A`@a&KEZ8 z_m}?)inM&j-7Qj&l@Vjm~n@-5hKv_IqTCx9?G-8(E9E%c@cSZ zn@H?O7{1#6=FQw({>z?-yFIJ_j^vPGn-1pWOHoywd9s`BmAt4H`IuJ>bjKj@PjFGo z;X!4@t?iXf1UXSKV*v}GCrKd~i_4(WW(D>lC-PH7-J6uf0C>PAkG|U@p9P3DMWe3v zpI`4&gW|H}Z5L{5e|dJeWt~Gn_&N^oY*HtweAo&Yiu0oc7j4k)aukvPslNx}_skR6MiF5^S&NS_5$<1UK#D~kf9xD zy2~MqWqf;9`{S}8Cy%+%;P@jW+a~kgubC|kq=$JX+UBJ_KyCWn2eMg-7Y+ZWjuhlV1ly z&9`Xp?icF@N=Ng3Ts<(GqJHfIfY7q8tPsGmzSdMm!rk#C`3Nf-@PZ43gSu!X{ew3J zMddT0Z_Fny#@3<_-n<>H$TFMC(x1#Y;~|*Huo_hYwm~Pbfdf(0TK|?{z}#`EwzIQi z4+h4WI^e+kN@Rng659`YObrh|Ri6PBfFHjGdfQeYagtwtU4C{yqn3mNXt~Y+IQ<4L z{MS<1u*~^xs5?=$;^#lZRz_;qK``v}xQ8U1B`a5vd~v1w!{rk#H&hu$z-a&6o^cay zxIH$85ik?^YwPQqd++ZeH=KqxDN9?GX%IE4AdlUm*KUw!PdD$rMj3c{7 z&PdST`fW(tB1wf4bm1`qR;`hD#s#%o+>oMS^^76cacQ;JVSZz9SpaiKG&ePTKr8p8M~0yIlqO6-^0q#GC>4X-Ca zw6Dbkx4kU374oPH%BVU~g)k$zyuxNOwsC~<#0|7x?H&y60aa>$NH{C*G*e@j2ri0u zb9kOT!6b%Jk#>84xU^nU#LDUO*_2r>rGu%QnzQaZzD%`WAM~k~RGasXF+?-V1B3

    #ObS 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 UQo1O|n+$ybz11$Yi$N&HU literal 64511 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 Fig. 双向队列的操作

    5.3.1.   双向队列常用操作

    -

    双向队列的常用操作见下表,方法名需根据语言来确定,此处以 Java 为例。

    +

    双向队列的常用操作见下表,方法名需根据语言来确定。

    @@ -1773,12 +1773,12 @@ - + - + @@ -1814,8 +1814,8 @@ int peekLast = deque.peekLast(); // 队尾元素/* 元素出队 */ -int pollFirst = deque.pollFirst(); // 队首元素出队 -int pollLast = deque.pollLast(); // 队尾元素出队 +int popFirst = deque.pollFirst(); // 队首元素出队 +int popLast = deque.pollLast(); // 队尾元素出队/* 获取双向队列的长度 */int size = deque.size(); @@ -2023,9 +2023,9 @@ letpeekLast=deque.last!// 队尾元素/* 元素出队 */ -// 使用 Array 模拟时 pollFirst 的复杂度为 O(n) -letpollFirst=deque.removeFirst()// 队首元素出队 -letpollLast=deque.removeLast()// 队尾元素出队 +// 使用 Array 模拟时 popFirst 的复杂度为 O(n) +letpopFirst=deque.removeFirst()// 队首元素出队 +letpopLast=deque.removeLast()// 队尾元素出队/* 获取双向队列的长度 */letsize=deque.count @@ -2046,7 +2046,7 @@

    回忆上节内容,由于可以方便地删除链表头结点(对应出队操作),以及在链表尾结点后添加新结点(对应入队操作),因此我们使用普通单向链表来实现队列。

    而双向队列的头部和尾部都可以执行入队与出队操作,换言之,双向队列的操作是“首尾对称”的,也需要实现另一个对称方向的操作。因此,双向队列需要使用「双向链表」来实现。

    我们将双向链表的头结点和尾结点分别看作双向队列的队首和队尾,并且实现在两端都能添加与删除结点。

    -
    +

    基于链表实现双向队列的入队出队操作

    @@ -2058,10 +2058,10 @@

    linkedlist_deque_push_first

    -

    linkedlist_deque_poll_last

    +

    linkedlist_deque_pop_last

    -

    linkedlist_deque_poll_first

    +

    linkedlist_deque_pop_first

    @@ -2132,7 +2132,7 @@ } /* 出队操作 */ - private Integer poll(boolean isFront) { + private Integer pop(boolean isFront) { // 若队列为空,直接返回 null if (isEmpty()) return null; @@ -2163,13 +2163,13 @@ } /* 队首出队 */ - public Integer pollFirst() { - return poll(true); + public Integer popFirst() { + return pop(true); } /* 队尾出队 */ - public Integer pollLast() { - return poll(false); + public Integer popLast() { + return pop(false); } /* 访问队首元素 */ @@ -2268,7 +2268,7 @@ } /* 出队操作 */ - int poll(bool isFront) { + int pop(bool isFront) { // 若队列为空,直接返回 -1 if (isEmpty()) return -1; @@ -2299,13 +2299,13 @@ } /* 队首出队 */ - int pollFirst() { - return poll(true); + int popFirst() { + return pop(true); } /* 队尾出队 */ - int pollLast() { - return poll(false); + int popLast() { + return pop(false); } /* 访问队首元素 */ @@ -2384,7 +2384,7 @@ """ 队尾入队 """ self.push(num, False) - def poll(self, is_front: bool) -> int: + def pop(self, is_front: bool) -> int: """ 出队操作 """ # 若队列为空,直接返回 None if self.is_empty(): @@ -2410,13 +2410,13 @@ self.__size -= 1 # 更新队列长度 return val - def poll_first(self) -> int: + def pop_first(self) -> int: """ 队首出队 """ - return self.poll(True) + return self.pop(True) - def poll_last(self) -> int: + def pop_last(self) -> int: """ 队尾出队 """ - return self.poll(False) + return self.pop(False) def peek_first(self) -> int: """ 访问队首元素 """ @@ -2461,7 +2461,7 @@ } /* 队首元素出队 */ -func (s *linkedListDeque) pollFirst() any { +func (s *linkedListDeque) popFirst() any { if s.isEmpty() { return nil } @@ -2471,7 +2471,7 @@ } /* 队尾元素出队 */ -func (s *linkedListDeque) pollLast() any { +func (s *linkedListDeque) popLast() any { if s.isEmpty() { return nil } @@ -2573,7 +2573,7 @@ } /* 队尾出队操作 */ - pollLast() { + popLast() { if (this.#queSize === 0) { return null; } @@ -2590,7 +2590,7 @@ } /* 队首出队操作 */ - pollFirst() { + popFirst() { if (this.#queSize === 0) { return null; } @@ -2698,7 +2698,7 @@ } /* 队尾出队操作 */ - pollLast(): number { + popLast(): number { if (this.queSize === 0) { return null; } @@ -2715,7 +2715,7 @@ } /* 队首出队操作 */ - pollFirst(): number { + popFirst(): number { if (this.queSize === 0) { return null; } @@ -2844,7 +2844,7 @@ } /* 出队操作 */ - private func poll(isFront: Bool) -> Int { + private func pop(isFront: Bool) -> Int { if isEmpty() { fatalError("双向队列为空") } @@ -2876,13 +2876,13 @@ } /* 队首出队 */ - func pollFirst() -> Int { - poll(isFront: true) + func popFirst() -> Int { + pop(isFront: true) } /* 队尾出队 */ - func pollLast() -> Int { - poll(isFront: false) + func popLast() -> Int { + pop(isFront: false) } /* 访问队首元素 */ @@ -3000,7 +3000,7 @@ } // 出队操作 - pub fn poll(self: *Self, isFront: bool) T { + pub fn pop(self: *Self, isFront: bool) T { if (self.isEmpty()) @panic("双向队列为空"); var val: T = undefined; // 队首出队操作 @@ -3029,13 +3029,13 @@ } // 队首出队 - pub fn pollFirst(self: *Self) T { - return self.poll(true); + pub fn popFirst(self: *Self) T { + return self.pop(true); } // 队尾出队 - pub fn pollLast(self: *Self) T { - return self.poll(false); + pub fn popLast(self: *Self) T { + return self.pop(false); } // 访问队首元素 @@ -3083,7 +3083,7 @@

    基于数组的实现

    与基于数组实现队列类似,我们也可以使用环形数组来实现双向队列。在实现队列的基础上,增加实现“队首入队”和“队尾出队”方法即可。

    -
    +

    基于数组实现双向队列的入队出队操作

    @@ -3095,10 +3095,10 @@

    array_deque_push_first

    -

    array_deque_poll_last

    +

    array_deque_pop_last

    -

    array_deque_poll_first

    +

    array_deque_pop_first

    @@ -3169,7 +3169,7 @@ } /* 队首出队 */ - public int pollFirst() { + public int popFirst() { int num = peekFirst(); // 队首指针向后移动一位 front = index(front + 1); @@ -3178,7 +3178,7 @@ } /* 队尾出队 */ - public int pollLast() { + public int popLast() { int num = peekLast(); queSize--; return num; @@ -3278,7 +3278,7 @@ } /* 队首出队 */ - int pollFirst() { + int popFirst() { int num = peekFirst(); // 队首指针向后移动一位 front = index(front + 1); @@ -3287,7 +3287,7 @@ } /* 队尾出队 */ - int pollLast() { + int popLast() { int num = peekLast(); queSize--; return num; @@ -3373,7 +3373,7 @@ self.__nums[rear] = num self.__size += 1 - def poll_first(self) -> int: + def pop_first(self) -> int: """ 队首出队 """ num = self.peek_first() # 队首指针向后移动一位 @@ -3381,7 +3381,7 @@ self.__size -= 1 return num - def poll_last(self) -> int: + def pop_last(self) -> int: """ 队尾出队 """ num = self.peek_last() self.__size -= 1 @@ -3477,7 +3477,7 @@ } /* 队首出队 */ - pollFirst() { + popFirst() { const num = this.peekFirst(); // 队首指针向后移动一位 this.#front = this.index(this.#front + 1); @@ -3486,7 +3486,7 @@ } /* 队尾出队 */ - pollLast() { + popLast() { const num = this.peekLast(); this.#queSize--; return num; @@ -3585,7 +3585,7 @@ } /* 队首出队 */ - pollFirst(): number { + popFirst(): number { const num: number = this.peekFirst(); // 队首指针向后移动一位 this.front = this.index(this.front + 1); @@ -3594,7 +3594,7 @@ } /* 队尾出队 */ - pollLast(): number { + popLast(): number { const num: number = this.peekLast(); this.queSize--; return num; @@ -3701,7 +3701,7 @@ } /* 队首出队 */ - func pollFirst() -> Int { + func popFirst() -> Int { let num = peekFirst() // 队首指针向后移动一位 front = index(i: front + 1) @@ -3710,7 +3710,7 @@ } /* 队尾出队 */ - func pollLast() -> Int { + func popLast() -> Int { let num = peekLast() queSize -= 1 return num diff --git a/chapter_stack_and_queue/queue.assets/array_queue.png b/chapter_stack_and_queue/queue.assets/array_queue.png index 500d98aab9182ad3a3bc8b0bf41daccb5827b429..e4e17d03969af77f4f660f68a794c839eac9700c 100644 GIT binary patch literal 73369 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ðXw~n!jMkW2C5`+`vN>#q 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 QRPaybg68=gh06i|55%=BT>t<8 literal 73317 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 diff --git a/chapter_stack_and_queue/queue.assets/array_queue_pop.png b/chapter_stack_and_queue/queue.assets/array_queue_pop.png new file mode 100644 index 0000000000000000000000000000000000000000..3cfb3b42127e8665c7e2fdc10ae4ffe2df9903b1 GIT binary patch literal 62574 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 IVcahKA1wAu761SM diff --git a/chapter_stack_and_queue/queue.assets/linkedlist_queue.png b/chapter_stack_and_queue/queue.assets/linkedlist_queue.png index 685e8955702b37036df8b9309504b5570bbbe1c7..160d781b2038923e8b94f132453cfecd40bb10e4 100644 GIT binary patch literal 54655 zcmeFZXH-*Z{{FYq<0YMRp~(>Q2{Hc2q;}?O6V;>2n0}2 zkWT1LrS}qAX!i-0dEa^ecdh&JewdjhWX5w&p7N`E@8>+y)>J)6$4Li)Kn`BJdg%rP zLIplTTWO%+7o1Ox0{o)zyrFsllGDsR1^(lKt5D4Q(@*j#QQARE>ZpgJu=k@$3W(R3svl4K-x9wkZ_#D-~ zWgmL^@~0CnkLiznWFzv~ROCEAs_~RG@VaTVOgZ*)?s{3Bm~8iCleFw#@BVt^Jn$VV z{FF=NA+xp)p5xN3$OM%2(eXV-6~$-*K}iW`U>Ll$G!?IG?mZo^#r)d0`9tQ*@$vB; zKLI2JO2hy64<>I^!RUdWo*pAh%i-46ynqGuFUGkqagy$Wnc6r^=$Zez8r z87N>(aLC_3P`6+M$I)zJwEbI&N&zAwBIRCF?b)Un0~<$C3ZpjPA9c^BpL5!h|HmW9598P7m$9Ozwz9QCFSMnE-Sn{1HQxG!(E3Xrt+L z43>a6VJ|5I-|N8a&jfc%I|GGhW^va zKF|seJE_K8%w~2c>Gv*wzy(Cy#Q4m2=O&@I#UL|}RLds{eZP0d1xZuR#;)-6uht>P zW7GdO>z|+C@=%E|(sKH=IBD8ka#%nwMG@^AVs_bl-6b`U!pL&czbe{~@Z6lzWr6e_ z;j71H)-hBdQjGgQ1~f%)RO!8>%a@(yD;nTD>yg>kcr5#!TX&ARYfRt^{WnJa9~w$L zJgW?BEPJs|S?zQ~z6ysI{?pUQL%OAgkCV^N8kiRGW{p~Pi$ZiaayhO>QCYC9H9_3_ zOEk86(%0s9j`kNRgwoC1s(SOC`VU{-pVaeovcH4$&>M=BD~Ad&$)*ZYlg9+Xat>4xP+qcyvd4XoVhKs!TlFqLMY_p<6%>U{6zzjbpB15zr-y+s+Zy4s@%gyRR zTNHnV%zV4LR=i+t*{hthKA*zKvX$Nc^nXl)gFWxM6H4zH_My{(f(S%J;HfpIxE89B z=#~JZJDbkfbL@R%6{y}oO7XuH7%PYW~jIjC9`oE96c@a&Ymt)l* zd<3}~5_hU(;cgt_5d420m`A&DGwVVQX1vfD893Dq2AA^ge+KuFZlfkEu;}P^FGHTs z%E=!+2Jin7^We!y*j<5jPl}#{7nyr83IB&3#Kx-2a?7oC4~>PapMka>U!~ZvL5Ps5!JbLI4Mh0i4 znwIJ6a(mzL*}%ogzZ>myF?$FdU@#M?Z5uVTnmKQ*Pe?(yzmNs(D_#-~S$nehcZ1Ha z2yMVgH#&>WP_H#q-r?#LbMJN9ejZ5-YHyA9wE&$k5_G=`baa3B#MaCYn{aOFhMpB& z>Ty$qXp%!@t%yUAk#(uvCU?}T=HX~cNf?s{6lSG*{%?$te-BzYi5^f0`t0W|I#gqa zUJq2T@8xzs+%^A|dSb7$of39|U%P!^pyKAI$IHvh1qEktnEovhadE=lw7F8z`pcIu znTXL6fA{m3jN#RUlkU=2HHJtx&;|K+2o_5KYMi)zUnl*R3k~ZV0q#yt zH;fk$(lRphLpalg`_u=ILD+kf=tH0UF3uj@fPeELRZMkB$E~jBcxc|`$a9DHnXi9b zK52b3FXCYY%_S`)gd6AC@bLE@p&aN+k<(8qT^n%uXDjKEgE}`SqHWgGs3~A{>il0I zU#0OO-X>GxzxRnr8r5Sqjb)GbO19)Xnn~{ohyy zYJlE|q|f9%Whm{|CsVkiQ~0>jNtdNcKAw(lNZ#z{olJKC*6~@3Y4GB2c~sSCk>mSd8> z)cdmxhcgCQq8L9{J!8=!A0K`*g55`|wpUqVP7nz{3ZubW%h4167=`dLikKj8^PHxg z@&o*1SE|qCF}g09a`YU#?H1mw1Hk+UC~QRWyQjl%;3fGe6|0=Ii?3lOcZMZPH)XV* zHnoAQ-e+~bEFl2z!6m3@@MWFjMt{~YpT0*LBe63+bJ)!HfY>05Iy>b|)+k!&)9!(L zOM=f$!5X;X&T;?x`D4IX%$z*M{*2{4 z)c`T~l+n@Vl!xX!=#W+!T9=u3D?NOS&mhp=Bf^bq6b^j9H$_+mwY5+c+!!s+xte+{ zlKK$u!1N-!xCyb2%l-PBGimlMiTPZ)M)@~M#3_TlTE5-9ckhn*#Q8~UDK0(W?8f}4 zk5HK}{qfy3Iu0Q_Jd+;m={fLGRcA6mUd<31(fuHAx8r!;vd4GxjU&MP43QAC(uwfI zUl1)kk&2Uxt7>m&VSSq5ygd3vP&M2O=f7Bez%bh+Edm#?u6YtN?Af9ui6gf2?QPW4 zvYg!Bs8^8?-x=V!y9-XV5$l`>9*zr6l7J$-yE#t zc(5+S!uvW)O>|fx;u5DS1fYma$d!jJZ-0Tk$$3<}GgZ6lQW(x!sTM^km!7=bpjEV5 z-iZ?@0@h~pQN_;PIRs`A5z{M!U`XLS3U{Y4gu%!GtKIF*9K%X;iSo&JYjYqZ6fU&| zth&qeX_aZv<6>hB4n>9Ox`pvD!}+(t9xWybA|C$oYim|*3j#ylk>d+}#p*kzfKoar zJK!<;LUnrZa#KM;S8x|%<6BrDJ8 zWm_`m&z~PGK+MWm?k>l8G9l-tEwP;jfqAF7``?T@%SZXjXRTY4ylV@zqFvt)Ki>|| zH!Z(r<=qlxBbx#O!ZH35Y0N-aMlKByX-reTj1pVOMl_WmIq`;Hvg{r-v zj-eQy90G?`NPj(Vz*m_rs@m8q2L7wl1kdpz#Z$6tX;JM%YB5E)C~JvBnOQg1#TYU= zT3+m^YAQP1s9z3u8vTahRg;2X6MLfYS@(SSS(zRtLMY@A6R((m(S2|U*brhSdwP1h zp`ihtTS?kpY1#WE8MO5MiDb}(!Z62aD`Z@ot2AU7jBj;yb=s{yoF}(pxnXZ3Vz2e- zeCh2UXOxjP5lTM9$+r9^kviY`fpaCwKct6NTSR3DX#=|`bH@0)lcN+-l)7#L9;)t> zwrpPf%uzI#E`qS}Y~{1?uduDin6mO}r*64~@5bV{HA27w&UXQ~Zn8<5$z3m* zGG}z<`WT?{{h^>l>Bv35VLR+lV(v_rN=E$YEw4Gx-k!#}GgAap!x@`&gqwN6gg`!> zyl!UEeK-w>A_9u1yl8)U?*;KZyC%*-v~goZ@$BXop(H&ECGfSjIS#DNX5N_(@w9{Y}Z6GgjNxt%Q`G9iZTAG6Ncj)3Zp@h`3?|2z$!R!F#t;)>o z?BdwoLVNeYa>9D{JpCNbzj&daAt-CG^~_k@E@{HMzuUF1>_edO)|-VUKlj0a?!@g{ z2A}pV$Z_x2VFI?T(dkSy5nyW-C+;Qw%8PJon#pfhVi)v<19w)t2{s`{O6gY(C!E-b z-@^DRgLV+IPbnGY@KJ#wZ=~$Y#k~oO;+TQ&G8=1{s_eW>tdsFG`h3#+t;<+01INcb z{go0byEB%1)0|6e#B7U7HSwTk4agdg>{x_GK0VmFd!=RH!E$dIYK_sg$u_|u zKjP#_)y|xI{xGlS*T3u&yt|rYhqE4y^|%KwM<$i3Wyf}@Ij-klrR(P`v2{%KvAyHn zk{LU;mF5|BC%Rm<5F|rp5YDe0b%g!ex5qm0j*Q@qTE4Sv+jz=D4w|L98JagdD2%3L zt1kwIF>u`ZED+`p2T1F3QB-l?=J4*^aC<7Zl-<+lTS5+_m0R;$Bliy-c6q*(YgVGy zc&qX0N;^N4<~XRKG>0CG|0c0eM^GPhGs+2#C*RpaErT}43`!;hK4iHz%l%+L6DytV zHXaEjYCo$foM)dq>FvE|KS4tTco)|D?sB|@@h9&>>> zzx2#K-gn49M3p6@exA3Hq+Dd!bL5iH4~Q;EOkY4yj*Pmg@H>m~--pKX?KZgwt$-MS zl^Hxy4fdoXB`T-%I~`WFs2^`wx;2lbZ*!W!H|cH8V;2w|xxR(srX{mI z`6&ebh9y#7;6h`+)lee>nm2AZckZG=b3n{Z1*?ctYf1%jK2lCh@Z@CRkyL@CNyT3a zF?ycgB5S8!W!HMjFpxBDSViiwiAeCMp)If1w_=Y_TI&IUO(RaG7c+?U?e?y!4LztZ znS7tfyTCM*ewV^1hAE&bZJ(`X5`{y;rQd=W{WBst6yj%l3*B+62K^eCjJ^v06&~M# zw_(RM;^lN^-mp0biaV_?pUQ~8VQH!2Guul?TP)D#5g;Cs;BOZadb0#4FAe4qR8bVQ;*UXN){Igs`wbD+i4IbdTt8Lt! zek;nQYIikv_)eqv^!v)#vh}nqv@>FhIQ3%=*QFky;x_w^ zW`t2?+oLILa_MzGm-c;-&L613&#eUStp~FiXB(2@7RTeNBG86sB-=wFX z43xI1V^F$#wTo8D)N+ryy29gX%NW$ zk9$dR1}#SI^=&Dtq7YG&e#_4CmFV4f1|nUybtD7-EwDn7$8MhqyBf^3es&}_(B#9} zvcT>&Kdg6;!XfSj(`j-Tpk+dC+JHv>5sWvGsH60}78^1y%gM<}ELGpxzO{-r$Zl`Z z67dBlPk?0c9SGjr8g~AXk%*WEVX4#Xf%MIVhIZ1q_8_C#;i|o)z3mA+S3JV^E!jdx zFT<;g)6=i`<|9CEGds|SanF5ZX{$+?l*|X)p&2Z?yAGD6QL-wFQ;E+g_(0{x_b1(! z!MJn_=@VOM%bkX~8PQVb`}%vp$vXm_s|kTc_jXOX?l_C0ZL>dE*0E?E&5`BJ2oh+W2N2UeoROyXqMs zep`uWiN^!SZXha}-h-;|-VuHXJ8>#yh31yI)t8qi%Gbo!PJmk^Y<%EP0BJer(1E7 z3z%|Cui5C#+p^W|0%ymZ`zOauMM{giNLvO=MqkXF^NN>^Et_Jc)hUc-@=KvbSeN$hz0!Dc7b-qO)JvFm_|G3J7K(Yh_4bbl6Go546)9`rdE z9wT9{sj@@d+f3TKJ$Ur5n-97^^?b}l6OV+e>~5rl%d17!t_`Ft0Glz#`V?1P4p^Vh zuA*MW#N$BK)$2nXf;INP!nlCxt>R)ki%C+=ayB&&XhqP0n6w;Nm(-iHv@R4zk)Vhy zQ9U@*9o~0cG_dH1e823+W#t`*?dMC;QszP{7I|2UCgZN9G}IjX__{8)8*LFie#tH6Oz`gAEe_EVQxlqOLl@k9=ernm_X$s! zRR+27UzSK#_g{UYIHooD&3Gm(P}YNSHt}ZRk&^A5gv<)3QXDV>(L!^ zd8ba{Ky;JWn|zb5`Y(|}TPJfUv9IjXLWW|;q;*yGGkW!8eAaVf=uoxxpf?Nz_3$+ERgI$#j5JPGJ1=bFvFFy&}FdHp1am= zsHMD_>UJ!rui+Ji%CtJ>%+oHU6i%{`&8>vBI2cSW3S?ySN2 z877ecp$CP&t;bD$bSq^fU9IK51d@esbn2i%Gn#lZbnLknx$Pl09n+|w#|2aLGfmA2 z3fWBV)JB*K-dfqjgK*LHfdmt;z*vds6;~_1s>KjVSeGuC3eBiGe+aR^D`&by-*xcB zXus(s;f&3RuS_}j>~=gq?`^j#!Ok25wn`)Tj9;4-TJHY%neNO^g-Z0Pqe8q@BJ&jq6t9U*D`%ug|`dcJ4C5iQX-V$SAU@4_~-Dp^!)yycDLg{We$4 zzsD_R3_T%8PT+6>y3$r>LulBo!#(Y}al5uVo&vjV?^-}*r5(GS?gA!vSz^TP#XILZ z;#u{KZ+CL%XJ3AGRUZsz-A~ewHQ;XzFZ#4xyu&^`-dOF8PY=FUwJFcc&5nwvJxv)e z<;3^^UQKTnFjtH?lI8}_tmjlBO{PpF_$D6wLS+@$dASCt37x&)Bd*(4(1#W;gz*J! ze3fb`>Z9S>FQZxGktb16=b~g>4;!I8Kc$!7RXY4dJjkb`ifZCo7&AOM8~PQ3(SJI} zENnp`ezkJ8pwVT!T=v8LMd}gRA-`IJknp6PAz{f9;ih^oaFdQ)T!0$JC0hS&_sxk; zoenS0tcs_f5%1hi@5HeOGd_k}z+O`{(<>afoUBcCC7j#QJQt1b_z~>QqNjB90}x+5 zQ;pd69)pE|lzgrlb2kKRKR=Tz$}uHFBT3dgzhgc$D&`4_a6kY{oawrtYMR&vT0JTJ zHU~(&GBlHKUzB*2<>$AZ44P<8m>JyLSsxzGv%ddFpdN|UYjX{7vFG0EX}C&qY9 zdD=t%J)^5~SOmxn&L0$9$c0svcX-$+cDZID4u*bW>_ETEZ#*{Z!KY!Dz5#LbT%bO5w z>Re+S)`6P!NF8>G>rjTiJq)~b+N+fVRwJ6+udqkzt}>`Bmf!{Tx)OqD1X9*K!d6;0 z{klI0N_ym$P@-(~rQ2ZniK9>F1?K`rbA5jp@QKY1zTVfX!clak3RZ(>e_V-siTn17 z4=eqp_vowkT#0iAjR6xu&U)ID!#dpj|fLH_rw6}M&!X)DL}#iXcX%-Y;I z`(3X=CiTdC8I~ElP$`KKJ495F>wNdvx2JqhsKNIYf$wWgLAdwLY@#b@b1 z#-`-i6PUVBU@*B-$j;21$*XgY5;3xMf(}hOHzv-#sZAa3RP3ck(SSxl(Bm)%6k2w~ z?^_7FTgB29CF(DXcR#TizKSjxxM9(~W8qOvT{K6?|g(pqA^dTjC1B%(7Y+O^QzS^ZJX5G7d^OHH6ThG|`(2pEVk_`UmZWqGM#W1^PQs@~xAIhp$Dptf?hF5jxH!F-!~ zr$RihB7pMpJ8In2b0~aR$>9|Boz>&Kp>8!@K1qv8y@vYT8w<7pI(u~1p!P%p$F5gn z3-7kGG#Om|i~f~EtnH`AY-3|%v6!|1EKX9Rc`|tJopM0L4hQBn;iv-ilVEF4k3%Hsk-1^>ZZNY~Ob_vV1=|@AD_kRjT{2bR?9|`ure*@2mq8g&cGuR^SgE z(8k_cW7o9QCnw#3U5O0!Mz01C#)l{ohF-baI0LmArL{97lO3loz?fQxshXN@I!Hqb zVX-P=zt9O_#8mvrR4pary(AJS-dxRaI%9%|l$^f4|BLE0q#PiM0!$A6cW42%@dv}B zQ^$|{ciLkua`WW1+<`Y+0&l+i#nbH1HK9$z;fRMyyl%ywDm72 z4g!4vQmHD5ct#FZ01%VrXtB9tzbQeQTUy8yt-Xb5wyqOYl`sM z54Kh`w{($^cn$NuE5DI^rqAIZ`1jsU(}x|C0QYUs+WGyt?>PCsQAb;Cnp>veK3D6$ zzXh(JE5PVh(u*F#naQ2~$Z@Glzo)`~2P%dNA2?+Try0Ef?xVL2N0GD8{#c(IgWMoB zbIqBC^%3Y(uWFvHz4Uu9$H1(@JEv})rWsWO_lY`&liRsp_niZ*hkf(QXeK}fKs}ff zTtXlJ{>w{OkQ^hQHtU3Q-kepS&pFKkZ zy93;#xmd3L55>WB)e;P$Qb3$vn;htmDNZr`p~8gy$PCQ(sap`5(Tm`!L*C)!D(lxk z6TyN`ZRX2DFN?q-674K4d4J%adq=FOOOv(u5>)@s{eMlNIT)_QEPRtZ!KAyPe^l43 zSzxKGw0L+_`IE?YGwtc}d$A$lsDKePA(ksZKzo!t&^=20B6E*W@^A{)GL4-{4dsJH zK9~{#!(%d`SZ^`7cI}#j!nJx(wYz}J^Aeaz_u)BI6&&rR&E6_~ev0mfxG@=-+VTDA zPzmOFPBfR7mxG>p=JqVZB0$x-I63L;6unqM*)E_R9dZB8br=)P6Xd&;@|z1?LOZ427iO@M8qh|RXvIEd*!*Bb73>hcm$|>X06H~Qq`wYMH!*s*`y_&B_r-2|HZxlXtOl3>cyv2+ z4o8kyH?P=-&R7tniE2hs}rS(ES3hQq{pa!mDZH0pj$y zdU`GNAlDHwBdfh*lRrqSGplW(Qn$Z<1RUl)E>4~+5KxpdAw91&p_phAko1w2kgV|X zB#{f9VLm1KY2mdixf8NzJPBy-rkA6z9u% znmM~*gs(L@65{N7CEek7j1;hYR1NpgAAZ4V2Hm#(>^Rjt;U%j>qXIdR-~sx$=A``} zfx8OsGM_zfobBegPq3@}zZ2|>0LjI1zWN=8fa9JTc~aSc`w{lkFzmayO9^5a;~Cww zbkcgR*~LRyOQik^|8)=?PA42B-TNKbSo4wh&>BMx@JLK$XQoTmo1qp^h+rl9ni#m^ z=DzzBQ4`XesIjDDGIouNZpAe3EB zF4C4)Q~7-t2rI{}ra&2GPSSrCSJE_lm5}wWxKEF|>zkhTV%N7b0jwq$A*e-qCS+}J z_@uz^t!I*^_@ooJML3%^9#lNr+eB^e_`U%z+f=G^p#7Vh+*m!`&@?jbyBN<4yZ`Jo ze(%L4V|=z}$rmF4H;sLBIb^yX+x5+hHJ~Cdj-z?)wjLsLpb zV=a0IaswbY-0IvpjKWGbvKd@n$jPcs2>&mGz^`ovrHkjx!%ldHcjOw+P^gQ5Mj_?p za(mc!`I)CjP^~l`?31nWbn^G$lT<|d<-UX7<*s&&1|O!{v(889AN%$f+uJ?Q^9R6M zfyVL=xxRBTT|L};Gk-TKKe)S-W%rX~?W0?|FgoBIW_cOm;ecvKxeUjBl;zxU_F4H13CD>MsIDOM9ijY5@s2|JHtZpwS3~-L?pa?pbG7hI< z%|xCI^6tORuIj1Cuyg6A?A+I-+aM5lC0)i!^ZHn zwG3PHv%uRPmVn}>Zz85m;5h{a_Dp8#aY~J}0hpnE+V%Qy@*}Ro2JQkl;^4*l*_&2a z!J;5S<6vHm$Bju!s4*Kq#6Bvfju})5Tdug!wt;v|zR_A2=WN9)l9C)QX>MHwIE4Ap zW^MEbS(~@rg9jUzJ*J!Tg+QRQ0Jcxky>x*2a}xY&5IldjNpgH;{Qydkd?N=_9#xA# zMfUv=iy5QJob@kANewWVJJ11`=sBU13lNYuCV4x3oF|!xAwT6WMd$HdEWK$Zec}n| zU~KV%3=#Pjhb7J%4LQ!0NTW-#G6#+N-w(^rpckQxcZ@6S!-E4|+5uk+ZoSb1jfl!D04G?MZ_o^oG|AvxwN%t={{4 zcdZONav=!c$m80d;EC3^Dwn;OP}{T*Tu&JFkRq$3YG06z1j@3Q z6Rf$3d4rQ*mtP&}col@19XPX4+dYvRpL>r#bY8`)!P-7e@H>te6YSjn;+7?>MiLYX z8!gOAe`-iNBfMMo>^^nd?P|GB#A>b1_t}qcNpbqfzW)44P?Doy@A-X3x%Wk>URo=O zov*Xh*A$OO&GlaWApHr5n1I*?U>8C6CV7ARs&)^w{QiCF=es0(=`-$Q6+*-QHEEWF z3XI#MA<+hr@{)zj3k{MBl+UwjPsx4)=D}nK^2zHK#=yVx$<^bhlegf3=2hsRmFA{L zCC+mS?rQF?rj-B&haRz_^`b~pEZ;Bpm=2>rArl=HrEh2$ma5`KiTX_MHPf11aB=L# zPB>>9W=z>=#jsi3^Yh=d=G~|}v4K_~#e7BqyFKuk8@ivI8lY-bqJ}xgcdl%5OO+5| zfSHuy_!7<2AaCaR-PbJRNKl2xT0!r;AQ{W#M?ut+SwgXVxUl$r3 z1kSf6e4utbfVxUo8X)HEb!r&eCtB#!-)GshnU)xqx~0Nr8F-;;ey3TE_%$ldFlQ*1 z8MK8K_0s+==&InHV3p zEAA@PZSm^+>Lk=Lb#&_(5^e`-n>VYe(y(R0WOXJLqmt|OT>(cWRL$1D-0&WslXf3o zTAp(cBH9IM%ZWgZS@?JCo<)Z;J6uip*vU*!O}&K8?kmWQO4#HC``qKMl0z}B zMFG`e^0Qqa=03YL=Gm+yTa{w6*mjSN%kb`vy=y_(>Ne)jp^zzAuFRrG@H5bq1L5a( zo_F}p4{ZVu5jV!9=6|?tHHI%dv=>~mP_QaqMWeYX{k}kLYx(TRD~eub)CB;Cvp2kX zmqhcC&7r4k<(Yqy(w_F1l#rI&@Y{<6Ja?9-G*p= zrOfR3zC0h9`5v6TFOZ!~a4*@42e|ch=ym0csTxPwSE|^k*G6~7+Jevv5E0N@5vJ_& z+E}%}4-#5O>e35j4`C6Yn0uZMW}pH0k-S5((1FxVF)Bi|?cqpU<C^2|89Y`)>QLm`3R-Nj|7la05)x59s^CIod+A6I#B zzZAb}fh5LNu$dlv4#!_`Z(5Fp^^Y!zE|4Y^eePcbuEPi`rQVMmC>PoadEcD*y|-Oq z3_Rs`7d(;ryoz4$6REQhfdLJU8MZS$MNdG}Uvz4xtE(%=vP$`fNLpGN5Q=^ED?IxU z9!@nN;=p5Qt3lI$^9Q%D;G)Nmu-UlfVhQ7;i~}!0SMU%Cf)rHfg#c?VUX?G%;Xa@5 z_L2mI{F4r!={r2mdle%zrCqXc4)DhEnUrZK(hwdYbmbQ6T5ewhW8{uOUD+ITNyT*- z*Z!`qlsqK>C0T*={WR*dv;cP^#3ci{+VW{d^~H-LWx$0$??Fy)*Bm*jVqFuer97qL zG4fC_!b?!ce{`}@BkCaFyJ}kdNCw&<5lQ zSB*~V2_RIldW!+l)j?Ky#YlYYZt*EgZ!tYHFQ5r1I1T`W!(vUxp3|cQYC{7TR8^LF zuF;=tshT`yX&bK6wa}Mi>gB{Mw^k~1h}%@_AoLqE|4!(HS!<*)ZD}i76qOO4$@t}X zUYe!sP9teTc;|(U7!3^UDW&myU{6IbnYjVtf|R=&n%3tEzZS4u#cI!#V!()9~wx|5d z1frYPGr6wsl_0u$$dEIzR4*A0bpx0|mXWo!ezv7o+vRNP5mmlG;%c|$y3b|9TA8zF z&45CtHtZ0Fq>nZL3cKJNWq>S#S>>|X!j@0KNlh_|_2L))m)ZET&up-No3i>$_I}Wa z0DXtw_xf=jzsNtRnwdlj?l*`}a9ed7u^ArGiYH{ni z8OQ3davd+_{t9Z!B(JW^c6V7Ex&!h{&*%u5>$xfze?N8d3+*Q(}Iwc*KEVWqSNFXA0S z-yA@R0%;r&A;q1seasU8Snqw>6@ah)lN@2dc(gz;N>W>_q8T;8&m+^&!S1oQQwCW{ zp}IlwgtX6URpp~bQ-)z3A@!VjPGXNI5R2T0K$j>4Ogc$PHM|^|bA&9l1CkKeXFA9 z{B3kCHw&#QXl|Looim4nwp^vrZ-zRwR0fNyJSQ|or6^~w3zIR6cK3bE0tKZ@^AQs9 z6}7Xq+L>_EVk#TKFRZ;7t;K;U)PIYdH}|p8lAND;?qrTpwD_tV_gPB5BOl zVQ4M^n3H>MrE&5Gd+FwQ+?+%!f-%o|Y^~pYVW6yVtH;S25SS%R06xHRKNjQhCuO++qho zFcbtq&WRT~w=Asco^s?rt0cCo=SR^xdHoPoV!OsQ`JoCBDe>5e!bY5F2|1n@`reT{ z?_9R0rgHK49;GT{dB*POi14pcZyov=OKK4h^ZCn2DgSuZy~^V7Q-{!2dl$-rIjQvx zdhdt0as~K0C$7GDWSPrg3wuoNwu&+mQ4<$N`kZqE*9U!9{j8hhrt+_mxlbO#AMUg9 zvU^_;!_H~uOi0#lQ6SSS3TbK8lV_c2frc6ACwqDp%Gba5-amJ%g z*pUV$MpJsq(sXV1Wgbr^!Lk_$HbXowMABTk1Z?dE%a_yb>_!!SODtN7Z+!r$H+m4i zWa8%Ha+frfG1q^Q@!Ur$^I?FxV!8{%i}Ec@HV1MotH8Tt5Ey@evjM46au{`hXsvD+ zrHEVXZ5v+QjK(3i3;c?5#MD;u8U;~L1^-1;dORznDfUOPK>ziHuqTGoHn#Qi=3!p? z)e@19a15nKUmXRk${)3&LmVDxs?Vlnu{A%gEU^z`y|4W$rnw#+6AsrQu z0gr}=V(7X419UEyjXhpo!-temrZ*nJouCc)@{+2or^7TE4JkPjJ83XsYX1grx1`9uB#(3TDG5;3s zHH9E~56Xjp=9`KcLNrE^`P0F|24$zdE<(L%eBrw7@U&eUSpl1!WooVQ`tkf`{VZZXwgNi_l!?975e~)5+ahu1(&oKy6kuq zd|Zmp%Yd%kh2}Y`@U2?h&vpL;-W?PDO`*E^O(X?Z8eGCg#8@DvfJ~Cebdul@x;c%` z?YflD`)O2$Mys0l{EJ3sq_j_$dDz4u_zU6#2D9TrvDW+i7HbB`;c_hsDU3`<75x^O zRk@iLFUN~$usS!(G{+>Nc>&Xpq@Xm&G5gT>i#HWT1+Nt*om!thRoyr8+9sTKf?-i< zC8OKz{muZsVDo(aoiIU4d)?R)O4w&Sg|OaFij9dDH15YW1@C`;faFyhO;mq%J-`&> zru5^f)L|E69UW`3BO0==JN2%7$VkjIRhqGAt;Bg%ISkUxV25|+d-83H-z@Z31b2RP z=S`wCE4&-N+u@1yKYU|o?>MXefzSBM-sK$NNDSy6e(Pb|8R)^=tH!|d3a;RMb8dw1 zkoDCFciWakr3|g4L@Or@=(&MNH>2?@$GkJ5$(W??;_jxI`}XXb0Uz<~$XQM+Ls*|! zYZpUS6-(dUr^kKrwy2Kh3&i~fnPj|q@wle2Wi{NLX0ILeqJa!SDYy@+X?PP1z=CFSa z*44c>7nUkciGq?IM&f;2vFRY*_H>m(X_Yb0yAUG66qbB=`{GVwH) zQb5}eI)DC>z!ai~#B%sZ`3o)(Yu)0{(fz#a4+2N7dfy4csl%JgZXMqr%_lM?*Co|b zx<8*j2{^SImLuTjN->dn#fO^I=KHUbp{W9~Y8C&S3aIz=fJmCQ zf4wB|+!JMy5RiaabX2P{^>KT%{%r=JOor!iN6YtGPlY8!t;~DCVFeP&4CMTi#TQEX z+r0V!hnk^rm6C>k(H{lQAt>$4>*BC$Z#H+I0=fU%*#AIoEeq8`Fggo3hhIm!29*i} zH4^@i%8R+_>l-QWPu1Ya6Et`%HRNcaUDI?&MhlsSBA@3w6p{m4Wo1x8Y<5oc(A?4< z=^x&*pf*)6{NOJ-v1tMhJshSQd0g-~XAbK&RMxvL&d2-^3AeSigMeO*X?NpCj5#38dMAP&61+Duhe1rL=L^33ky%xkI?RXP3+V2aMe&Cxw@IE}urnuH zgYl3pNgHvyqPG--2QqOa^VQVhr{(QOfw^gmL4jy{w)O4(E9h5S;55lrXf`JSeWTw& zeHgP(X2k=dN=F;m_*XKH=c+x%Z%$Hp=iV5YH(vjh!G8C7(f$!6rpu_uj~|07pzVqb zkm!Kd*_G>LW^r!4cP&c$`SPL>mW_dF=3(Fcr?xXsYIl8$WvTjMVzjYT)7xl=jrb{f zV{(YZlVznq^_*jh$;r>Zy*AtHW*McQ5<%8b%H$-H&kHb#0*Ee)RvOf<926RRZo|ca zEs24c3eGnBkCPNBQXOZr_cxd|3F+pV#%0!9I_y8eb6})lV7K87c{YAv+v_9W@`BEf z%?Rr{mpi_Fqvc}zTyA)-@>|RGAbW1actew@p}Tp4TgPk!nYqw@1*JT|NLG$x7b>|F z5QLfj9t6CmN@5X#SksN`3O>{TT6%`Soe*dkaTeIm?~&EYDIi z00#O7J3l1Dtv(UlS%Gxh%~F+f+Dc3)J!ik{LIxsf_(#|$yR!QM$2^19{{_wb2fqj} zhwfn4yH|p6+3&A(yL})#-4FtdgIq!s>01F6_E0Ihz^Si~rXN(fw?Wo_vQi=C1S=3e zjTm{YUVnGz@$KPu^W291sF|yjq6dN;Kc4gXY&#QUyVP?QoS^`dhCxjhfht-Ei^}B2 z3ik!7lYMWI&VxlPm)aIUwn%()9S?SW7C`b#@q(3Ewk_biOhaGswtmX;*L8ar$DWrc zn^qWj6c_+KHxRagL#ZbDH$#T>CEOUUfR%M+;)h@;o@fB3hy!&Q%|4~vV$UmY+?d#? z*7z!D^?0gue^|ulyCix?wCM#L06!ry| z`}V0?VMbKXfazeN$;IyLx#NCKcsoRKnsVQ09$hS-!OBf@llB`9bLLdJa{VF34G z`8{B8RCVBEt|aN?XB>F3XXt7Y;2mwP+!?wmk3_JXtuX}auMbj;UW?d|KP)yK9G_;1 z8SnMw@My5{Kz|UQ@573R8N}Thd1VdI+P|gszr!>I{Umc`3Btc`(h&%k#=c#D)^IpC z&H4Xd{3hH8Myx$=R9=ALv!2mUaEum1Ou1`E!{E&SBYk7AOV@68PkC4Hy z9wia#TVQz(gXOuZ2?H#`Qz+u;rT67*CA$yk!kWpG4>>l{o}1HHTxPirNgZJL-;={t zpg!7<^cTdn2c^s?DME8M> zEbQ?mJTEhuCj3@D+eFE=;=?F+8qE9oIf}U5;;QyRlgY2r!=cdwJb443@L~_#DEZ=! zY3GqCIwfx}Zj>2q&xspl^09kz(YTfV1Hnlf`%TL8mq>6sPMjg5^M;*I0Xlf_j*uyP z!kctQP;=FQI*4)R&09;F2Up-K9Fw=1eWLW{71E*{<;zLWw=R0_i@8t?bfudXvO96r zb-Hd17jiYA&YG{Ujl4Rs&j$#Lz6x&#IRsw9VFqp}ObGk$p)HZ!7L;PM& zE9HK?zreC+vBQ;F3B>AEx2LTcgKD`l^E)_TkF^1I@jxg+V4sR4Z}B;{Jaq6}P@{Za z$hS^}cJJFefXb*GBzfmdRv>1kqvF5;p^mT*(zXF*`zLKX9G?e*VEGk%@#!QUQYbl2 zlOz5mRd{!a!|5ZTx?F^|op9xq)-Q8v{eU1Ng=>Gyju=L`w52p{rEPtLn$u=MzKTqC zY90i#D`CLDqP3e@cm5_J_3_wUVgwBKl0*(NMs#ds)!ZFz-J~& zSMxQW%Ld#zQGHExv+>?miHwWBFF0RJT6@&}3L~mg+Fjiu87M(uoVPb`&(1TVN+=Le zIQAdQtw=v06^v+5DM)Sg=4s>!XNZULW62Bgjk#4)i|~fnt>QkAzqIbTKnzD$<_ArY z(!$o1iFkdP>}(=UT#$A;k>}}VARw~ zI+_J|)a;{Gfh47o9#{4raMlZ`+BcW#`7nXqSqu5rwV{TVfvd&c7LBAAcl;navN9*7 zcZywl3xHw`oCHqq!j3h@RAJVO!HXg~O{^qgXHF!KwdyOGxMdXwZIP6k0@@wBa;|r+ zOc1U%7@o@Lpjf*MK@HG=s#vy}n+kP-&0~GqMRR>T_5;0ez|5q{eI@VCqE1um7H&H5 zEn}e0DxT~I1+ltB+3`2`!SP&gAVmJ+!cnTRwKfN2*Ss51m>Xdm;CONtB&z|`v2QPi z&4UxbLkDjN0~|?Kx)_{F2LEq)`HuS*;A+jPf^e9VUkdbqo*TYU2abs=tq*kMm}4m@ zspIc7oC39GCk8y%;EMi$5!=GP5#Pu> z+cP}*#h^3JR??JraBq@Qo{xXvlk*XF>A&s+>Nyoeuxq;c0?N=~Oxd?F8 z44Kgs@VekmU9DA_G|lOhJEiG9q9P)*qL+67pZ0#BwRHrV_q`nO?WUR~&jJ_Zo#&5} zD(|d(CArqTyZq$taCrncv8g-m3*LA8{5Fc0C*V4_%(W)B-m)=5c^QX$(*MKNSB6#9 zwd(>R(j{FYAzji9(k&oe(nxowC`dO*BPHG4N=kQkcXyt#eBW>H@9ckGxN6Qh#(3h6 z2g02HUwIPSb4NcMpo0GCJeb0bpxV~(Ee92dRAaz{L)x!5c_R@)LVT^FMHly=jX2T2 zMIOP2X%kfHqH+mZL#07uuHBFx4lNyB+)8ufHOJvnYb$TbQK7cCC+M2aub2#`d@@e> z0AyOUF%yMqbPpf_AGFFxq33Q)Dkz}6d;SYZUdMNx8?8kJe z5$~!-$!V*cw@wm4sK&&M_rJwbX?YH2D!0lzBMukGPWiGOb!WDXcpe}-r6(Hf6qz!% z5Fsqs-_95xKpp(mA*BnC!+QQZDULhgV$0P=v7Ir)hSLTz4%^BNfIcW@K7LlLgGw|~ z-m!#;8);4sdrLGMi0Z46-eRA487YEV-nrQ5d@%a85u!X?;86X}J0n9tkC-PSQ8)Xr$iTz!qWX7#0Pw>-k@f#H)ZtglhaU zqPZ7g9dDc%^|Du8N!*z5``hMYB;48N(oOp0hs}alq2pi75`JE!7xPAtRf@!pO;6BV6A20v%;{}^gb*#%z?}m1**ugpZ6NOe3wel+D72C=AJbDDoA8_Y%MFfD9_`~I5r!<|n6HUcx-q#6W zn6VvgIM*_91^aR&=t`%_wfxp{4w--r!pOJwh;!O0jdv>)SJXyrD4P03V%rA2TRb<7 zSYom}o}cb{8uYf+=9!mcU!RjgDd=@|S!WOsCqWTWix?-tY~*a9w z7`2RC01BjO&|87v-%OC4Lf;Q4<5C?*r6%)C$g5{nnV#!-&{)$b?6wTM)4bQH*#}PO zhaXZhUInWov{;R)i3A`gvVDp^lrDDb158a4pZk*riC9Kmubmt(LC!s0IiM>pvp54s z@|CW_-fj%N*`M+`ulYJVsl%KBO&t_Q6`N^i28)NvIBW^0k%~j1%@!qLX!WZkRn=Dl zo^>Waw+51bYB}fYw&IpC#JLUuA^ei=KVj^;j8hB`FS*@;}YAU|_SkG}Gv<%t}hlW~6&JhS{aPz91H4+)i;L@MF^ln4a zDRgn@&H^A{rp=~wkjQ(Egk$D@ydI-4I3Q^esnVoyNu6|Y6n_FET&d!aNI=^ByD|$SuIqR5< zV7fN*`$uH;zr_|H`VPQo1{cvRQMf4IPS_hPh|4JdI&qdVg)Sxu$i8TvtVlc0dRCuh zhH?yaT1U+nRYz$G4HZ)d7GCe))ld#B7TRKSUDzW9=-lOFk5@37$XhJ|!3vRG2gYsc zXXmFa!KWR95uH*tk-d_&31+9}5}lSpYYSXl-v!2&&)YCtIqX}O1LlJoxRQ65qY{9k z)_Te7>|<yPO86UCBo$GGAq=tU8;c2oNpMz2?%~iWz}q5I-=6i?ZG&Y<^*&r@{KG zwntQBk*%K^kZO2r$jeQ#@!HcmNlRI;QF#CUc61@s>Y0uful;%t2!*?T{FfiK2Atig z_!g8MtUPq;3KMGWiW6GS26>y=X+bTucri>`Tzcsp*AH9gau*s~J*kO%drLA`II-#8 zTW+EEV@k|xmo9vfN_N}QG4wb})l<FR$SJQRd_=>AL>{OQEE~X)t)J*4NZbR_BhbJYf4XG0aKmWEUUA z=>X1^U<2_>EKHkxR_}`mwLQ!eScYSjDEK-ms6CQC+Mhn;+o6s1a{?aea49EQ!=!+l zCk%R=0hL0p(7$B}83*?I#XY-o-kYk=JlicURI`3OZkM}Dd-d|y2+l^Nw(dnIAA?}c z*0aQ5EyO~jJg8iowNLe;#VF&sn`l$TTDUfA)3?)e!Vtg!2~NVNMD_p zo3RjMe^H#vVyGok-!+G_G+$w%T+Y4NoHfrOh0}5xS32FC>xf^8YK4nHH@dgkk9gBS zp0E%sTl|T;)?4@(cp*`kasQf;DpPAJogY1MC48^<0cLR+c!ph<@lOsO`m&p9^f4`T zq0P9cwPx}NBjfn3LKsX#^(NWy>+;Ln-V*6<+w0CbcWGsBGmqej@BSyhXWuG$MMRSf zW6d+-QeHC2=kcn)@S?p0w*flNr9ovz9j(A=X_rL4WFKjwq($zzPF7+4dka;4SxzC< z0SGK0J|APLG8yZ%YQi4K?RIKpm4z@00K3_);IW3jSQjqUBb2uCrCE+lWwvVjq@zm< z_+)2iUxFfYHW|+ug!T9!D1g{rzyY;`Q$W5*Mr^Z+VDv*=50 z(UjMmx$w~SiB(qM)oy*=5Z_s-s`4J)g)+i$%?aGcC3^!s^4q*1?JJ^>xV{ti`wqU< zmly`VjY!tcZq*$}0^~fUN6Uv#JeqEP80{tbrVUuSG>z z`NZH{AYWZ^hVj{CZ9~Vb4t#OUH8AY>gy2i!K*_mu>S~i58zR?M{CTpiy#{es?q;^B z>g$RDuW%^te?MSJAp8CA!e~N~_x~%5V3&zf1NL8aZA{3@5jF_rXh;ua(elGB`qBLA z!MY#EKjP7)EO!{&9SfTmz{7!Ns;KtS#^)}1!CscQ zarrY6o7Lgx!p;5*wq*z;E#lBfeX{#!2!e?o^saC&c`CE-2AT9g44?QvNNLeBK-89g zZgbTlKc-GT6^vDx<0Lk`d=))+KFA7muW9WGp`1{TomuJ7v88;z~K3?D`> zWY7-0wt?5u2V`r@Tgx1a8Xn=s8C+ZFX=~Db{tV36t1PXgLg^#5mg=!ZIP5<_H?wC& z@#l1^<&vFp$ha?l;5$ouZO9=;P6BPShJ4};5DKQ+$XqGb`jdb-eut<2-pp|>j~#bS z@Ot@KbSnkaJm94PkO`H#vik zm;_zAjRtqQ{WjGlkv-;vsDZjK-&)k2hOR7!~~!u~tQ|w-aS+ zmgf)TfAl;T(0R@;!TA++h@vdl$Evs1#EtN4i)F$4JxhqMS(_?5MnQsCj)sQKHsZX1 zT@G2Ti&U8vkycEd?$WGI)EcqOFNL#|-Qrvxt7MHz6F1ID40a}SyAiD;hE|}@Kg_xc zHdDKSIFOX=Gnk>O?#!Ay`dc`OC#Y+YseGQ8XuXy8N*45KaVa(Gbr-D!qV<=X4|0A7 zdGm(>Sr-!xe`+3BhHZ$>?ZfC?>8Ki?ZO`XDN#+@=(Ya5sr(x2c8C+GAkxOmzlYQ|S%6u($pIW%iuj89j2Sj}l$7Km;TXA{ z69&y)7`o-Sp&F|jKOr;b>s)-$@AT+w1yF=y#L9$#=568Y7l%b!Dmz*WUb9!lm=%Zb z4`}1!b!M;~vD7Ycnl79XiHhFj80YCxUo#E~Y<@S~H!!j2)`|84`lNa(69&>Lv8JTQ z3zELLX60UrHc0h&*v*7bdO?!TX?ymhypbd3M6` z7A6T6OumU}Lrej-X&ZY{lGZ1c$&X>7tj_>p4;CzRST2axA0HjqtaW$j$Bai>LqC`= zv`F+AW#}aJ6#8BTwDlI2dnv*?#o=HaWHHjIm@9dLihiOwg#F6wWI8!-B4gl{If?y9 zrdSE_Ks9Z_j70VFXx1#mI+j7o3x?-kMB(#qy3aZvI0?=$Ei9Ugr(3Tz5p)V=R8^qAC4$2HbN|EHHY-o#I?qM8=;2{T(K} z-GvM+lPjaXy+w z`uBx(#hi7nw|oMObtl)~Ex*)_!2}6D-3;M7oX~GuYKXv~3!Sf8i=B5_t8X2;EN-BM z9pRu5J?aMhxSL9sMPS2*er~JGZ%sw#SMp}K)#j=4ircjPf^%Kw%t=8`z2&qS#lFFv z=yK`@?C^)}6f?|)o*xy{G#GX_6<<{jS443dP`f{Vcuh=&?`;S=!pTfRm|!%2LB;C zWGWU(kl{Dp1Ch0?G}%v?&+)VrZ)t*GUr@=Xd^acZ*#V|=UtX{$g$=Df>LxxWFWu)> zXmtHqo%>LXwK=^gU7Q?-g)%?hskOgX+A5G*F7yam82yO4Mph@oSxRwr3&7>CjqvUh z?vn7b;1<`0CpFflTnDfk@C1ekMr3FNE}Z3)^q9I95-J{?<=rp2Y@W`#1i46N@Ei4= z`V2mHL2Z3##Yb9LTj3Q(kQ9R6AM%Bz7}kKjy*#`tZyuVp%$nFEv2isa>n3+nRj8S( zh6N;{&-+0FYad^0htmWp{-)NokE-|)jF2HlWeQDZbEch+E(!l(U4!G>;XAn%KUo!7 zoIVXI+3!L;xF}uND%aT*S-lVOQo;^zk$J=vlqh8k%2Y3_#^lMjamB*INEPs98Edsg zMM3!ek#Zj5YZU(D1O796PDh(iq6o&U-xx^;4%13@H*||Oy)OlbpZ{i(b`j-eT`v0C zgl3i<`++4Xg|ekSDd7snZDmrNu)E~Lv>S{vM~LuBQ|Ftsln^y!K8#5d@+m1~jXn`r zf?_*G%5kQn=fTzvy+#)L%q}(V0$1}6+)y++4}5YpBde?Y&n5V`mSvoptu$fq;lq%{ zzu6N;*Y){|{wxwfU9#zV=Q0DeFA0OWEe?aYZ2iS%3Um7p?E6;JBM0YwFQ=^#7e1cG z+f5;UeBq%~!Vnt=`ybqPCh?+go};Vfb)W~rQ?27rJw)n`mtY9!#HwGD(6sj|aSZqB zG8Ysy8bCW68r3xqPwSRmlzV;ZhJZaoLOKs2g;7If60Nkc09EzQ0Rr zkQYY!_e+%iM&H#Y$t^FxT~5hc4KnnV?(HFU3xjdtdQ%bQRSCyJ>K>JuRJD7BKhU!%h`}<Sb4R3JK3Ah--$_A2;#_px^F&7BHb;yU=^1vk37dS zb25k?+0D*ak$R1VPk`*-g;70dhuw0$zVGXULLGXP@kC>%1WQL0$V%^mUBq2#XrK|s zslZX@C4ehI=?C}5_mI0aU0eTMy7$GW%U``Wwxq|S8$Rd}Ng4zw!ca~wz`CQt zJswIeR)wBL>{WEQv%yQ6_)ddv?J^7MWDpQowF;(Q!=9F_1NJAvyZBT)8VYyNm=fngnGp18#>& zd8TmDTimyJ2Vrj{#Bm;)JEQe0&u|Ko*~=w`H{ac9Y{n|f3%^)3Mqy&peQywF_eKJq z?Q0^2k!@s!>DvlH+Et3Jcifdq1TJh77==}BDj#NNkZdcIW0`yLIhi7}5+(|~wo;|I zPkYGoKWj^bSF9#&^ooYE3Nzkc)`j4cq*uYMb1Bj^X3*#=Eq@gsFd+4!iK(Z2*7PF` zA3=~L<%2e%YkotmoFu7B+i!frwCQtX7p}1L^Gxsdt7P}O_PYvj-esgAoEw~=`Q%*_ z4yB6=+|c3qz^}#p=%yuo3Ya)kcC^Gadj{=&Re!A-X7geSy$h)5H+-%GeU{TdUtet1 zJ|0=$%yCrlS&r#%McjOl!KM=MdLXYP`9$MVyrajxS=g!Xvm>K-J6YS(DX843e|I#Y z$>J;tEs7OlX!wGjfFcr)TXW{^P~o}gb=2BB>o`R6H#ajPlj1ykia|#5-6r|Ai=*RK zwF?0pBC;k1c>6=4zVzI*GR6gqqi_6atm$;B@q+GGGqy$&PiiZ23{=MQzwsu$S}3Tu zk~FFqmgkm3VqUNRkS5q9ALbwBLpFI!I+-trB$FXY+T4<__-CNQ;7`pA`~tGaph<{V zb+Lwpln~5?xUb-6WEx%kZngRA^&y_p=o_srDyAgf{UhtTx&YV$>S|;vX9%nU_{<&P0Kh3S}SPKfCYf5JiOy=no zWO^db!GPcegK35iBZd;XisDBQDHkKnF*jU}H)nb3&771b=sh<;>?=VVnqltx? zbD*~Z+?XV_K60#WRS-!Ryj19XSjURLc*n2bc7*BpXZ^+DOJw*~2y6`CW5xvBsTiUE z^Fg~ILOICdOPQ7;&wgT-@SAD3U@iORI1=C*{;-&0R|9e41Qx4}{}JPFyoJGpeD|;< ztkU-C3-ONASK`zw-{I19Lql!DJ9f@YvH06tnQk6Y)uUE_g4eBsx5_;}TRx{G{r3xn z7BD0eY`*aS#0>Y7PilyV-aFMnBCVtx?tr}X{y4P(T-rac&9i~Y|AJuI)lKM+qHrXm z(A|=Ay)WPt;)RAuBj4nHajQ`K`0`R~ zkKu7Y5!W;`0CLx6Vcn+&Ily)O`{Mt+Z^tMz~1;|>Sz z=8$Xn;5(SqcfLAoyg3Us9GalRwZ~UP^*=Y50{Et3wJo$S=u!@&!x~5o+~S)zhyC>K z;lljSGXOtp5*_HIC*N0u!Y0K+1xgiN6m`B4TdSHA{Rr%YfX^p^%H73Y?OHgms+A$g zy<=xQ&jvVWjA9C&_vn;;6gD~l7Md!314{(7uSpFzm2AL1041U0`>y-YV%mP zyMtN`FLp#x)u+b?j4wF`NVtqfy;|1w8`~pUf06+69hgdoP&@3GcOQb9E$5VB0V0Wr zGgPlILddI~F-b0}_PjX-zyP0hBG=eZQRc~{mQD4k3kvo^GeOD5UhNAY5h3 zni-SM`09Vx=7Nk6^nCOEfey@t{PO(6;N4s@(~kH=;w<5X)=?SJ(ky&-Zovw63h*Fd zs|0M^FwVugia(awZwtRejGCJOk-IatO5{uTK`1^eb)trt|Dr@Fo^UT{5G4ecsFUt5 zIL{r_%voCug=>#qOsN~nzOB3V;cBs2z>1AMnOfQ{J@9!VwXy9TYIZv=TRiL47_;lWWtqcQSq3Ux3eM`-FPiH@#?P) zmA!uCq`R&LNp=&;9v}Bak-tD87*BF0$U%<%{II@^sGbBm77x{4}7&aE9sh2$iN*rBTnZ;8l2SGm7}}L(aC{& zpdQ?>sTV&heh8j4A;v6y#lS8VK+*t+onDK#t)<=A8Jj6LB|+?jRhUGMQF;MDhf1Nj zrfsnBm-GXP1Ax_4VQF}-t#Rc&*M16D?e%nJX(n_n@bwD7LVUSEtkE>iwH_%F-1$4a zXSdf;`QO9xLMr3-RqHKLVOF#+Y(s*O`SKxgK=afyziM+9X2@Q=RY^N{+NS$(5I>L5&yjTGl}idFpN<*8TIDers%1)SvN7fl*&epSK$Q zBtwZ-E>y{pL2)!hCZ{FB8=nkB|#xgM+?wSY`e(sy_3GYfKnqMs=w~i`}EOz66~A>8xvk z6F4{(ctH9S+niP$5qxE=UJ9ztpzF z!Y`^nVAk61JpXkxsoi-B|Ea`4`VYhhUgS%{X#GGJ_jcZPETj9T7G~SbEHHXY=Xjwk zmd8Q!C4X(5%D9-p$O+}2gIp*T{XNvwAAegs$d4xo5>iy&sMGjO0D~uCCX+S<_8Qh# z>ZrCl5gLEG3lBg{#_F0&)SZ$1!ON!Jb){M}Q>h$$IKL|E78fZ&c?6o>VoY|y>b~T zcC5@qJ+BmSJ(5yO-bt)rdIA%7!#3FAnyQwn9Q+k7&?z=0Pk1Q#_98r|zB9utiJ_jz z=h**M8M+IAXI0cP-v$_XIynz0>B=t+{7{`3s>`k9Lmh(u6h0)`9oMTuprE=#kd?DI z_I!ZZ;B1RXVWfLdzco?!Q<)MEjml>9yJ-%!3Hq1+92XTHQF<TEU(6M%xr7%IV!OJ?H@4g{l3eu$k3nLSn+el1)9#NPFS`0}Q-OOc zXX}mJK|Z=#is`|7%$08I_iEa9odA)JXiDLAu~r>ww`8S6sUqTO>Kf_LuunyXz2}Mh zX=|sp9-CThN%56(LqrR+SkBh9+}%!+0pX)6FiLhB&-@x&k&QJ4l{FFK8q$0W_j;{) zMl`9o<~YXT#AwW>e=mRwzCc~^-`wr}7D&aM9({?@U>joEQkfR<7fLlJtlHrZBbMdgu&FHhKdzm2v@$na`UTm)4$Nq%+d}lst z+HhSV3O!t!RT$I$`w;RJU;>1uwjAs}U~YTE#N^78-Pg@^W6UN~{(?0mgkLy_$l`(; zC;e3}wq>QWmzee+FM#z`st(c)&a4EQvp)*n6j>0S%SCZsN$>Zx&}YEtvQo^ zdnEF!>Y#@_X3O%VpNNq+1$B2lxdG==Q=ODV*uzDT*zHV+@{m=o#cOB-E!a-K=>F@4 zAhNDGe1_$ojSm!-aL&NyTYMGxYtaoszX@Rxg%-W$LHPK^xJz&hrey}b#Im~6ea&Hz zo5~_ zJQyo(fD`#F5E9DN&#Pj$nf+di5ES6e#B=8|V$iVrA*q2bqwZ9oM>M|u2e7){x(n+^ z%jjEk_g(`iS(H-OVSxP$bgjKap;@4U=*4)x@>-33UkSbHgixk3f5kWb&FqbH!%DIw z-{T(I5*8puq3K7}Reb)_9ag^blScMBRdh>U9(gJ!{A+8wdSy=SmL_9TM*eCR8f>{vqeHqd4V=BI}sP?3aZ*;SFrHO3v8_t&J5dYPe`Cj9^ zbpgWWY4lXkw7#myFx(q)o3m_}=!u7MA&?{rz3P zj&hVL$7gE=D=9`B96Z8V0h!Exk#8nViQ3-!(qQ?ge=Dwr1mD-g3w=wAlUcGD;hgN~U^T3|=ZWGCY>EhJOK$JObVCba8mIv(>r&w3Ts0hl@L4lI#HDez)U zogLDI#ol9boGahL>50av-S)wFhA8U2_r=r-0l{Q)(ApQ*2IfCTyh44B|;?&ps4 z8&+|b-rBH8_XT0}^9d8IAlSRAu$*#hmh9#*ITtYeTf8d3xcly%)pOB8_G_51@3KCY z+NUD38bF1L6s<8>jgiz$NfdiBJs38a?-Yw*q5Cq`u!PBLlS5A6!boUVz23wSfKnNy zlG7okp2;eBSstNcg8fq}``qVY%BNgJC0In%BZrf{fK<=nwRL$^86@S(w29|B=5zQa zHi(go0&7HDN{Fc=1M|JPR6SjLpK{%Cq+W;b;d{5*T8~~VGpaM+XeV5dJyV*2O8;oQ z&=$sW;1kdTy~*_-m@c?{$5S8sM=z$JQx??NNh!W0%Ws~bZEqnlZdM-Z$y6~PhtL3; zp;5ow7WY9M*_O6}`ekN`x`35|i%tDTd{d6WhJ0V5)`ZaH>OsFsH~i7)pn?Vxic}H1 zmMnHFBe|E%E~)~P@Hl+}!)=2DgEh4k1!FW9`IpKNX7oe=iarH?;|IJrX##zVB$QKg__!cBd9n%N}|RawWG0Mb+%9R1N5 zNrE=1Beo#EMu;u0gMQCk*z{dPj(<{RSpe*;i0^jv^^3rz86?KKjPsX-bDbxBgRL@6 zsB{lFwLkUtK*hoz3aXVr{`Wu0!9&dmfiGLU2q3iX8GLUIJMg$pB^dO)O;Y$Ad$8YW zmUahJKjh0b)DjqZJ+1pW>~M%EBRww0Db1F4vREwgudOQ?$t6s>JGsyRB{vgxgKq^; zT6rG+coqUD>&K(-A8OvS8GK^Q;q`)?#sLHR`b8`GtrvQErTsSm+38Rcpkq-)yD7dcpKV zC!{ZeTdS^)3THy``}Sz4k%^j-DA%ukS!gs4dn`Q*sbQrM(Mg2LnG5GRtL~&NM=o++ z#c0d#+C=K&L6t3>qZsiic^|MAvn%h^tg7|+sPc1kewhX8R*;Vi@cMlXjHh2j?btNJ zBiigAQD#X4z!7GIMi57}`b0_~lydaj>M27B3vX#KCg_+W@Ri`>j|@9+FR~gz9?dE< zMG{5v#8v6QLA)R<@OV+=K*c{CG4x9Y6sMrgzb!S+w8T|u)AV^izJp<<@tXSt?v>NH zVpK@Q?>lJ<)@Y_UQyMaY7vzP`ta)6tsKh)~1qyF@i>dei1UHS^CBEHx)p3q^{rFERZ@p`;K_t&;3Fno!F!DG=NB1lTqv3lEr>+@E> zfs)Ct+;h(gChnwYwZETMl50L~TUT5+I0nSoWn;?MjJfFLk^)scxPzmXuTfx%Lv|D5 z+Cx*clREiBuGpn>Z@*%)Oi+-$;SRY5RmCPhOql1k$gALUOKucTjZT}J#PIYQw(EZB zXD3olxi4wVY={;pt)Nf_Z5uX|EZ$KmQ(iI{CKMqLZ3<@$X~+?yE?Tyll^wCg(z3Hw z(&3E73*8|c%k-A+#?mO$CI{=S{M#tNLby)I|GT-j@nAfx8m|tuj&x@xk8}g{ZR%+14@XHVOY?qIO6`M`AQZX%OCTOdb5M3O@p`NcC}1QC*e}P*T9NZJvbC9 zSFeRA>+tu|oRTt@hzB`S{<~{7y=pC5DIP7)A0N4ogE9;Ph!+>ABkq#0gZ4GBe`AVv zps_~J*CX1T0n_J+v5zsA!zWB(aB*!*Q zK>F+N{XsN=BdYvQOCS7gHwsGTmb}h?D844Du-lIJ4T!9b2-h`5jp@D*G8tQ#A79a5 zekNi2I9!3k?`o2pDT;O5{wlv=_X^S5m$PtisaJhnBI;h%`4=3_rFZ7bfYyVu%0 zu-f;EK+tpeo8-KA&o>PJTC_O@$PJ1EHD8>pY?Lo7PiPxQvZaXDvs;wu?58(b9CIhV z5+&bxe9Qx@twsKp@55sV86H$}sUK#QPMW3A)NN+Mj|SacCf(1b`e0%v@1yW}Pi=dN z1k5jfCP3f>GH|Fw1=N7G#R8k#^0+$Jx2W4-`6uM;C!^Nm;h@$&pY!;NC9dOr36#Yam*7Ja8J<2HWdE_xHLqz$sn1M`R>>r`@Tk8W`wm- zgM0)*5Y%t>lv-qhEi0+&%&?R5O@d{35BVY6e%1n`PP0gkcEXgMFxbv=5K4)qK`8yf zWhDzREx)$YxIS{z&R%Q=EEbKwza}XGYSsDPf6ef5<$^(+tF{i=wfRc*31<>&Ny>>V zM;XD8+CTZ~MPH&!#%Hi%V1f|9Wj7)qlQ6rUG=?ncoLJX%psG(>zIf=(UMKa4!j&Yk6 ziMhCP;C$E+d|<8|yKV9>O~wDpAeOyg=v0fYPmB|E?r(;!cE+|I#t+Ll=FBA1b-iq1 zd<H}i&DCJCkLgUKQ5|=EQSi*WWw_tXVX!xj z&f{t~>{h42b0_3X7w>5}Vyl(E6$$Pm?mz1r9roP==4HxmLagJQ^FEdt&L_EKvyTn! zLat*v-IoRy;Ko0^9Db(#G}MD34bp+bG`>W8&%^qw#o~hD#IGjw-%tGSS|ZLD?3d&B z-Px~->r-cvt^Te$p*0Ml@PH%E`7&bcOYLW(b)Q8neJ-X;zuueRb-kPNHHn9HCxPZ~ z<3CE|$uglh?xic0^*9kT8KiPfB^A0|eWCg=`Dg8)?&)rzP#1R~D@TnlD*yb9zftL@ zhO7iGT`vCi)P>Rm@O4h_KrfLB?YF*Uh7RnZ#@b`pn_%Zgg6fKY!K;_>*|)}1bdwJO zw+COmH7(z=G3x~0i$4pburB|M53Ujobe0c=(Z=%G=zy7OJm3AYKevaa(y6M*-$z36 zUJVvKC6wyQb8yY4(LR!>Ow`3}nTs}Gt7|y!teOcyk`%yWFTV!B62w6TUoGUwIGj(5 z@u%$kr*myh<$IUFl6@OCSMo~b(6?&SLyZ97-6FmWtH zaWwq;X@kOlznUOjsLsc5DL?e2}Ham#n*GC%-X+CnAGo(^4Q~-n=3MThb<>6jVP1f@Cs~r-L^GRgbuiIIznxR zkquB4I+7VL5vtbrDZR$Sd7TZqIsU0!i6xdH!)SmG&#evm#W_F(D<&Y_JYd5?{*d91 z$^#}J(IHjER($;R88Yo;qCf>`2ycGlwhSwkmq;o2*fjVw<}S@Ple!NrM8vfj+QFZ_ zYSjM`XraaeP**cENOQy66SZXqq3NcJP=WtMR0T0Rrtwd1vg!c4;@=xEEA{an@W^?c z50%qz$3ac1yZ->ntGkg1Z_(Z|{r1QGp~rnN>W+TX05U5FR8;6)pq(})1@#i$5p=kf z%Sm8uWobE5rCErA7OoRB6Z}@t!8!_CE4KifrxJo|CYK!mD_ewlFyR$QDzp8gvc%GK)x^I? zEm;77fJ8kZtv;QQ{-HIn?nv~W)(?b8Xxy~gNfB=$(~$~rxWH_dMj@!~-6eJNKIV7G zYQzc$9gkjjJ|C0OJ}{j16iLLFYU{EWIveo#;p@&;7k;M$7z-naXlnwz5{!NqT_koL z_fvYW8Wx;A_Ulbo+ZJ7(9u!;GO$-P_uStdjf>S?GwsJTr-En|7N@iHWwg6W&5-^C= zqS&LC=H~|n2cRiw1sxfq^4lvg4>I&Ez+RU?-K(iVg3F?oi$=`Db`ZcEfJX3(O9Z*r zs_hvkp6l-tD%E1%y|9_er4$wR!nmMv%xUUv)zymcumrJS?F+w3X^(F+haq>FKVf>j zEtR1MZZ}?&+*`4jbGCg`u?@knA*FIw-@mCqvJOXDzd4&$FQALF+WXAjAb2-3l*yQ; zuDY8Bpbwv$1fQ9jN%Qe{I(nWbohnEGa3xV0@OUm*J#O}9<&JA z!m*k9!x+5Sa64BkUs+ZLVm<*_%>RJ)QElITwI|!n4nhK68xN-I$ARkbI8|IKdN7CY zCcXWkae!k^8yHyXf$39V8Uy9!F9H^W4$1`WXe;ll#-*^HEnwree*JqBwLP%*@|F2w zSU4dkBjLV*e{tLn%QH6~QT@e})q^vfp}oAIj>uI$3d^g{hty>?Cxd#X&5w4 zU&xQ#oNY-=24mAf1}y*l(4yDsop-2YU^*|K-a5N6_jtWEh^JMffz^yW-5wbo8UX8# z2i6ywM~3`Qas+K);g@1>H^{x^xyhQI@6K#EF}Mhb4L-L&eQ1rFFDA7hjU73wvR`mf zotHlVY=L*#=J#w*8H%+A#Kj{Uo0e?C2^({p37Z|NUI0&I%pokdhOu}aI;0!27L-W= zVBrwV20sIHngoB@Ioh<~?*Ogh4R9&_Lsbjv4(xO=dK9&S!~Q0P%g$hyD8La22p~hM z6Hh_M_sf8_dSVMey1|s$77e&H;DI<0-FaSyF`Xm&SmhK3#dx8WUi;d8&+10OtHS=n ze;sZw5i;awzQmwH#@}4lW!@# zwjj;cfzRUgi*A=G*VR2r!|f92=~76R84tg#99AU9G4sVG=?mjf3U|y9@c&j-eI4ah zY#%{~XxXrn+rbLVcT#hHe;aMRNp6KODO%5SnBpqxHiSNwNN$Dg0(?nRBUegkaQdwO z;;yJwcnJlksdD+N+fd~&`+YidAD(BbO^;(fWHX>vr7*-*ARa{z7w zKZ81iZ6id5(R1}ZW!?h}w8eQc7mc8ABnEtI5ND)d(W3;K#5x7FL#fEVyMYm|5I`DI z-{Z3`&fy|1G0~KZ=MIo>p+Q(7S_J|YlSQu{wj~%goW$ zIl_RiX@teKlO0oGlm)+xXDd#6)|n&1!6b#Mg5t;|Y}ORuf}pA*0HHKo z2>JRf8sbR~K#(9n!yN*sf1j@E{TT@%ZQPxcYO!TVsldK!G+_$*f$BX+Oo=}an&04`T)083zl|U{8DE#I5FCc! z9W+3@2xT3-2D!ku$qjcv(3zXmU2T2$TV=B?t?|wy#>atJJ*wb(n}O83V+8@9>GT!NCHj(J2P1jgq3VfsED7+!djuB14bD^dcYMYCr_1RWoD&e2h#%>N7ywc^9Pb;<$H%|qr_EM>W+%CxWf|=B ztk$p_Gl1ou2GX0on;ov222xva>f?6%y#R*BXq(4D1_m-59^T@iM1EtP#AVkeF-*&Q z2Nu#Y4lFu<^R8$pB@WBg_?eTH^D%|3Z{$^n-!RC(nT9WD< zk$~Rr#@8eM*#6PK%>mGN)c(_fg>Vn;$7jc)n(BZ5ZB~w1={5LCzs}nL#@0eWkFlb4v!&qu1fwa<1?`W2Lk4F{o0@G z5VYWb*bNiUp%Wf%h502ooDX3|u4He7A~9$Ps!_K^FQgA$#fR@v4%n z(Bzw&2^s?&_#TiTO48lE#VFT(L5nlU-5J%kW#kLEkr&Fe$fZ6el+8c`jN^f`PBp8>>UG$)7f$p@IJ1 zGRz^gAo}JPnzs-Si$qg{F&>ak8{Zdm1LqFVXNA~^;38_fEI6fKcTm~CM)Mg2+?VuU z{*4BAd3-3YqvHjv>K?1n8#0W|TOJZej_05`TE22i7;u|f>$vVQc>m4M) zbKj%!eV~aH3V~HG6{~VEItx!>*U6Us&g_S!n^MWW6)1521BVXx?IqwEw#-Df0X0DU z7h{3DZ>vU(X_2uS|E}Rc*l$9E1BLM3ZxE9dINX;FVoZ&wWIp3xMpMc_bSr$QPYhb` zNCoPRS;g3>V6H3EA1q}EHKNjB@Mcn|c1P%`s8rtm7{FTD)$eXDmNi*QTvPmFHoR!AdNuYlHfawiPgbKoF>-fk zNwwGP@^FWdc3q!*@<(~IYgR2z(*?UPZbV3DAVdN&D3=gymnrZ^FN)R&{Loxd%HFTmdp zP}-d81tLd?8z7m5u6}AGo~Szj%hyRP!$l{o>z8DPH~euy+VBP*8q?95(<3M}y+JN2 zN@g>#Rwxq2QrS%9VOHKP6&pld2Z3$BZy7L%I_>bjXHokHAKMLtVw{i762(1KLSm zx+c?f=_NuuUZUi&96uQ0GsBg9;t7uB%6J4iBauQ0M4iA9xAc7G9fSRzi9)~K-C&*4 zL(da=adzkR6(@F%7XY7hqz9c9;=Zv-cX;TOs-^2L&Q)0Q+>XMN`G_yySId+lzL?)F$74vw(3Z1B@%F>^*oS4D6zv-Apw@Q} z*!?&8F6a#d;3;lIY2_j|Lq{N6pX})sQdZMJUHgs;h%+P3K8(7JU3j<=Xi91_FTWj^ z(EZ#qi%NXfq{r}6-fva@Due4#5aXMlQ<6JZhA*eRmV7aL`f*Wrd``kGki>s6yT+wk zsPb`$68j?gpvY~e!SWR^JD)f6-@+O0P&oM9P=>1^T(*vIuGz~ZqLc%7N#hsNL{9aH z2HLe8qhs4~(dnq?o+ZCPZYMZ<_Kc~3+prC*+qdbXEv7p&rpT^o%xbqHfdrq{3HN%k z#$6Mk&+YhSA)LF1D@w|TIQx+S!2TSfaEg&@ zo$0l?xAUX(jH9aJYg#4~Q(O@p3T*zh@fHTmvl_e+T?umnPeAL#|D~{+gm80t4B_8r1!libj>F?$B_&47st7*cSJf3Ng_^ z@u!>}I>ONhb*FH@FPM@xs^|Y)Q2Mwqdjfx1e>8*=tu*QqzFEXcrmb;k9g?wU1qozM zL`ARqK|AY2o^$ck2S|N2B^>mne}d~2wdY|Jxk{P{U{5i)L?>Xc8$cG&_8r)ZpNEA$^1;F0B);PFOak;xrKtgiS}HmMe%Q_WVk8@tCMx76N*VB z6sU~Li+mfRW3|R&7%!m-QhBG&pyq@7n}kIz)R?px=+tg@y4PGEM<4bDJtnKy4je5! z0RR6Ag#|2SI`>iMtkbyjDic_tU65zbnJ{LpLx`$!=@4eSCxzYJCcG#nxv*B(-4tN& zMNM>)>ln^;jeV{9(p$$%3`Es3)@^@La=hI8{w?%*q|w+9?qXbvdrLBKqu#FXwUDlU zXa+eFW;-ZT-*%yCnt$>zwMEEsQ=mDVx@95?OTj8+FCJD%`$+VM(pj+`MP%z;pA(7u zWzvQZ<`l0b6?Pko9ov1yR6v~MTRB9ECrd4U4(pyVYwp#u&Hlg!1U;e^o!xNN>m>Tv zZ8@A4^YN$*V3^1&Q&5Nw3sNOG zEvVH>$s?3M`{sv|A4f;w*E_a0q)yEpW4+vZsmxE z^_!bAIsK5C5|^LD7(}=(e^?%{-}n6Iy%Vjp&z+i^Q}yO4zc}$J*j8rfHwuk0RLLB7 z_mCH21Ez{7rtqt0D~G3-{&dKsB3b;|!c($cI4lKte$9N>`utE-I({X{`Dd?|knQyK zAFqaQ9Vmn$Rl>b~5?Tri#11tN@#iQs-fb-HC}Q&&u=5mTFHO?fE)9QD!u%f?E@|p` zB!WC4!dTaszXgxD&DK-qNuFkRIA&JbOwn{Ky+;xWhjKi^+jb(iXYSk=Px+ zvp5MuTDaJu{FWxpTc=&>(Q3f|n|hQWuvYDFwP=3E^>gJcI8Je-+T9{)&I-obHR>*| z`iSw*x^mCW<4mzmDu*s{%gKqzPp)qAhonw?i1+q8oU5=5Z53-5NGShcmUgX__60Zd zjc|RcCSHpa>qX-?{x>%Bv7?5N@-F-W>24TKlE zA~GDZzi#{gAGQLvQ;H;g&;jPq-pbO-)CtznHuUH)cYns(sjb}zb)XA4bl}UQq{L4E z27KkMvmLSCVU$b|zF|=BUIBT3E3OdnU{!9WR`Bme+kb4y+#L&>{^I6fO7Y*%gPuhe zyvFKF*q_6*x9S2c@R*tsZmhp?Zu^gswh1Ol`kHv|%Kke2-j^2<-xwP?rg&iMAhxiU z0GrR=obA;6+eA{D(C!qTx#HftZ<*hgdk_hh`|m64uG4>4;g8?@|7;{FY_y3jSInlL ztmXEpM(gWKYvxNx!LDSl+ zcj^jh`FKk&yGmR-5c!&&E~gcDx(tas76Ak=^ZiI@lK&hnYj2dd@>SyHl(?=9-#4rS zFF-Pf+qCl|;G};D?Wm-n;Tn-cF*r~0o8GW6r>6e=^O~r17!H-&$AH4a|C}py2}HsL zh~t`jilr7=#d?%CI4sQF@+oJcpc`#x_4y#2~k=Qu!!X`I2b80G0XR0-x*~aO3+&8ECAL=RbKo zE@eYEGphAPg;lv4mR)BLFM|IxxS8$$8l3ns1ps#o*O%Gi^&LgyXh$Ls>-j0-cW)LP zqW~S`J00uoDTRODbJrK4A4509p{?ah=D$4`9eA!4@#|J+{#jte!KSgpD54_u6$)QY*m35&ppM-hALakRKn!fahYTdwK8Q z&et1>IR5(z|Hmq%Ij&qBLKcBmW&FObNur1|V|YFkPeD!9kX+#>o817WV=jxSHOFx?NmSkk-G z_e7!uMtYUKc;58qSb(SLCWft}d{rghA4}(i2b7JzmQO_}ks-}YU67%J=2B`dXb8(= ziq+j`;h%xlkvDMKR!Y~JVLH@P3ue49O*^v8Fdd2dzGv z)8AImD)r!gKKl^D;7%*MU|cL?mjFaoAP;YEIrkHf^+A%&zwwf#(jov z{T&3F>Bgu2&k2J~oq`}_hi==OqQryhMk}s^4x-I$z?1dcCsbR5IrU#KFY0*t4{7HV z7wY_>FYKMdPNs3H@y;u@Z;0n?upFS3m(UAk_lo()Nwd(bx3T?wsqb1D+DdbnzZp~R zSU~oTqj(Fv$k2eB&_13L3O9EcUQ8nW{!wCGH10&uMaHd7FsmnUuMl`Y=%4ZT2AA*r z>FH@R?}ljm_C|jPuT~b6dV{6g2y1X7L^C>p|H;maP;F3buO#2xg2f_9X^@qw(0z9* z$*w+H0TK6trs?Li)`WTCbH(XQ7FFu}c0SoZ>j#f+k3>h*!nTTOlz33oHBA6oZn4c< zWP^cptCN_cngV7!XXx$YXXnzMxw;hOo)5q=_L|RHneE^pT>vU_0`HaY&@KX54_l-$ z3pdNo1dMIDAL5C0(*HbrDUlPt(@43#GO9xXBmOHkxe+0MEi@#F&#Pm=u&Rbc6TUc3 zLo)X5AM3xCf+VZnaJ_sUw*i7sqM$&`NZWK1_UaVf&KP8Z!hS2lbfEVbdG-_AdMMZB z)x8{QZvi^6Rx!#bQ%G65!?2)a`61yu6tQq^zPx>M9JK}&epNESSf~xl9y0v`ddiFz zb^e$z3#}R9f=)iHSYnmmf)42q;6Byp9ZgEJl`c>Yet%%cE2QCrr?dCBB*hcpM&k<& z`WHnk&A3c#043TUX;(8w!1O2Iou8Y9p4z-AGq0d=6&5@H_KDxt+lO4UI>R0TK?Jmb zLKq?9HcqttD|Q~1f-Q<;trHE&od>uC5YF~xOpdPM^$HHq}+VQ{5+VJ3k3{y9SjzsBt5 zM?|(w{zLP${;P8yOXDCScH6js@s36H30Bocgl8kU9DM0{Y}s8rcIq-1m9+g$N4XTdf}lKT{q`X}_$nNU#l5ypLbH%Wsj^$tDc%JBhzG**vZtoS?<_pCCos z+^(PdW~W^eDCARQ;y-o$)^ur%Rw19C;HUxaure#iV=0oz?X^V|CKd0US`L19@d2QE zFP#eq9lFAH4+Isk*YMl_wqi8gQ25=sjObG=PH?bV(nq0F>IG2KZCKRQn-WD=_;cKr z7Z9Yv9Rhv2%~pBbE2^l?3}Njj!_oDVJAee7}YlmB(#!m)Ux#>Cu6YOyB0J>)xu;Vac@|X&#|d2@vC=x zPpT03@x4@>I(y0;=6-5ERyluC-j*iG6$sPLH{WoUEdu5E$T-Fv)ByJ1R4NHVijlC+ z5MpZ$l!wKyWx8LytbXtGt%!(H%3!DO1RR&3Ab1Zm20uc#t64oPA{=#wRBqLry#LJ0 z%g(7zt@DWX?T}Uvy;G$}&cRd*EkvmIxp)~^-pt)zC>ry|%277IK6Ux~s$%9WOTsnF z;YQnUz8PzXbhEV~y!`vL&d-f7Q-;mB^SJyn~9%peHy{5GR+34I-qM4CnjD8HL^zYSx}k2XpE^g24p!)&Q{Ns*qB{OHo;J+~{o zCNu7%Lhd%8Zjy!uU47wO_l6RlZG6SBqAe^hYrY^-j@!{Lc}73bZ6k=qQSgtQ5hH-8 za4ATn&a`bzC$S1WH1dAb)Kt$J6jt?XtT^LrDT141B^s}$(47gpmSftcd(tR#E3eV| zfDe(bGm-kJ20;)&I+x>f^f3^D2N=mgSH6L&wFQ>(2>&6N`RzeYTxa*ujYD zQhnjy5$nbCY4=;`Z;Vly^?e1uu2mcU?QP4wdR@l^uM9En7NnrDf8$_6g->b#&n%D+ z>W3u+t*A8_e}y%@JYz{27v_IiVOS+?0gLCP*;uW;uc{8B#InEtksr}+#B*mcM?295 z)eCsXsD;`I=ki+|BLDgfz=Wt_xD)Fo?SkD7JO+9Tq5T(poUs1uGZ6#tgEWQ=S!$;6 zS!-)zG~s{0EtI&4(J%!LRQ3_e|NvSl)sZPwMA4nBANf;sc-(1KmOHcq* zOHgiwTsTz;=zzn6vv^+vw(o18o!;u83 z4{}rQLJ@;g=@?w7o`2;hYK+}csEuIO)N;@*QQ~JGs{vVNeyh%(Kz*x#D8!PC>n%)_ z5OIv>HcfStp#T7M-Mr5SpLM~}R%%p1z~5WKO9jQgOM!sKRAybv{?% z@eD*<_EpQxKnO+1XhFtjRJgtjDIl6Pgzs}zQAmMN^ zQQgDMcB^kf$Hl1)`9i zvagjkKa^}jsu09m*4CYI2#A(j;!4MrUI0)|MR7akjzcY|ix;U-hk~wvhxG z$Lk}3a=Cltg+Iq4%?2+wNh$ZR%Iy>Jf#~t8?m2*QnmjVQ%2bt+h03dFdTMwkusnt5 zvNV>e{8@BId90=llQrlW4FfFi-l};Ml@NMJ^NFfOvS3?Z>!*PNx>xUUUBueM8k_0_ z^%4(|OLo0$jMNmK*{x)v%B(2MpLMOuT<_+5#}Cn&{op8VY8xUJYk#URDgmfhg>Dr( z0GB~~kg`l5X`aGPSbKH*MY0D7?=o$JD6w%f!xZD=^HkhA$CCU%LFjSom74FD(F%S4 zmBisQ{x-KuT83hOcPtLL#uMmL5#@oW0iA5^n6+4!O!eKe@{$^Q@m{ps@4v=OhXzf>+*wkN0yy5|MMR23x$=;biT1QI&ZkTY~QsVe3U z4|hM3VWJHW7Z!N~`JnR55zeKhq^gKvV30T|UO2DSa8eh#+DkAI{0(Z{ z>Y=wb~=Eo`8o-t9(J=s55`oeYyGMiQy8p;Sy{o z8%-|n)+6J?3LXEt0Je$88$#6487#6iY3eBh0_uuK_k3hcUbl zy*@p?-*0&Dh20RJd1?{!C-=NtqDTMAPIt|B7)~~VbHLB{g_PvI*Fql4$4|Be)jCS- zn=Z;_O)2T2@;eUD;+9R^>Q(0Mcp#XAn?f;9ZsPGMLF2{sGOLh0qYA$3!XtJ?#ec;w zyW5%rPaxqi1+OP)cXcN6AC^mg`U8?fdvFuww}xye!M*&we+W%jEVU^VEI$DjuO9?;>MqyA@D%d~&PusM2$3~e z)X0wKGd%Wp#HAD`A4(3UXljTHna?Yx#NnD@Gm6T^Fmt{7KE44kdUiAV z-?y{W3ZXR*X8UV7-~+sA2^b;ccIb&t(x-sYH~+pH4Hco7n(Ip^@@ z6yCw0iB#uiO3>kw*S@C3>{_8Q6m#ol>0GCUa-Q>4Gtp7wvn_WmqibL;@(2Xh!Z4fS zS@j~|;F?@@NMKsc1d*w+im5L3`kFzGma2W8_FqLAB$}bb70| zEb&HdahIIVs`k^6P)RO8L!HUD)HzzzoY1TvGRk1}3#m*rnd~>0|Ey@*8WxoXM$2l{ z3&Xq$1Idvyifnx8u^gJ$D6DlyI|Ywubx4a{*Y4okqh%a0T4k!#)Ey~zai*JpU-A(5 zokSAyLnqTU|JpWP%yqBQbKP=RDhf@$O+eHDsrt3Z>mX&9Y~04zKHOBv8&8C2S*(2Q z`r6Fv>NbE+gBlyMwgX`Lfe)JFLcu8ZZ?J`%BP8JxHvcgKrx@<-uyeVAgdq{0x+yjvFbMwMQ&YL1G2XENo7~uT?glr~E zLnuvl-34`2Lh*aNY?@o|z#_zNCGr?$E+(`l$JAQqyK^YAO{=;WH%5fkMmi@1kH}y< zouga5**|pV!H4EHpUiWQZx{mD>W_t`-V#b}xiI*ww5u;Bh+E}~0UmJBP9t=>K{@Q_ zh|3#Jcfg1c7a~|;z?XjONX{^E8+DfdUc-_S1JWQgI~vKwcV$YS&E#sj3hK8C{cO)R zZJY+Nol8gZW(dkT1r>N{Qn_n37;hE%{n}Yz7Fj0kdLS4YBGLu*#lsN^k4m5hg8ItQ z@*=RlB~)2OaI4m}@-$11N&5n5HBT=+08ysvmG~Cd{GXj?qIyDGEWqisgg@O-t)inW z0Fq-Q*o+d%Eokb8IOpbN<+MezE(~DA`xh_A(V6x;QV;20Jh-aZsASzXTIu4b@2RiL z9I#GaJ2D^oPBw<&V|RYEIE(?KY4YZjw`Q=VgM-*Ay}W_lPIi*`O`!^P?C9W= za*@$BTZHki0)pq-eGRWgsUmesk~N5TBQQ*!SX754e;2JIy`%U;pox?BeQ}^pSiVh^ zjGkh9be~YF=Pc!?^iTXDFLAP|1k&T7>XcDO$#6yHrR4x;Pxh-QGPPNi@F#KsxNFv8 zBa2=#$DIcF%j6Gk1cfwNlyW>5OJtD(hcdmx@&e+-K`{12&_@W`s0s9FYN7BaBZL4| zwUR-^5Xy_eDa}nG<>HVyrwbZAfT<_KXDNAAj#L;~t0&h@$aSjP3bbNSFf&mK*-^|y zPm0_qGPe)#g`iTmEloW-KJ2y}NHJfDl{}r2>wzt0{`oN@xx4@lYn21w;Ph*DU*#;* zD6kPd*z4BdM#2n=M+sW@nYHE|5pWVvn5v5OH{5uCJ=@q05J42>V+SiH0Pw^e_r35o z{p~eU14nUGX0%4Rc!O1FQuMbZhe~!0GA3f@pNw7QvR)H9vXK+FFL(wv=a2b@EKaEb;v8M_noL4TS zz=%Bb5+|HOuK!Xhsw>*xjS7>Tv&=<9+i)T30=83-SuxSy*1m$9_F(Dkq-btoGa)-E z*QC>Quk&4vTShPaztxlF_)H_kg-Z)m8WL#!3_Hk(&W1gS*=r4Gd^>wNy$2bZdtZ1o(?BFG*?2AcoM z9?>_L>K>iG%aUot64RuHrmOWnZwYK$S%w=vBASRQOCYCK`-M~ zcfLR`6@#%|k#&)O;)qrcga7h&U`xsU<*s6Xk5eQ+K?&jN1Hy(IMvGa<)3CYe+DwgF zUgzF8u_%6}`Pg@!b1=z|Ltb0I@SethNN3Tdg!EyF*UIq`kEE7xdy)9G(YaoVAr(%g z$(1u}R0M`PuhV_m{helt^l9PzApC*wb$l<{f9w)^fkZOWKC4T3XuPDb`!;ZyG( z%#_%*kW!y3a|r}x0i~ozd_p=XdD+L5s%8%Qc%yCaUQm2KMte54x?E%_*uE|*g%fSS z5e^H`mqyg|jPEKP-}5OC)?C_&aK9w>C$rq8A1vG+7Wi#1{B&BfyhC?uqtV~jn~z}e zr(M_c4WfyQIFcEkZ5k_$RmLG?J_jOC-Kix|wOFY*M5;4KYo;($>-%3N71r=U8&7)-v^^3`xrNq=M7`Ko(kz6cEu#eLZw;C^^4a&&vna~5 znfKMGRnW}e{uUOD5pGFIYD_mCiuji^pvb9l#V^YNpTOyGpTyK5a)d zUFAG}b;|o{iPb=&e3`^BfYCNSRM14(&WKQm|u!SpoX2L;AKMw7@$A{}_)d z7tH;Xd5nkz>tWw(GnxZgoYVNBn)1TruWayu5 zYi^KwHc^!#;d8bb;%BwC&tW5s==AD$H3sQKq&a-k*yo>k`Eay^CD^|X_;EPM_D1;} zC&3-2CyAm30wKY}H&NMVv#19qSY+tN&XJmPs39wTB)~t|RFP-5MO)2lf3qn z!XPd*ofp%k;qF;)OQp;of7fGo%aK$lcI(he;Y!uK5TY-p$GEO?W9!`X*Tj&Q^NqPf zo7ZUdUQXE4@Jz;kc*tWY25F8Pj;o{<-Z~~L}9%`PIp)~e@y~*e*cUcb1>~JV&$e)_@3_y8OH!0vX{D$fNSB5BZFGc;(oAE>j^w-%6ywdC1_y zt5!8=8~gPWkR=&!6it50s`4xXNo?r+F_`~Yoo`@Q^q$!9ta+pCQ3^H_37M_HE!hzlYGO<|4CE%+SgS-)xr zJ$ooKUyER(zIZ=0n!F<0{A`+7aFc-z`CIDfQw|9GC_ zASp%5z`3kfFUuRr2%* z@2P{Xw}UpO%H_a%Qn|jFxGzO1tsREHfz$`KVx0kAtg8ixgj)5m;hDKrOK-<9J}hdH zjLJ=I~3VNs~Gn}jWuf3vog`j_+AI00DBK+&4N}!C-#z$DKm`*VnnzS ztXp(_?0%;GGMmLe1BK5JP_cv)^d+mJoXwx8sW*E#{I@3UKd(iPE+xYCQ6A&jXg`Wc zV@2B^SJU%#7~3f#lIfN{b=B3^#OWCo(oRo^JIynBeyjK#aAELcE(co4hB7_g&8dTU zy1l>F&+pyV_l1Fi`{5iqhInn}|K6b8gIGI$N8&hd)TnakW56FpS=9^q(q^~*2dLNK Aw*UYD literal 54649 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 diff --git a/chapter_stack_and_queue/queue.assets/linkedlist_queue_pop.png b/chapter_stack_and_queue/queue.assets/linkedlist_queue_pop.png new file mode 100644 index 0000000000000000000000000000000000000000..f964e460af964797b7953faa289e7bf2fad24127 GIT binary patch literal 55909 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 literal 0 HcmV?d00001 diff --git a/chapter_stack_and_queue/queue.assets/linkedlist_queue_push.png b/chapter_stack_and_queue/queue.assets/linkedlist_queue_push.png index ec7326fc37d5977be66de7d892b1be81c16c2f4f..baebb145b6b378c1b99af7da7109a4e8ee8ddf95 100644 GIT binary patch literal 62979 zcmeFZWmuGJ+crEPjUXYYv`9&pqzFiN7<8wS(%s!5odVL*NOwttbT>$M*LTjk7kWQy zJ>T#5{qedsx0&V4bzNs1u^;=fpW`npErN!EhXR2>(8NRq3*`vcplv3KXjW9iG+`-L8)Hpl%(ehD3=GV5Qj(-wL}A~hiMrFBI@{fu z(wdaRv&5b_mKFAtDy5T}hPj?H#bWI?Jaw!vH#jm97-UgC*#EqB7pEMk-h-i6D$#B7 zfDgo_Q?A~4&1qS#Xibj))bmO=p2C=*0}b+AO9LjkkUvLj+|hpJBGn* z>bpsnbkeA@(Kjx=4}`Ff*SQ@}jPIvC9X7*geAzCTdygnx&-;E0^S|#?3ughZuMQK0 zfPSu4VGNT@~O7jH~V&~Rp8@6Ak*gu8) zmykbu81j?-6~de5blZR5vjvGPDPQi$CljOY>6+#B<-~28`}2WPgZ`84sWqE;5lHC} zPQ3;h{RaDUH_x3FBKpYy{{i~Y+&R_O)!$onxBM+g8M+h^EZKcw^F*J`KQ|$1(jPb; z{c5^V%#j|7z?s_}&Uxc`(Pl)T+Q5&1Sd~yaL>2m_Ep|TqYFvt$S3mxrCIEw+fi#>! zuH%C7W%|t{*vB*Yx{RClo(O%%_gwiQZ+1K%yy7cKvy*EOJ2jJS=I^z5pimUW>TLNS zG$T^S@4QoT=-=D%&^>-xH!N|V&fi=vNzm%n2X2G?<2)MsG-DOf87hsZzf-1*{58c3 zbBsFv0UxWf7rE21eua|%oU0ogo-o8&qAgoM;F;L51lO-2bD0yY?>4iVo@m;uA7Og@ zMYhfpt*$6W7>MS_RdaU@rHW|TOkV$O+<)wR;4!S6Z{`ujIsb*lnz%JTx7yL{ ze&GvA$f3ufi|69kFGUC()AnS%C*q`RNs^Ib=Vx7B|I=B({ZjYgJnDlFB0IuXiGFq_ z4iIvx^8X~Y=C<7-$aSJn8f^XijOMdn{ahHfx;HoHQx>v_(}BqU#UhH4$le)AN*fN5)QYwLZO1x%+e); z)ii-0=-okOHt__tspe$TXy}LdgS`lH38bKq!kqp#9Z~Zv$x2^!OG|n9*G#+r-Y;P+ z(OkLsE}RS|UpR$_rE<%pcHwoyYR}ys(JEqScnM~=^E{4E@H@|mcsf_}??q9BOWO-t zWGy2gj`Wx1Ah!swd#m&Ww$5-cO_p@nfBh}#1V5F(0Vi2A&HwW3%x4&ah6BL%;#pTC zMZbpEDVG1d*RvqHV7<|oCrhbJOuSBUYC^03?_HI(g5{4y;1^$#OY;e7es(&IIw29q zfHWV~pBH^YK@*v2@dJ4#L(s-@&uX z5Q#mBB1MVn<@CP{ca;)j`QzIh{xWUhAO6WRdp~#{Dn9qq8B7h0%J{2$@oSpL|BZ`YAg)pHG@Dv{NCI{J&%JUuN4YkZSV{uZ*smo$U2O z6fB2&=LHj?mj$iPzn3BG1*}}PFjJs+Cu?Ymy_@HHZD66m%2{lA@rTfV?G=d_3DS55 zR!9UJ*{efHR@b1Q6ldqCl*C;^`0X>|q9o#~#y^giGA#~#`6v^R)^(+kJM_o?Z9HV| zs)Km&#*$tKdGL%3X;~b#5;#&en*Uw|Fwo~u0)I%Y=BwXJlyAuC$PX5G{2%G)ucueR z$!oK{M0ip=c~7!DgSpS7jo{xQ^$Dh^|1{WZj{9U5xvEZj|I4x{!TL>n#^#8xmWPZT z(c>~d{XMt4XHsdv@}I1pLSlBa%T)ihXJIjJupA7yEdSh`)SpOHZZsysg#TLIW%5)= zUtpW$KZl#m3X3u?o*>up?4LuhN2YQ+)Mk3~&xcb7yTMle)F0meXGr8z2e+zK?D_n! zME)!lQc(89`sF`2=>JXQA8YvkcH+vGnx7hV4c+fz?KwS?V04V$#4%FS2)d->Hc;oJ{*iQ-H~_j_pJTe$Ql_aRKEzl zFlXwVd@qE-2v<#-ImmxEXW371`aQAkH{U9?I8#@jHO@V773v*J;SozE0B+r_6FD>6gY^#|cYqVx;he>)@<8%#QKfYk6wS1fSwAWE5`yXcZF3VX3hZJ{i|L3NuZ zjx<+LD$ECySpH;?=q{S%Cb`{If4oJdIyt)zq-K+wqR|1dfI0c4RLnnvK{FU4s)3%^ z-KD<+-v3=!$RfZ+)2m&~-QJwGJ<{kg+Kgq=(eF=AI(q=S=_}`J z=B{^s4W?VpWm@di9`@}z?>bh@*r-tRz6>GcK6&7Jc2Do1{u|F>%I($KI|a4lotoWI z^_~joz6D69S`Vs}@&8#!_xo6nUwj-MQP2q10ycU5D?OCR;nx?<<;Au@+d1b`A|3}a zlbfR<8DiI~Pi0o!(H9aCnvx*Du1N90sLmc{9sjlm5)8hM?;nOTfwfohAqCX$)?em>Bg~wYdGxJf)}f#0blKT)tGHvQaw)`K11I)8l&P?u$MRy<`C_|7tI+1# zRl5oaTcB9#0rJ@=*>lS+q~C^U2b(?6OAe0m#aTyis6=!bei=*0eczt@M?^{j9X1!{)zg9vstqf;Yr|V8; zN-nG6N6Ta3$Ydvgvq$kXgh<~xW-f`_<)en3^w3w6p!_U!-Zs+esWeymh<}nZ>2kTv zK5Z_Lu`bQM{ctu-EyZEu`A?18i?Pd-ZG7gIqlXuP6i*#bCJY`tW^_Al98-6sLv^m0GOcNO!25Cnrt2hxdxvBV?4OF!w{kzH zSGQM(at&{ni6mZ~PFpId+mm;3;&2n94#z2))g2EkTjLt>x%;-)5gKie7%hdEOtp(( zV}Yoz%}p8ZyAf1CQ1XqDzLjJm8ui>|Pz0((OdmKW<;&m82w zeRjGzU+d)DYrH4(>U?>aO+mmHJ&DBtJ;34i`ZVi)DD9CD^)nxV(&Or9S^LsixkVIl z1n(aX$!*|dF4{}$jc$IL-iq7pQ+96rIWNVQr(g|Tr6{NeOdM|hx(i3yq_D<{$IYk= zjGE|^Xf49`5Rbc;-m935WXTYdrpPtqUkc&xR?N9P=K`L^zTdBl)!7q0h%`L#aPf(& zMXveN&|hlT)$JrU3@njW}>b>)vO3Fs))xL(?-Woe9AZ@imn2J4^)U5Aq^ zF0MOQ&h>*>oEq?6PJlWoB0*Uyj@jE>Pmn>vUW-4D=X5&Kx|yJ*8%2wiQN=(=cqp}Z74_6N(lNUYq(&X-ejA$r=dyG$zPZ5_4#VCCR= zEoT+H4O~j>23==0ID5>U^&)!}@)h^bhq{V8%8)@p$pu1np5-iI`JL%Ri9vX`OZ2)I z$NRuAigh}CL~84SD~n7c#b2kS*ssO~v(IuocWby>VR%!g(cnT$bhD{(+tsd2JEX_N zNSA6i@q+6+0hS;KB}?QQ8M#EVc{B3mR;dg#C3`QwRAr#$;bzp~nWIijKG%l7a?)hk zOsT@0kucBUa_jz=aC~%b{ckqbzxEug4Ya`cwxC(jw2M{ocYb~-4l!W3p-Yep9+CI4nlS%v32>y{uD|Y0`|$V0GA)&lsZZ%fO0D)KUAE@Z zaGsscxu%Ge2$Zo<5}B0tvVDO(9Reo8ouG5QOv&rNhOnd(0w1xhOUdJ~fjG3_`HY2EZ5zgvFX25%RMbHr?>AEnFZ{+MU*Yyn)h#;7BPpavO`nk8 z_g1fSP_r5oBJ=ZD?JJoji$^4~gUB#YKHUZ@@rChpp~ZL3ZYg*nmbBG!xZfD1>A@ zco)RNcw@4t%<@{;v(a}7x#pjUCvH9-4M&N;QY~~kTKI4}(|M!NS+vGNR8`?Rw)1Gq zxpD35l?GV;4e0Wlb`cicEq|1V8(k8JTJi+nHosL6ed^wV?|rPaU(<%G5`_0+<6^VW zz?y#Qh3)1jUC8x>K??ayy2yjBR!J{Y*@h%;TYXpBf_mpm3p*_L0YSmi54hwHIOg35 zZN{IzNA~BvJ@2pby*NPOkvx98piETU5M5DTs~k~UZ+p^wl>8GlhCZprP>U}3OdJ*~ z+YSJnfD~;+sympsg8i7?lwjjg&Uv@SO~g!cQJuS^6>=2z!_}#9i3Ju{6U?MnyhQp`xGsLBAJ%vEEiaSd6d$|_4R?z)Y^g~{dWOsmCbg(r(W zUi{b-or~&~58SH-e{9M{8tIis2X-xJ?6rH%s3Ju6%kxd1$o=~6`@;Aptp&rw&TC1w z!XX4z6Z#2gc&vURuS;%EDjJI4y%@#)X_4C#Z!(!!BA^`2pi;b;sUX}IF*ohto1Dbe z_E$*9!2+RdA%k1@E|gIRLqdkkmCa_|F@2pjaUw))4+_$U3^nRc zV?WVaK2_~}TEc}(#kjxVOI)HK>*+1<@W=}p+q7y07hM+x_VJfKrB+&&)%;9AnJ(A} zL(-#}u*y|69~CQJj+&rvG;l?8FPB0<_&MDfD!hy*)WLx!nSYHaH>9zkW+z~)6+clG zAyHxhBtT*&ZNLKN!-c?`Pc0Ilhr&^>(Vwc7=!(%2U~?qOHBe2_RZK_pn5SU{`@$}l zGCab!Djqx{a@=Z~dMe-pf}JZr*%D#_IRf{04TChHK(0VVKw4ze0~6VZHxr?`Gm#N2 zO#@nV_C*d-R!X8J^DWsxhL3{iT+K45q~9aj5_JZW18f>YZ?$Yqs! zg-n^~cBGfHr(#wYHJ!{gqUIj@P5FE6;V*1dT4N^Q%Xm;<)`})fzw_mHf{=b{(rA`2 ziw?;j`%p0RvJuLVYng&H)~PM3QJ^c$-1|zgtf#&2*Rt-bb)$kRgcyr0tHWM)-mRjR zf$GcM23J~tE!v$GK8p8OK9b7ZC*wMDKR%g#obIy=f?}^Kp9+TVY;VcPng24R$`0)Trh+p8lJ|3VRMdkd*Rm zzYDQOxScQKlxxcTC4*=mh=f`Bh-Fn_VOc#8> z@n+}?)7?MZJ#64DK&w(hqc(SV`i^fWc>_L(i$@RsuT}W#Gxto=REQ~c$@e=G{yn-l z@Il|Om0{37pU#Q{18@E&yj<;{i}K?k_#iV=K<93i?w+2S11uvUAb(r@j_GsPrzp~F z@*q8_v>JKWihw^o4Dc_7WNeXkTfn4>9l-pv_G^Us1$Bx$Qvij85O7-j%n++8jHfiX zxjKg;ThM4o$l`Vk=X-%|sMhOgyY+i5Qnisl`)O?rM0*5$WAmS4l*j8sS^G;+faZ2k z3mEDe+ud2W(P%oA_gT8%awekl3eHYIkhq1`ZOzD(1TJR_PY(eQPULYs0f-Q%dti+C zX3y9Da8=D={j2lkN$|NhnQQ}yas%x3`@x{BcqD%l2_P4!$55Wf(GCHsAeqOJ!czMJ z3jP6-D(xV0O#IaTgo%X=mtHkC;wbPD!w#4NXga+icLsbK3bdT`iqQMLbbO=8^Us9v z>Of_+mT1|>k4R{>=udgG%HCjqJfeVF?3m(w!g+l(^oHEiNv+<=p1Ps2LxR3)IZ8qO zd69YU_!nOyF5MqtvFBHZ{gJbvFcCnPzoq0o7Xzh;T&-wR*g2SSy363kiyRFE4_A)w zagwQD?Gr(Wf%}UM>Aw#0MjG?WYi*Y@@yJLkK!zo6Ebv7lo zC>=;9t-7=NI-X*VpoFReHSGRI6C&|__&tkV5F2H9j)&_`XKOYKYC`Z{1YCiP=u-hg zoTI20H@t_~6_+`vE+{p={xn|_*YoLsZcu`0^@j}{ZN~(Y?_zqZ&VtH^ErJ^(rTwqC zL6VI{#tu_=y*?gv4DH}>s2x)>NMbbdb7h1jv&GVRLqSI3t_-Z($bIQgKTlQ~&fM2! zjeBmwv}QXDjLnG=i}k}b7+kmZm`(`iYIb^v`0Ci_0wD;r)CN7v-fyB0KRs*|l%+&1 zYQ)JR4^+bphGOi&g#|hb^#1MY&4L8lM9C#Qw9ruA8#_^qb7-n1btAT4#%#9(4Z^kq z(ca}}=Zwe{gG*ppA4^bRbGRr$B(Dx}RgA-X9;}1z>hg;Ro+w&L&wWrt$<_{a8Y)IVu1F)Cx-R?hTBw3-7E?)xiToxO+wv=wqT^+{stOKcD&l}7_y^cG#p6H*72vm0SH$9 zTbsz+9W&QUm0^bB8o;RN=X;}mc6yn@d$S*EJNY3?@f8KIR+HLZkaIXT^GheoK42e= zDI3uxHmU%ikYH9Xmf+>opU8Pw=z2}Ve7qbf6JjlprckKK+YBxl84H? z%sqSj9J5sbe%NR2mVAj_9&-Q~t(q@AeBpX?NSwj(X$!cc-=gqIFE5FokMf%C(aAY`BZS6-DQurEH<~e3}D{|Hess6iZD72?NHNt9?h^DPN=%TTgcm%4v{>lyn_DRF^UiP`f^1>gQ8P-;I?XZ<4Vy@dp z8dEk?COZ0}B=0BuKNi-VG;e{?rRWk_{CIjFO@xWLGIM^p;r4pB%BI9Ae&a`9n2$%MrHE36R4KAb^;(`u!GUNoc2pD*(B(lS2)B z6=BG|@4@W+unN>cUjw^E{i6HicN`D<0P817Mpdu$9u`qRX_pI7B%cSDGe{$KV2;)> zMF@%kVpMZEU(rpQ=zDc(j3qiWUj)S{iY9?BA@5Mc=4Zb03#xU55cYHL)L(aZoaftP8@ z*phHnZ!k?rOUzQ8*i11kXtVMJXE;Y4x~~y%8>g7j`5*qPF+}nV&fNXg_l?(0STfzz zN~(T_eVRnvWa(HFY|ppwd*W5Ro)ntDY!_W8`H5k@Kt-}>@!X9sIJt9vD|oQm`+j2T zCe&uN9CHb6r^DYBaySm!RVf$-FZmS(KVE-q6-*)W5_>suE5!Vln#~0HYLOUo3nu_I zY1~}(T~ey%P4HqJz&DJ?8LM9%{CKwibnU$sOYXF!Mc9gBghN}nP-QqW66MQFPG89E$!SuhB>o$BU@5H4fxt zd9T-HCT2E(L+A)RZ?)VB8%WcofPY*sWf8I8Sye92X@-|YYv#V-54wv!fB48zZ~;x&5^Jr;UCi~Yg;~Trp?F@}+*d)G{@|tZWO4$&eKR59cULc*cb;4jmn_kdu{wP^NIJ+lVJFs1W!% z#sC0@uvE}3&#+zlrWl;pB@Fc+H?yf`k1ofF)%K!Ugv_+TwYNG~DPDAM=(#+rT#Yvx zm!OSi0+SpL1Q=Mol9u*2j3|+Yko){>sp@E?||<46<0cmW$B{20~&hckefLm6wtY`YHQ zNiua~+PXRGLj#I*wcW}kbk&Y4zA&pP(&7D;#T@BTwDux`M`%~ag|0~otqR!keWYt{ zG4*HPo_d9M1W+bf$zSoiOXVKkuwtNgz|kMYX2Pp>NaE%NT2{1$v_YAlatv9>7;J~a zADDWDROHSgH(;C_w4P5v&dRlA6orQ@9)YT{Qu%3#1Ch%50@FpJYpFT7oJz78kJq^J^P?(eZOD>HOw3W+ev$W35n;*U z86ElMNO0~a=0_w5zqRa=Gj;i4uQ?KR8NFSjZOCflbI(25`9#U5eYM}PIfHhYY94?> zwh^TI>DU$zEf;vdP^x!{)el~sk+d|?phuf$(ld2xoOdbQfQ`e%mSzyOO6!=AyMOEm zkOuh(gA_bWP)%%G4{euF3|4>8fZia(rr$XX?3d&Ni6O!U<^kmc5-RN~%)PaQZyfGKDl@iOm4A$y{`&86FC1XEA z_M%^Vs>RaO-$|W_+_N|y%c9@&7`Mw}S>8B~Fr!5!Es4`K#xk}U_r31HCZBA>7f8VY z<}=|v6$q>O0+w^I;tE{)bX#?kN(iLABapOBk1#!xGZe)kC?q`#=~)M7PZG^pHMDUw ztpRs3W!9j`qu4yFEV>ycJu^7c>N0l3_HJARS(F4SMu_qMi>&$!7^Tu87eS80MTnY? zFj@oCv4nh4^d7Bn5UC~^vb_!z3C3%isDj&1vj%va=zCv)o}!_+DC5(5IpG89d_y7L z4sB}+#n(;~dNC`ws4DNCaGF-Jie+( zLpBhd{U&-hEv<6_NxR2WJ@;|FYBfou2BMokfzYN;QUOM_)>l^3HC;L~p8cLmKhId1 zdeUA~-RCep^4rjc#XH)Uq#5g^=lJ}y+WMdneF4huF~N4H-{?nHAI^L`ElE}n?wT}m zPZvuo&=WH%mH@e_pC4i=iAke*d+K@{GoS(Mro*%t{Jejv5;sQlLv6h7PrH(wRhiPU zhxF4KM%5Vj=$y+K8LwbQ&cX)M^1t-rG?ukU4^k$Yzvj?=%wROlNIL;9k=faC9Z3AR z{Jyz%awNRyGpk|@M2kv~z}P4L__klW#?F6ahp!xU_v1d4_SPL!ngNNN4?xopsy{k4 z_X7&PWtMwa09r(8$uf09 z@mSb>{fJwt-U^BHYoI|D*jwx$e=`{B@)^b51#q<4eM(YxK}vE#tzaME8#6f7p1e`= zNxGDPX%Jy#ILotSUlE^(JlzL`Hu`ywT5L{j8&pB^5wxuel0waXQx$yn7>xpFzzlVa z6tTPIs=a7R@4dgT9P;V=55|xM{)UAyAug;d0uPrKj(yjX=@@LoNE%;(?i?12H#EMH zu^8^_tO(UIkVWj=U}nztN_v~_kVT6 z!_;84HkSaowiw(h9&*xz6GS0sfR!FdfQH9lNJkL$iHyUm5G?b2bnBOZjAa}b9dUGg zHshV?s&C5WC|QGxCqd<+srS>b1ZaGmlV8J3XH>22P;5p}?8HNx*8NWB#E0KmwGGdskRHM^<45Ot= zL35HLv7%PnkxrLxM|OIcK(EJLJY6JI-+E{5y6{HB1yk|5i24|e+e;uhtPn67FP;gV zQiQ%oS^2bA!sT#vwx4Zv)jxOE&i>;;1Ns)I%t7x!`UO6b+#ut!EnLAg>=ku*UfhHU z%?eEWAdksp+4Kff4I4~3;GqGh#NR}TM@&9_?j0IG$+aDVBlWpM^cOm@9(dH24yzwoxfkRlTxZlP0j^Y(*2J-dwj%@?}GR+*85<&M^ z8xRF7J`=L>i6HnYVY@|(qespCbP2D`2rrZ{z=Z9UyRKf8g=%CFk?=)k^y=c+3MB-c ziPXh$Wo+X8w<0uRS_&b1V!EpJ%mfZzWW1_s_GmE*KPPkz|KerfScn$6r;3l?w?>u{ zT5-IfUe&pez5#8GtcF!yY~)py_He|B#p{HT^v8)k?r&0Y<<{lMu-7gCaAq z<7YIpcq$*vG;{i@QS?6vMbXr3z)lLaebD(0j_%mhcYsaJ?+daKyCV+oh;}(ZE(Hb* zwg0Zu|K=@8^1!W>lAdfw{3bI0b5r*;(71SnlNJ20TfGOjD&=CCB>$bq|GudZP}I>= zOXElW^H%xbRtDDkWfFfj`#<9g5C@R_Z6ezrNPs7m3iLz4rY#6$Me%N~a(POzxej1b zxwqIDzi<2G*#IbOgOoBjSEL#nvJaAZzcEk)a3S|;5=apKW{?e8VXm!%g$?gP=W_rW z%4=)df0$t^9GEL>V8it9c288a;LcPI`g59BhZk6V0DfjV%Kt;}#(O~mgm}#(!@iXW zpVP=+zn@6tp5_9(vMyu7hyhR`jvxe1L!mi+b zzWuW8o1m(X!lZxE9}zSVW24Ns50nGKB;rA$* z#lgUWq=WRuAg};;@!bZHzJZIyTqS=)@!`KnaXxo2LwJvpSh)BE$ZMKvf`l5g%e*Ma z;o<}Aa;$@|zc=s)71&Z?O5xJnM977>f7D6?jK1%?38n9{Q+Im|=4t_~(K0R;D%MOj zg}qqY)Ytv1z46y%!H;Tj1uckEe9_FAixbN5C(GhO&7Fg0lI-_H@5~(}WO^=ne2|;}YdnD8q=lOMr}t%Ie>VMZ zbC(9@Zk56I=kb4Es05%&-(tRD@~4#p z`WK+%z!LiE;ujEI+$8Nf834>oSDOHMes!S5s9GTg8VSI@ldUqSd=Ih$tiDdjpIrm@ z)C~p*+K45M2g?u(7LM|CbIc6npfL^C>t=6MP_E27SP$jA$+|wB<9++&mDAbP`5_Qe zZR(=(Ln=(SMZ_ZlKKxl2cVkR*?0n;1-%-(2f21PTQy^j?;4mlIen7}|1gg101rbmc zoqWnG0BvEvRKpEn9)d}wdM8d~p2p*}k6QnACw&Ug{n4Mdp>&VH1XTQtjLSjf&GqH8 z_l1DrQ7YAc(fIIn4$zDg_p(hvnf=ZU2e(L8sG{u7`E(<}%n}aM-a%&u@+2ovd-xmZ z>+Ke4wcrhO0NBC*4T!R`HmVUg;9Eg4ad#=uvH`O)muD4&l@d(_9Qf9PB%%!O^%1Ck zH%5j4gUIsXX9iHTdC6|*&Tv|;?)}1>C&T{l10PC2cHB1^WEct;9}UTKoq(e`lGC8v z1DzPLHb6@j=yfwVSvdh!(cxW0=!fDKl@AKo{xFfTrr;iB#Q^2>p^6oF9=}s z_ck5L#i2a)>40^d0Lz%|eIE*PBi?1oq!1D9KcGDPAA0pajWxbVY`guoN9#*8px}IU zxh1d&%3Cyijz>TDK@Z6qSZ(R_DTC`ds)|+{wHzdrkels)o`>NZ1?F4I_H6Q*I|Z3r zx9w_AoR!T%EyA=qbaP#Vv+j2s9<&^M$inH zfVmychmBQveKPf-&TOu}&hd0-w(b(pUfoMcwzE~boe{8(eKLNA`~%*kA9~9>5zdiHSiM5wYOzLolI667PzM&$MI=Kq_lYQsN-_D zh|Sh`xM%qISgsBBbIVThm_!f&PG@Y1$w4>hQuY`M9(w-kNUTX4yuAs)n&lqhXppJmXa`$%ZSPsW#FD2{`20s&{YzvS} zDa?1LzA>E6s$H0`ZA^WWNhxqvAg_Z$BT;}Xvi#3z-Ni|P@c|WOsb&-GbSbon;c&7Q z$6XB?NmqNmyf1;D13t;*?10HN0yUWYcQKnO3<8hK)nSPXFPDC_IQ7T$}&P zItXJ_sS{Q90ViGudcK{M`CMBWI9&v;SNp~&y?u%e*V|?cKp}%p$hAEB;%^1GETy~Z z3_efYnVrD#{Q6h2&?Zhv*jq+zyX7;?jH*1Zg?WGye-FvGvFyW8LDg!!`7cbYBgeVR z*+%z!M#Qtg@twhfs9BG^gZ5#jRKKJ^m5lMZF9FfdK4XRb6OWi-cB%3i>&jHQk#Dqq zVLmc8MWW+Q6-PAtxTa_PB$LK}0&JKB3AyuNo#zEwnxd3@?^E7mo7PH9F>*=kx~8h^ z-tgbzm*p->H;4;ho*q*suq<7wfes$Z6BfM36?CXRb6{`4669r4>$C?Ut9(4(nYjcl zWKzd*Y~JEfVM*HwATc*eP=-0#Qd)D?>NmT1&2}4WG?}eSn+%$fUSK<>Sax0sz?y>Mj+fn(<}-P&IkLd5_JkD@7%+HIs<{{D9ce2eF< zsur(|Fg*{`VYs2IYK7#R*_#nq*`%fj)coKYl=*{rhHrm#A2>pqBad2VjO{anQxN{6z{e$?^g7<{) zX}r85&L6IOV8bOFSwLjVj$7zTX>{kF(=#TG@ zH~dDF*%Yu^y(VuPzAAg*+cs*;(Bj@>x%agsBc5WeSUmLzB!;gk_vr3s!3R4cKvL=2 z@=1^hx0uRzU1+1JsHY zdl_PpKInva2mPFDiQi48R-<#CuYrV|{%IB+kJT`g=OjBv@o-th)y(RaO{Ssz)Z-V= zCkTx@;sVAhZ(`%Gg~_}#V0GZ!7%-?LZo0c(d}=FPG_BIXP|8i2NGOpnfyED~`utnf zVIOyvWL&dOe=-j$W@C#Fnj=6$W|a#*&LDKfgko)Q-m+ z)<=UPWA6)!Y|Cs`q7+Pv+i*ea-A?NTEwsJ{C5?ibHBPch7thsR%k||c?|Me0Y!RJu znIh1zWKZY5%i~hvr$!9!q8!Oeafz32uzt@_)ELN6|M;8uJ5I35ljTM+UB&?&%Nui< zh7C<72!nwdc&LLdXr>(j0L7g^s~c!VEi z$C6=L#*9l>-}6)~uK9do>F8Bv%xhG(4-}$gTy3+OjexRcE7GYu4^}LQznlPUO-=@c zn+!ouSoDF2a~h;lRCZ5>&rqE(P;5Z85U*kI3tiS7fCBjv@UT`O2hRZ!fs?`Y#aM%S zB~LW8gbRy-ygmY{7zzhKHW&qzBF&F^FcsU0T$;BzL-&Fz>*8(Xb?<%)0CbiGv~ce) z2~+S`ZwzBTd!PI{!4dO$QcsXLcU;_x)h@j=BZJ>U`*_um5BGM>x(nf?Rcd&RMqOSw zEa;-WhsB2{bdL?=TLHYf!fYZJDYC9#;~SvH0b_uImt(BPA8&`vz!`hl27pEj^j;p~ zGH~s7iXh}SEP#_C$I5vUbmaCpxD8N7Ovi*MExuR(Bg3u=)XmDV?Z6~~bZH7C|J(DF zTTY+@JYU&?Dte(nU{DxeDAY6w_6!t=szsVGgx0?X7A^r;xV?0}eGs|>xMy|8F*Lgx zaKZtNfP=Aul(`I8&C`n4p6+la0Ok7NE3>d zF9PoIJ79L(P(@n&ESt3phX#8)FT0{v!I*vB8yn6Sw2{ddoo|T(_3Rm+C;I9>v?|V? z41r^Y7T!%_gJj5W8DN?bTI7fc#)^S5rc~g1(P;^UD%?+q&adZ){mX6$5l!!G#=V33eG1hn&YBo4t^qt^xA)3W$5; z&CZn=tL&{eOfZQldz9A?Oq{L`kIskIXcLDDtZPK(p4{{u+4kKWa0;<9+e5Gr93RVL zPE3A=D-i$_OR5^cLKf8whN?@X&R5xiB97}*?bYDtoI~DA<}vNy7wB6RAClftxvedG zVM{m4wOmw#Y8BMyg<;CkP_bkfS>uARQxJ*x#JZc4AZ^FPVy+mfU(jPt?Lkk9&4H{| zhbzhs#5^4_mz&FNGgo}nA_ExhD8HyMY$4jvtw)6H`OQL!#wjZu#+DfPV&rz+QC(zb zRrYY^xpN4-^eXjRt8(mgO5b${e+vDWN2rLb(8j3CK0@HmK4de>1Oxc3C`~nl1K_*0 zzJr!bhZpC>iM02W=zG^PM;Fj8GmrE_WoEWJ(|}17HWQ%Y!`Z+Zi>Y}TWacQiQ!Isw zbAD0Ygn%!b59EtE(UGBv+x(tO?ZN5gK$BD}lM;2Ano)pp>5J;UT_|5@K}?KyYST0Q z;X2sCYU?4fk&M?#F+mm@&FM#mt-l=79{Ikab#Wmx;&*thPG2pK1KW$E^)D#AYx{%o z6+6>Ih6H!DRg=$D}T+H3H3XX^H{;WjYNs~F=sA#olVli6S`1>Oh6xakU& zl<=i7!yf7t3g&)&kYdxI%>(%KU{MlFxU-A47_#Q&GnBR$ma9F6qzS2sAcOfW#I~>( z6}=k)dORE!vH1`_@?@Z8BM|)DBXR*HW%lva?b^P}JH_c3P zKyT#Eg0Eyod{C{TGRnj2cf-+T`QK@|)S*Nh3Y2q8j3OtOb%8UlE@=$nerkV4-aM($ z*X#@q&~22{Sz0WEQvguCjYmhUv-m__T%m(qETwef8PLB4me*9lo;BnZfFdwvJ9Xl* zk6#lYs2-2httC4~Ji)&OwRuZ@&ceg6*cA5tAC!AxSohW}cO6ALXZ9)yb|K ztlS~18NElSDNvH|A>Vu}woK4q_ZN9*66!kp}6MeIq>WSWE5}L9w9vte_%95fs zm?JTcUc={`t&eWjtyYroF65Scd4Z z9OSRx&N6inw2aY?Ml9qv!Ux!x@SXk=9%jISs!I;4Ar+xTs*yhpeP_ zUz;}b5Jy^;w4Q<@I@D)0t1`{*qNz|(^;c4}1}sAgSl+Xy2Obw+d7VlDs^Q4mBE6!J ziZ2^^ukvCXslM*3)e<`Qmh2lNuX8QotLBaZIzeRZmaU1>$afwPVY0FM=vZo*hTGZN zwm^ZIQ96~KsR~}or)`$_BwRLm(`r15+iQWn1eM`ObH=-r`k;usmX`wA5QtE`$t6NKjDMOuQ~ z9SS+EPzCYZhRzDO$s&iZeN-#)#`BSMM#QFxkRaC=i7XF)cJAww5r#aMCR9qqoMIIK zpcWT!w|KA<{`%F0RM6`0RQ_J_U?avxnrl4+ zxM7SC@eAj^qKDo{4_`?LWI-h)#93RiMSxDQD9j1W@CKp*ti@%O|8R|A5+IRuw-O+~ z<$%!+!febRGa2XDPqNrRP!TKj?K`$2PI3m(k))A-8|LwY*x+F&We*NGa32*t~<)*_~aWew_~Bn z=68VONDLMtylF=LxXDHx;SwQ|gwprGPs|*fHlu*OUImbvg;xlV3bfD^zZ)z01xoC^ z8gU~se`B6x(e)f~3ihC|@Lv=_)&M8RpkCbkoCM7<(!5C)b=QgxmZQ8C9IukGyd;eb zF0nY&k;Z6j_1$FjmxM|g&?p*n!vNQd{S9BWglY;1gQpV7L_BL9tVX;?^`y);MA#R< zMkbZ8z>1&%$~5}h@rS4Nudjt+2(b4}B#RoL`k&D}g+eoz!-Ok>PG1%yXEAd=!pnyx zjAww(Akp;QE-#8kB4TBOJ(F?0c*Ej^l}3r|F0690KFOYuK5;DNWKxrUX}g<}Z~g1N z?>;f-X}wE74RJvb?9Ptf#R=B>i^WC& zaoWQWT8sC}iNl>m^bNYg0}t#uh8@+uuyp!vXR(fvC!Y<9#p?VP`h>3Kz5Cg9*{I`L zqV32u5n+PL&=DDm4@bet*|P!k%k%UKv+8vUvQKpvAI%r+@b-T68@|Z+dLF1?`Z)ab zV?)=2#M7uaXnhU~17GBdjFoK;o8v4CgvPgCFqGxQeJIS7GRcX$O%+V_iR6~A@uDP1 z-};+@D6{ffwP3lTBJ52e_s95Mb0>|LK*QP`Css9bx>5cqrMxEd;Ff#kdMr~4EiS=& z^XBU;zS%Un8pZnslI$YU(4D_dS@OXile(D`a$1n>Gvveg2+kaiz&$r%_T{W9caK(l4Xx#rkE?GdGU z3m$U$j`I@Hjgchki;)?}$U1wRcMei*P+fahJYRRocl9NJKDdxo0d;o<^O|Y86e_S5 z1A@SiPK;k+s}D&(KQ%)h7a+#!Cnz(`#@`V<-Iv+{x=+4Ld0O2?nM%-hcSLme(yU_U4070;Z^}{l ziyY35gg8zu!G zzStW)icGm8JCD9jTfzyI%o3l53#4BZ;Yl#tr?%o5%vtjoPUqb zH@i0HjlzZKMBX_luUtyhoZ!I^7x12wTK93Tnd>un;6Aw57BLm+a{x!#00?tCA5bn? z)JreS&2y{1l)+M~>*LDvHY^E*9iqK=)1^?~%$5tzlRTIkLD7(&)(*ynw`sC%l}i_v zI|F#!&_~Yu)jPA5w@P6dyZMuP09Fawgw!u#ItH)5c6I*L64|D0gX+B5x zoVY?!4Dju601j|CzoCo6<{=jaqpX>yeh|Q&D?1w@)~l&*#WNytINxZuk0Rg~EFyTN z7+vr*0(#ieyQoevw$P~Z^Zsf5(N77{&3UF(6VTBFl(`?MpBSU>`@hYwa#DHo3LYF6 zd7Oswsb~Pxqc%FC_yran%20#dYfya7$t5$y6YxbCHhSy&T_elo-y3MeL|Ta4uw>3(tiMR9bx6J!bb___1)xe%o?xtM52-M-B*_OOvNdcj3L-6ChnV!)raw9iEyNsc#uX zB|o>pQNyij!wVCDu<4g7q6dptT1z2}Rp{N<4}5D38eH7Sz}YIi-=0^RSX0kI31B=V z49=dIuM~vOrRR&ry@;PAl%?w%T`ev=8XU7nOzd|CRBY)IT>A<>ocYgY{T6Kzkn-e^ zyxu)s(24y2*!t?Qs?k1qtcqDAEl|mm=LEU56A&N$HXjL>iP1Nok~0 zL|Q<)|0ZpR@PcE9M+?j4_2XhW}v3#hXk0AfH0H8B`5&k`4F{H$hg2 zQIVuVwcWfAfcuzmJ`f!A`t9m0$QsSZeS2r9)1kNvty=DMfa(JS`*o3!gW7UYbgK9z zUKaZ?6Nvpx`ipX6P%ugK0SaP$Em=fX?cU$w)i6;rHWd%ElF_{f_6eK>LKx!GM|KvA z6QG1Nhyxa1AIc;*S!_6&3Uj{F9 z_nc3pVDVA_fVSXXcl)Q}kLbY0As2vOZ?n~6c&O*hJxyi(a-F~9A%6wA3!tX(aD%(# zMynD27xmqOKcn3rRF!CZwm>VL5^;U@DVjd!yj^&ZEg#yZ3<%;Np=4p#^oM^jYXevy z4f9Pjdg&BtG-6xoQI6Hu^D|GHzMg5Wb``~dz?~(3_Q5~Zb)*_GmatJ7*)f={=;AwI zy3W7N>MAfypu(KrF1@Mw&d{+{Zb7XL9OyEcNdTlu!LFQz!pFa;_gk!X>QeiTV9~N{ zGl3`NyHPS$pK_?%`DW?r18&)R^;Uy?FOCpN%BoTP2Kcz7@Y(3p*!DGieOF}Cn{dwI zDn<0u#5>NMye}kAj+OvO8(!ThR|fWnd|i#NuQ(^PXYd$dRY_m#FV^)JSo(*Pt-JE- zW!m%^l=x$$5ORT~y9tN~?zIptg2%Ol5vZc{Kg9{J1XTCO4N(A+3mgX7E7iM|@sun0 z3HFq`PeI%%u-n6jdVL;uFTKnr!b`%XR8l)FnfhhP5NVjKcEJ~(Uj;3jeH6`R2BE-f z3_IQLieQ);4*WYEL3X(wYh>?lFyJF%sQ9*q&kJ+=qk{~T|XAZ`IasIpB-Qg)l zH-_UtDH-WVr;>@Og{sF+{4VXQq!CaL0ehR`lKY9%<~N#``HZJPO(YHzsq>r@ZNY{N z!{g1P==QGJ=*c?yjKn%jOi z9P7dC`KkbzOP1;0ody{2eKa$hnEeY=8>vcA;{>J#bekU=b)T;NdVegAgLwx@f+~7N z7y^{;N6I;K3&Z_12J?d1<>i;vn806g}*?e=>x{d@etV!~mPCH~Jp{f`^<|KX-0V3W6v zu$-%ZNLVqbFo9jggiAFU+O+;IrfAwsOaaukx8PkuEUv7#_x{6Hi>8Ko_*HP<)VYo1 z0-|a5obKVr|6ECn9Kc#dJyZt7P;(S;DO#qsJky|fDV(mQg88( z7Yk8=Ei4$Jd2}x9fz1;Q9tXKl{4cSPLFFO%R(asn#i-Huk~1& zdo7ux1XZGYjcSJ-8e90ayY-#*|e4&6R%qnV0zq{)wkvRjnUwTv>{r}uA9IU!T zlu!C{zz^X6aUvrs5CeBqWY+$I z=b3!}d9C1d!9m($bh*$Wdmw+qdchZuh|IB2eWatrbNS!;gs#UGPBLbjTzPe|yh5Ct z6@ldB1}`TjxOE;zFm~$0RW{ghXvnw03VGbNp2MThg_caM{`fTUylDp1FM#9KT2Gb_ zJ}kj>1HyJ-sAXw?rU8zxcSyvBCD~hJ@T28zKj-gHYD2irBm0dzd=)v=E3A^y_pT;( zrV^}c7HIDJleqJJFMmr@zaUv&5;s_!FNQcS0CEJo>lVlnKe=q_m<5o6QF#~ZcWYri z)m54e84u46|E?=p|IE~sT=IHO9|QQIZ;bP5WX*Aq5K|7YmMS>`kH%rC<24q@F9@0i zd_wSPl<-1dP&e16}losyo-BdHK0Ou1>3@f0F z{{+=h8jKx)Fb2*e+KhV>*nmY=A^LUFoe5Aq^|?5W-xc5m^UeGj*h`r(toMkzSWtNw z@*Gy=KB{$Nf8a9rtbAYprJq(-@hUrafdgs>$8%28fn;8*{nepGL-;LV+ty-C)(%$Gn+UuqYThZE=wAL zLg5Th0r>YpWHdl2k)Q~%KQ=2;&JY9QV|RC4IV-Tq{Y#v)CS0JDsBc{_+Qvlq z#hoOG-ghwn^8a0!g06k8%-3PG#_mS0o0)P@n*(wP94)fQI3cNfXU z;OF55Am5&TduxrOgxO*X$Px#ML2Ul@-B&;-i>)~Y)-v^gO!M8_1e676k)Uuxr3wme z2ShI^xR`qUB`f)udRna`u7V#xj+n5n=<_&OkGITH&sPG#ktfT@6|LhVSbZNAzCgu| zzZ+;5JF3ekIdW;G2^!Y;?JI5tWaV(}Wz;`Q1p!N9f=r`rswbI}yXG`?t;;06c&^}G zQt+yD79h)<|1CP&FgOM-1xci^<95+Kr6@jG+BWc=h`gdKz_eAQe`LO2?3}7;C27oA!v~b1c)P$s5rJ3W4jkyeC&w%9md?3)?TD#^!+#< z9rIv16aD>q=Ar*ggaRqp&~8dhW7X=M4kul38`nZD3K?!{T+1l#ui6ADFHpjN z3=z|F`-_+UCD@xFXy46~?WIB#nEUPK>$I+IqJa`4c@(uRM(^(+%OUE<#@dM6zjxRH z7ii^w#DPyPz|bxtEvi?n%6JonnU~WlRGEtNtyaTCBsgf<;W`OnSyTTxg;iwX{-=za zf*|hAp02K?&((g*Ym<#!i-fnP{CqVX_8z>yNl;Pg|4n6)_3uORz`BMO&OYOYZ6}tl ztm4{cXJsQfZut;W56yy*I%=oGFY{GOfpiL}&;DBt{omwK>4rZ`bpk;&TPBE^*Pm95 z^UMy(3m6D^1gCs5oCXt)3+QlDUxyCj{QG=2;Mu1p<3$T+5ty{R1IGavc^kA%L(LC} z_?5R0Z-a0z0UT77=Ue}ttl$8IGowX%it$&R;uZ@Ug~BNWsNx?JQNFVp1BW7)M6-S- zH}?&S+sH4(3z)wEgRk7il>1R(8BdXGq8RP&n^#{h_02P(eZhkO%gQ$Alb-|3k!_=cfD+}N~(6?LXE448W*29xM>|#dEk1dHzs^?|Y>>;f@0|+Sm z&-lGcJGEA0a6)`d{8xdun+49s^m}}<#TYW3PHtK2d6rGD%W0 z488?RNAcBo2cya%y!FEYj`8PLF%gXBcF#)XO_9`BX%yl$7W~MLq)pPYYOxQ5>#l9r zJZcyFw1Meymk5~2Kk{YJ7*&K|0-=%qmJD!ilqO-bj(Jr*z-pfpiiF|k7~(;eHM>(QQzmb9IA zMLwRB_aAzcAp?O=dw7^t<8gUrzP`uyujSuo)iz%b_lBpV$@raS(mtFU@0NegFyq_t z6`#lR_#TRO%2$eA1Xe>5Gl**c_l(+M@ZMz6+!S(8XmbN{$C%v#+~2$v(w(<3ZGlt5 z_DqnIbi-w9Sgauf>PyA3$?t>j@vLxOe+L$p?=5g-H{?LRw~u1x8(H};e?RU%vb4%E z+}F0WHC4>_RKiYlqGHb@s!`Yr)U%OYyTWOMc4jMN11L!AXE z3!f@#gDKD@08$Y04BEbb4~Jz%KWZv6#L`lR#q-hcsz*)khJf-`&wXL@(?+*uYo>%d z6vMC^E!w{Y*R}_u{UkuN9}(fJcr~hqp`tIoQnNu6M(7e4lAfu znw*Vo`JU%;XRChjKAwtQN)L~^qFIkV1j*W;^Yac2`Foas_TzZ}bV-d3;Z!*`_VXz4 zVe6xXlNIt|3}7#^zw9>@@jdx9P+dP|+F*lW%TpSIxj6xr{WrovG(C}oYM|@zdX3Uz z5l|ywK5{E1M%4Is_;_C9;pZbU+00FB_yOPw50}$~qD3RriC%i%8<7pD@l&D@u$il5 zmDX!2TDV=aMZYzZ438&A}l! z>*HSf(G4=f>}rS#%wf_tXH^$`v-k&fZfoDZKfQ57)ErY&AO5)MEAM<{wFA5rySZ@0 zk8=F``jqwW`e&c7rPsZmw0U8Bp{{88{GzWc7{EdQxL>LC!8`h>dUra#cz#TomAIb- zBo>he8Gn$0y_ z*7t*|H=!6NU!LT!-o86uK9OT6VVI2Kf*h}COBn-*aUz!oQ@&l==HPL-_aoBRA^d{x_+51P_)K&lH#COR)(hU zY;`hpp#J_rgnx2rH29zc=z}hqX;H2Yu{(a?Nl|1-Un6{A|Erz+ei*duSTHxJ%3rZs z1GbF!y46X1+w@+oK~LW2jLxNODuxyeZ`|1e8nR4l>{@J%Nu{*lKYOqfcw)Yr7H5SD zum}4@==#MGnW64K?kwDO62Fsh3W%i=;_ejoCQ89MF^I2_Rq92CAIhKfO#{3!o!w(K z7&_t0Yq7(rM20G9ruRr(nknwvwzKSMeDVh@aiknj>XnQpz0mt}>cGK8w-LbM)QjCi zI+7+yk*xc8#agG}37EZQShX0nS`0RS2;VFbh=$Q^;6VsfK&sAg&@^TS@Bm)T730cf zCSkYVF+XLDkPv`V0ua!>j&gLHJJF8w?#sn`#y)UPvOpLEjA@7tVyR4|zxCcYY$?XG z5so&W%x1*Yj5cZ@W#%{Se})@_z(aZz&Z~HW?izx9Z$Q-SB}EI4!En_#j~ZjDlV|&U49fg>8XSOcGPwL zfE)m&KYxWFfJpR4>Z_XqNQX;|M2=vSYl$7;>{NWz%-gI8A2VeHGlleC`T%K~J0V=$ zeooU=4%pv3ZX!>@>MP&`Z-uL%lt_SH_bK`TTeZn z^4R~@QT@ytJI)_W5R%cY3LPvsGiS>{YDnO%jx!ydCM&%Q$}cJx8oe~xOU1Sj9^m<# zy5TAoW56o#A?8$&%RGkrujbA!z@_Y&qNG`Te5JbQ2{fO4lP6lZBmw&Cp6|B1|Hv|14`qp4MCDHFfo^>1qZzT1f;B@p6;y{;}e2;N(6yA!bbq}M_ z?O3t}-)jzah2P>1*LosjXUmcB=I8kJ#MDxv+CogLv;S_tSLjrq9O7WQxOPhcCJ6tA zrzK$Amaa9#ovL14Mh=0!H~t6qTGx$1HO>gX6_mv3aEm{XG)Vw>i)17=60itHzdN|X zs-NG#8EQViS(9&Rjaf8PzgZEql$iIdLQ0JPRxz7QrUC@{IDg~Oy-M{cl)zWpyNtyl z%CG}zpTq4(oA(L0WCOnhAB0Bn%gsO0HHc^jc<{UV;N8juI1A`7Rm=5bNcGQ4$^x@5 zD5g9Wo*afyL(6dsK;S0LI7}-gbKf@~e|YcOr^J|+jg+{?=N*cr*DQK~jQl^$Qj!Ri zdAe(tt*VsB4mOg8gfA%e77}jj&ivU)E9;0BAI8N+1dontJ*&g3y`8_iD4`%x+ zh-E0Gc!~eneLAEi$WBUrOalMFf&dglCN4(5vV6QSZ#EPqFbdN#~`?k<~aN4p5}g5z*M z*n~Jb*i5BhUNsBXG3P}9Ng71B6k)srVFaJ5v%kCW447}_u3;A-Q_{;sWx&^E_womd zN;6XF6z_Fv>o?*`+bLo{7J?GCfzqW|#1fW0;`8S=4wkI-@F`&-I0ZkgmAnxzD({XZ zX&yuL6PPOY70mmFT%=*U>3&itJN4MlnGf8dr3y^0S32_w@dyx-9(*P}V`j zf)tzot^s8tf{|e1dM8N2lnHcZWGV!uCCMlaR)1^`HNK1Rqo|!So!PyTO97Kda4PI= z3cFyB1|Y%_CF4)S4^|h#B->1xrOLfuzfx9|T)3<_0yv+BNjg8d>_aSaB*SysPy{W4 zR)H&uOVF?Dt-o<-QSpcOIzim)E<&z>r6c)U6OBNZ)A#WxeNlAfy#E>XA!O)(u{qx;`}5K}{lc2pKDTS?Z-s}} z44k5Zx&%O%6N$}$n`%tSs|cfJ$i(hRmb0pAPT7uEAC?e!)EUP2s?5mWop3Gbg0`~OX z^4X9?*a~U4PoaANs%=n~6-Axx-v)j{t$@$)~n=uZH_dWrGX`Ab{;Lql-V0ITZ{%vUO^= zK*(?U;@eyj*G?BR}EY&TpXlXQacj?p}RTv@gtZ;rzpE(!VoA2Vl>(5#fJ3 zHz2=(Z~gpH>#s_&OB5{bpNSxcg(eEEFZkn$E-~9*Y-TgX59T%>Zv9t+X)cSvorwwM z{d>cy#H;B}XFSRv30H?*9B%Ww>`X|U-Wslx&bUFDz@c69yk#97Sf!SXteIECUlAeD z)SCcSO)cy~Vq^4=to*u+uyroXPbHFu%m{?%bfw4g~5=QUN1Vj#z+wZ;=8n?CI zZ+((}6xlVkx(@sl#hTM1P!j4OlxY=gE~I8*|q!0Yl& z1t`%0j&DgbyJbOs3}5BF+70NHAVKjYRYeO7OpkJ=;Rhf3v#94A+ksi0zl{3a_D+69 zJ^cge4#MF;&FMa-ZT9(5zH&w*K;C&QdPdtBZOoHwwV`oUK{Sgtqa*4;MAjpfsd;2z zD7wL+?#jXLy&LMT{8s+@-}mQ2_(s6t8!)lk0nk1W8ec$mumfs&!M(sZdywg?F7#o8 zF`(#>pim4j&K?PrqwNkGO4lt9{^hTM63nU26SB)|QwD$H{S&O{saJ5#``ZxF301~q z#E_AR6g<}$RK~el1qd_j;)&94hWWp*uh6}|JP98%1A{e@yTsw?w3X63#<5{NF80U8 zK~dJI{UsqNii`r$#*E|Ps8fwe!`1XJhj0uFEr5gcC>u@p+i-kvJ1Nm_dRc-`4^ z96krKF73LruEbA7_5Iz;B|)Lp3otlxb>nm~B=hUQ7y_XlHp$P-uDJ@xOfM4+UTr;J zZ#*73C+cD7zS)WGIrq`Z?8w&h_q!~SvX}6j@R{D_UMtlw?uDlmCqwT#48 zUiL*9W)%gmycNg2WTK#_mNbmPEjn8+=|H<`N3Jpg-)15Y+ zR@1s?@25C;-|+b=w^ekewjBu?A9k&I%{`dE3iHi@kicAG(YvzMxWH9i?P?*aI04YVdq5eF zyLBTa!rt};RHm0R0lM0$aKJx}{olC%pbY%s1<_&ZC!F_^-mhmp2ExBgl}i?`?9Y)xx1+zMwvkib&6L2` z^dSA7Y$_lXx)c;^Ry({j1th7_#Nc65?**F5&_=-pq;6}PE?>nGSHAHF4`~Yx50`_t z`KkRLr`-+2FkOYTu+i;b$!Ar;olk+G9ZzV=k*6JpOW}V>MCs?f7jYFWB8RbP1uWh; zifL+J1V;c(EGlj|If>;n39WB6V4zIEm$IO_3Sf^Cqxx`nDUUjwJ}FGcvMjoqQ}r2$ z&5w${x#O1CZF~GAm5PrOOEePdX`+AyCE_!P+*l(gP#ILl;lG?71!D4z9pJ}wKp_tn zZ1HzQ)3EwIXT^oLI9e9mrN}{EZ7j@qL_D~t2xn%ILB$vTEbOt(R(}9)730DxGyy66 z5RR7}dJl2N?G4J#_=AKc^_+3H9L&K+a}9!){5A=Q3hZF#rp*q7W%BP%x#_qfhRU)| zC4{rD?l$f<;@1(=ksZ14w!J2uM;msyvKF&_i0o-5d_4$pV-QU5Dm2%Cbp#iIX zJqT_rOew8Z`|J1SC*MO?d*A0_vR%pZaQX3}%c z|JQux9gf0xO$fD&78%T7L{uECr@{QMRh8o-TFOfW_RvUemv1}7;*MXWRhv?( zZIUaj`+Hdp=E|Hf^{M&yYn?jN#>>Q(3T1+BnB-&%OAMPaf;iK|Z?8!TNM-8@X!(DD z9kVD29+p(ME5OnFff{ytBorDsRZs!M`LY50YPl*ak!~K79O3=h18UR;gyjRX5A8x6z0Je7Fb5?mw1+!wF zREkD{QPTqsCLLhEcWpmlIvJp^A zL*5V|;+wuS|D2&!W%(7D1nq5B3}|@0Wx+#P-W!9sP`-o(N<>kVGMA0@M6kMU&3#R>H8$f~85ofbalPx>fsz4Im3I;V`(L+r zA;BJHMaC65xthgVxul{@r3{6(G(H`Upx*w>TqI)z3KM`Mtt>MS;$H95kqmZ|ode(? zG*|yIExK9L=iG^lyZRjMCg_5fzz)JLcJl6=tK z=U{b+e)Fe_MMD_P?iqNz(qRFtjBcFD(4L^z8b#R`V`fb2YN2h$LGWXk22*HzO5eC57zGo z3OXl4>uRg`pw%4oYTRIv%6|7tnsAM=dOCm_9x55m=_oqNagY_8<|Ml72xQDVc)m955ARVj zLTsb1MAiA(j@xJ-eQ8}Y*`CJ(J5(?@NNl@IUZ@e7E5NJ=)lgQLH*RKV?*jQ%MwALg8ZppXUM%f^#F5ovT3JT{>Vv0 z&BuBKkiTeGAgIL<6b(T#7Plel{qaXMzh@6G$C-uf0%)BQ+vZ?c?j1S z4mlT`Q8q+o5Lm=W56Bz=l6|z}SU+erSWG*S;`f|tA(w1KD(;2IT(UUnrIX_cDNdj( z1&8-$G5bXX!nyU9F_jfMb%#md6Lml{_oNgq_^7+@z?uRa2kd9>xMIN8k4}k8qGmMJ zS44MPV&;`6k!-Hng)^N-co4g=`MiUKJqye4zK* z@0BzjV7zDJmuQv2Y8-}i(c|BL7R)zo=cECR0N^MiPc@43FwoIq=@q-vGmPpaG}j8| zg@4x4PjN5fdo7^FRcIH#JT_tFa^z`WhZ;>JESWbAZ1YhK*@z39^;20#^3j9vUC7zo zQaR~;Q=q$g07(eivxLEUAKm<D(2Yp2RYjo0T2Z|B0ajIuX+EIuhwP-J=r(#b#D#(HH|DmZvzctO74{7ITg9Wym@qql zDCk$$5C}4f;MO+GSaTphLHxiv#t|bZ4smDjEA{|RV1yRA&jXVMotS>MfRX$l#O)5L z#C11;VkIP7f|1Ks&M>@18&!`w_L|g#pmdih3-oyOL;+(#--65-`CF;HR;28&Y=RlI8sDAWbXj;SCWGQM86Lg0beGU)$bk;IZl2+xgz&F>H-z!D5e<>oaf4_~W;R!r-W+fQ;bF#zrO~ ze6$M}wLbDCyH_h+0)Zs(D`Bd$fBkfI?t84lAyc7LUm|FoGNz;?w>5nyv$4yR3U@-+ z6Ex2OXITQ8=QktW`ZVnjGa+97sS1ZgLqioA;?Q`e3(75uoPpeBBd}PQWG-<{m$`HC2*8X-S-g~-HGc#poM<=5o z9kpJTVe!t`vH@>n^e)KH(%4f?p=i9|KJxAUwYT?d+knuK^!<(2nA!T*fuW|_O;++7 z6~CX1Qs5~>QrJ!wS5b_E$WF839=51=X)?*2J6RKT+?U_sUIvuRw{u#No2Gp4YwRus&At9kwT zt;J3UF%=crtkOFYa57ijoOlvm+*RVsMR2;!>MSK3u#G%u0>Z!oL!B7(b;!Q4?kVuu z@kn0uS7Kgvyvc9cJ13+U%bU|&lY07yuO>m5rRr|kPN=fiZAZnjh@>pzSk9RA?_XYe zaXCt|aCy+Drrd->?GUC`KSq4DSSlQ|%^lnwqtKdv3@^_<+PrVJvZYnm<;VMCE+zQ~{3m;1vXYrC>ey$P@!(RUQcbwm~@9c;0bO5ZdzcMcUO?3bV@a4VS%b-F{yKKVE{GW9cl zXn~Xg(OAmQpB2sI;^;O4^@&anG(N{qvkN~4rQK;ZkG;{1zSxeQW*TBH47*DW5AGAG>yJZMI^pK-~82Enb2tr5oxLK)RT1ra;d!R}>B zpEZKEzG_6jCae!QhRldqZ7DFSFv4CMJWH?J9AA!1s`)VgDP8q!e|0aT|I{+dRy2~# zF%VWO*Q;{!G{%4}ahemGr9SRhRW(YIo3rXZcOXs2^CdUcXOPj+yLhctU|!?~L{%b6 zE8QFs3T%lN`{7pn?R?8Sg``ypg@oBuHJrgqIbGL+>67DBclnSDTb1%j>XACrQoUCG z-k&~HV2A+Um%?f5iviFXNJcRDDd_h^ZM(;yx0~cdu>;yv^^OkH-!V|~`3;T=8sQK_ zw?%ZzQaJtzu)gcdlB;~g=DVLm!}hL5U7R#I0`cepv1xegm!~9^y90fPXlq_65FgMY zaV}IoQw^?RXK-<`wk@AjXK|J{uGuK|J9-!MNR*7c-g_nEwmz##;Dtsyf~fg5LO_`I z8jEMrL#M(ob1W~@`dwZ!=$1W`td1q>&A8Y!Q%wi1n~)9TwOe%3Bs44)I(U8Ov)ev3 znI@kYsP|Q+spHwhNC_eeaT^%PFM)5*Ah&z`$ZQ-D`M7xxX0QiCJV^%N)6>znttk@y zc>8!)r^Z3+v1+WENek0+sk;;&5j~0r0*A&CZ?5;GVp*okQQr=CIDE#;3r9*PaJh*A zV;$>&;BD>bRIyuOhdOct-Q zOf_!FF}U(E2vF1%Thyi3y}t3Ws*J$rSg?##)2tFY{wpHL37gEjK3jWNivX_{=cHM} zG#1F6>2W{lPD^%4PB46&tc`R-klS_VkGJ z%MVQ5F6U%B9Z2PMs>KK;CDfI|xredDGTHntu$6Xfs&)R4z7f8*zcSSF=dV<9r9J(s zFkU8vzR`<{{o*{_FLMxKX-`RNoXNjVvnj8Oj~WhGNs*JOLx8NaXw ziZuNQ88<_#4OhiF-!`1DcJvpe zf;X`%L3wV5f_wwyUge+^;q`3+4P#^$sy6>kSUG~K?#S3aGfU)-(L z4;KSIVk!ZU0c3Yy5P!(U!00-xzzw;1k<)1kZJ?2S)$USY0Pp5}>>N%7Wl& z$J_C5rSm-IESw%1IZ#pPj@H8ulh%69q)%@}s=O8U87hwDCgK?3E^G8MW{VN9R%*+I zNt`cWijxVu+*5N0-WY{qKph|B+&8Z0q`1N>G9|$G(-FsxBCNGQ)pJfFSDC08GD;ge z`7$I2DVpIW#yAi81y@EYRE_RFNdCI>_I4dO`Gm!T{E_w6WH14w#C|X_S<6TBzE&OT z&^Z5$*t43a0>XqK?EV*)zk`NEZNN+w{|OVijlR!)eO~lo9?r#-q$2inVpxu*E)a_< z#?uil#n|K)Fn!+uX?K@?`1bwp4jQT>Pml3;CHm7vg%1Kg+$bbX+>aim_l8V%CY?J2 zf9E9(-LjBlx#yCbH`f&v$tyJgNDK9*Ll>07}PV02n2(?8` zdg9)qmBE8DY)FNThXz+Qs}y+;!pLE!3< z`3u;jqVt&z_$!I(Mx($98ftY38(!mX1k3Wz@fkZR^4K4H-j_J~Af80@r$(v-LqrPb*X&9roJ&W)Sz&(wv&IKBGgT4uWrV1cOE#s zb(3HJP6OOoHy0$wOz}lo+!)w_jsj(_D?iN}6M31s6gQGR_=ca5=4_%92nd>+yzJ&&c1_xR zJ)&#C|5y>JITk)BH>&J2f;&fq5ic(sGrDqME zH_C=ikuTrV9=o@A1C6zH&icDhJe`&Hqs$>nnp@Zhy`IS8=~TYLnme4XYNAjVM=HNK zy^CTdi^}7jbpM?6*j@AikI7278Z8eO8C{Qw%(r)_p${fQs2b-DA9J2%+Oi5oVP|%jBgwo*=Ds{0boo0y@>C<}& zv6k(K4hN^@G7QS)sN8w?vmCdp<>!*RcPlOXbqWqJg?f3}1pt@z3JSnb^}Vn$^u2uweV2sP*E|LxO&ann2$;TlhYn{()Y}r~~ zc<>XVm5se;WT5Ayv=iLMGRIct;oOFm?`5YSp}(7_U2{c6Vu?%nc9<@_voPwv-Ld$^ zej?!fhwg!HDUShQPXUOQ(kC=66K;vflpen|o@OuFWX5@D{6X~eyFas)QJ{oIFv>c+ z&G92x1UYxGLq`-%)Hn~uBmZv$Z*RQ_jOB)NrcXfa#>7v$m1AO~JKB}#Z@w-pl;GjE zjMb%L3Bwd9V#wL!YaFtW5o0jl57*^lbbpmU@w?}6ic?@3UunVK^VxT3S}{;5Edb~D z^aQdt<};bNBnyoT#~pm>CC9MG-Ql0dCe0H@Ild)LE~@qaTr(lL^_KCZ%wBG3J7OHZ zyD8Sx_Aoi6i^O4FG4eL=C_@~($ng^*xgHqy#xr{HX@Hc=j7>< zuKS~`{|qxczg=gBZ7-?)nN)qB?!cTmMy8A{!SPEFSN3%d#yZQPBO5s~SJq8Ri{SYTE@6`ydc>y~ptPgHWQaH?Ok1m<0f0b-P z`=w1a)KQ-DnR0D(Q=Ef$d@YZSK*kgwqBD#HDt3{dOZ@7Nm*e7S45$-V=Bhf9v>pybA@ofQ3pNXAe0) zN3?OA=(~%T^aX<3^?PpckC9X+oxIcWp=4(MUOUrE>>VPFYq(tw*=iL2C2q3Fn-skA zsB7{m&NZ1RbAugPtx=fFH)?R}7aTYMtk>fg#LXvC*3GTwLeV`Ec8WW1H{51I(+h#T zBE+k$KWKhueVcdtZSg(D7k!DQ^|)hy0{wf_Q+ESNn^*)U){a>Qe$$hs=@#Bci%q}B zFHfT`kE70?5cr;-s9#{qWo2sRdZc|>bJIuE>Tv$N zZ~nYZ{2a|!(WLKiyU6?5J$bZ8Bq_%9Xr$CcGT~Glbew%4=O$#D4gEZqTU$G2bIiv!UdWK3a>Ofc3Ew`_6CGL#GKTG+ZpgAZq3iu z_ZfPEfAJ#HsyOlPZ2LYU^PVLLWp38GB6~d%1ARS_;xT*1W`!zVlgT@LGrLdL?-81* zlj{4neB@7tFy22IHoLo?*g4c-zCCtoQFm){#wFlz&gMiZ>rt=`{^-+i8`lkeYzA2O zMv7?U9Z4o>6U&*BhZ?6+6Hci$Z%=J*N>R#ZwgAQ#rS*ffNVui)LSL0#c~;S(i#hVD z06B_{EXI)94Ms%BH9AbQ>r|BPSNKaDaUICG#K$*2?(kU>Ld^jVN{AD%E%gqJ-nwF3 zLDhag_>?3{7Nw4>ouzrXL=$Vk8bcf>dYt`!=&d}07_yI)@qmT%Dj;Zyt5N+6ccPF_ z#q)denHJzHBv!9k)`jv}{d57uWRlI z)iN(p?N6Z_zPgy!6&};e-$9=KGjxv}(!Q3DbT{giX+Rz@dl$`=4(B01z{x*{NNGS>keS$Tz$G zX;Xx+&w-{|F5tByU^c|7Q-?O&SJb9|9tgUa0-_4v9~;t!u)hD@F7)HSoW1}47F;_> z2Fd{uWs&_4VK?Xyq(c0y?qn-P~~$fuaY@Rm(5K8;T^DrV(uW3nq~JKg}gp6l1S z++PKvY@L9?r?IQPz?ghjfSAMca=+ebn>pAh3liu&wetR}u~KmXZ?2raN&=e)4;3$! zcHOPz9r`&&ou_NW%8SD{P6D_whVxd|A#JYy&A?FX9GK4!wSacvqsb`0mq7Ff>I_4s zmlsD(z+*NN7|{EpLS3?-6lq8<8(tn5-kf1uCJG8=9QyUHsDwh;#rm#t)sX2(p5n_! zK8p7DpkPRcbv^mLc17@A$Rd8JGiqfFbSHs23Y$9(N#0DeZ^cI6(yi00cXN=ZthSzn zK|Nse@*&YUXfE-Yk=X2XO`{q({|6IY7H4JGxp*7$Om6#Lo+$64#mMyNlu^+3Yk z1yu!UIoN!q6A^RRGn{K3cA}0>xKGT6=L+WQ+lCvx31yPs;eJ>E?Is9kfj#p9D5+Ub znykNFesA6Pqc3HpFD3E4>@vZk!$ldzm9(AXmxAfUW=KUoLd0oB1FV79Gw zSHl|se|ZkoA%^GQZr+~`ufZo z@*1ug`+-JtjKEs>{B*%c>&9yd(lfDEe;Hpsr>lAH<$|D;Bz|Qy?DZipxqzmIPCxorTo4O9dFjq zmX7QC7Y@{AHZZ8ev943IcgXDVRmNI)E)ZgWwPE`xrSc5p9?xE6?S$&JMq(_ zZ9_TngJBFgg(RB+vM(4GqXIq)<&;r_iYdABgw0!AM!*aa>d_$rOat@p_)SX=bX?tx ziZ__x>)fu7utyn@B*=R6zK1U8njUz62p-o@^w-KZn>OKt9bMyi&MDtAmah88qo<`h zDHXon5zy3iqK%beT|mdQFpWIw~iX zsh?5okVm5$r3Px4OhG|BOI_nu=m4;a=P8ncw~KT^&)zGB6Hym4^4sO{@`%QJK*6xHi z<7)-|d~Tqyn*pq&3LZ>;)9Rm#;QGXFVkcy}9pW*%4RuMuRT4dT9LQ)QQlr|&FGTFR z5qDSpHq8xTyP=3R+iJfhp2|D^ZXVcluMiYvK(|)lhDnBPH%zA^2%s39P zwnxcG3R7=1zYjtf=+xF`#h1VOP(pis&pvUhUN2*ed~Nr&ARbjJa}H5R$fcKQsrbKp=>|9sTujw{3N4FiHpERPqWpudR01HPzclhmc_m&GjRYD4B=X zaJ!r21TPL6-EFKf$%xR8eX(L{)>9Pd{P-7SR&zkaOelXgR*uLoDTloYe}*pmd561V zt)@U%;K1l_)4ynbFp=xuzdV$o&4-hg7?c`)ZMC#T!3caXE_h)vVMV%b1-dvs|8$Ky zNFFMtVFzGm+SvG7SaG*HoPx(}*Z-wYh)<>KRPkWQS$Dy)9`u5qeCY{#V%(SweT6%D zyw1a;>n`ZcpQQ6xd?{IJ%fU@b#>q=swB)fE`r%vYck1Rg```UL!exG^Zg!te2yXI! zt+`jKE~IMdo=DMJeL~V;@|U+wTLaF^kNOn2v4BoL0}zoLM25N8+!_>0xT&Sz-yv|g zr9YQHz488_EXo_l%;?ZwKaS=9@b;ErRdsFGFl-P3B~==vL%K^sq`L$O36W4b1nE*5 zM7lv5r9ry88|elK>2BV+!Mg6}`2K$XwgPL{fTK$3^l@dDZcZ%PcWARc;VTOc% zO=9DTg+A zZVUjVmemuOR&x|I*dMbLmka1R)=!q_Gf4EBfFe_;c#-h5!T$0y)feG1QSZ<0OF$7B z$)TU@+wtSz@!2P3EL4ZTtD;p2=`^l8hn81INmAlPH&K>na_Ljq-8$doCIJ9cjB1 z3vh`}0rvj6glfPVTDzadSU_M&OY62XN;cxZW^kgp00lAOw4U zGbS2iJQim?Ms2pP84-Ohj;|o1J6XahBoh}y%8d-tBR{gff1kIV^kHn_KXNF~{gW})}`+@W;ttW7EFEe@PejF?`4?u9zle$rR4y^9JB z#l2$Eon8$Ay`Rh#t`k}^H{PotKfsg6_rC3agfx^;S9~&vD3DuD__=xvQ<|v+v`=aW zWy5AZ@z5*knJDv542F=@&^SbMB%X8`j<<0?2Ch=C%V7~gKvR2llaTeKnazhImcZvW zPw7rWIoeMG81d$09&=pwf<6i=K7ZEGx+$n6mOcBYptkk0S6I-u3}wAn;B7^od$;bboa)1;}}PqVI+MfyE&VC;YAwo~ePQSzr*ZW(++yb^K-R4i!j^_&nBa5qQ2Q*1mx-1DM?J_QhE&B z9mhbQ9OcnYZsjKF-Lj?tm437tpS6>{ko({4Y|Qk5e@4MefRE)<;&3+*R47Y{ooLQ0PbK0-rS_j+U0(R}i#U>IK3)IBkEag;Zi?{-*!!T*i+0F7H6f_AKaF|= zNPNK;DNV9#X~(5OwJezV13gBi&R!_#cS6jx2u5~v2d$8AwYo~du#&WHO+9`@GY}D< zG!a^|$Y73@k7Amrp4|1+C;bwM@MCm3N0y)p(~ktcW=?ej<78&q@F^04@GeA@t{`J8 zBPy95dM%37NJIkHVTLQ)!tNW&3h|^80C>Ogw_T7@J$jq2|eTJ7YBeI`PNUA)Am`ittfb2TzE1(r(N~F6_>29 z2memfy+M2N#cw^R?y4uC*G9&&e@r7Qfa{gk@oQ)Uh3HbsNB)>iMZrQV()%f|Xf-1G z*Ff;X6tq(I!4r={&K^Wq!fM`cMC@Na@?%4qO>V{ByRUu|~o4FZprQig0IQp5*b zKjjcVUvtvemIekFiKgCI3k*FD0b?Xpy-rfErX_=nCdEUen#`;ulv)6&SEup z4Bub-nulo-8=iuwyr_+r76w5^>2KTW;Bu6(l)ld_OTsW%^gO652+cOZ{ztSLQipv5 zRK;hPYER?9u4XSjN_mY$!zZWQ=MeGm2i8RR9ig(Pg2_T-@s5KsoN29NRMO*XY}ziL zy>*|kSrxv|C^TE-AQ-BG5Ie>2RUA*dyOFo$-e;slpSz1ZI!YLb^P?>dRBh;RBaqn^ zRBT;Y;;|85G+Dnfe*y_7tMh_rm2H=Nc=$S`WygSu7mI!8i$6zk*A2Xe7|J}Krh6lC z3iSBa$n=#tx}pe+5FhP7a`0vF8KL)yHLcWU!*TalW2D&V&pn$I)F{>nTU_QpD(8BK zv=KAq(lypF7We#dP=jz}y0}3hDOm%OfdTTn{7)&z>UZGjusM4 zSQnNEVd6G^?uTjUYCc3p$E`p^Ta`t1raJLPz)@DwSgn4=TVX&j)0xHngLi~R6`{}K ztNUDC(J2`X2_UpsV5Uv#R$6}}>kTs)!eP4A8Z><#AxMF^&Efq};4(SM`tn%V#Px15 z0G!zft*QqK zjV_ZSYIDvMA-L_4VTMnH*-%AoH`0^l-&q`Q&xtsPyzVQx^VtPAY{9kYa^lrfhd4Kh z9)bq_FwB>h{*wG{0u9cV??4n_vS_w4E&qjj8AMoA_|ejjnOsJOpe2e#Sq{`vdR7Xp z3c-z((xTcvF*LTPA9g1m55m6V@P9_rN@p3h4caQ=U(m>!6Fq)sVI!Mh2zVOM@u)cF z6A>nx^)G;layM-p6VX)@*zuLS&y|@%i>Rl;4}1y-3b#I)5#9Xrev?S zgx)uuIGy2z5FxQkWim(#7fWn!V&z32h`N3(`ODGo|9 zoshYt#gz^}R}PYUTk)ptv?|f52;wJ)pDAu0`84V2K%xtytA2PF;q{W!HtHRuR zUA$m+_(HIxS|7p6YEYq22a7zwx$+@}I_$K?MgiNNi9f(q8sA)^NcC!~jAz zTb)EwjeHf8caC#ww}y)vKRtTtMp$wV!E@BMG>7UViBx+qA0O{5Xdvq}z533^#;Rtj z=)`#Ws=?+?Rnr*IlSfi+De_}w<@0#oxZ%6myz9XwQA~@fWs5og5*fpP@#)vSdbJn_ z@mr9bqP58Q#^*gRDw_HHkJ!~I5AIOB{E{UsZH2W1LbG;9c%E|5ah1Y<5QltRSXjH1 z;c#Ajt0hAt%k6m4GW{OAkvYNCt#KH#F|SHt#!>-%3>17fK<*XTkvI?(O6L}GEC@7qe? zAl+G`rF~KXU~dr>U!Sa@BlFttzG5TCEHF*;+Z5uW`0PVUVW^1M%w~ya@g23GhRZ}@ z^p!jUR$}sD!Qo7X< zaX6Gufj=yR&Xq?pn)*UHh((MJsQV>64QVvI0~_)lqr6*vmZD|+m0&-lcUPSx4c?HL zV2Fukd{h$2CIrS++&4fxFCv-KW$mS_BNgwFCCDcHQ|J@bIruRQ0NZV-wK~K2V^W<5 zQZVgDS#r+E%-_9KnG9OZ(=zqR2_&;YDm6!f=CmA8%=arejkh#x&U?IDEtv?VTLXpc zr$;69Lq+kyA|*zGRwXiFCm-;q{9Vi3;5;{#E(?C*c+sDAeTUfqO1;Rs?XbaZ%O38E zdcr16Y1rhg4fg&%6vy1(Ow@FcpL-1QiqI7yn;3|~Ej%?dZSrs-ZXq&=z#n0wDU-~2 z(f2VDbCe3!Mc!U)576QBPlUwm!^P#4f_`uDBq%!!j1K^R3XUPtsZ}n58c%o*FK-8~ zJI8s%t%!MQhD;g4Vlw#xyGu}J8l0-$|-)aOaBxb~Y4-uF-i*Fec6;}qF0`(FeA z&=8T09QGwxLph}sX_<;*@E`wni2Tl^1LWH1z{7e%r_u;fhL5(!K)YMs7*a$3^#GX* z5D`Se*yp$1nyR(C0(cxo?OKzy^Vd=%^sgsZd04M8ftkdxR@4m7zXii$<&5oh8|o&0 z;H%i5WV2Z?Wu^SMF7W7)7#aclo4OV1Gbjo^2}+PEMfn{hYxK#Oif80c*QQeJYPBv} zQ1R?qyC#Bs)`FZtG)pA z`8glVWmsU{9VxBRk5|)YbT4X)w=Qodyc_lPM8lc1yQ;x2F?+WaboC1ZS@luSeP84# zf$xWjdNI~0!ND!NjGow-XAO^YIgg#gs)GgZfryxMXC7cYl|R+Zv-_jh-Q`L;61-*c zpq>}-JwbC>ZWbuZ^r8z@^zzr-kgw4!-t$rQT6D1zNuY^(@8eF-Dr?Kh7e51Bb+llL z)hx%Of%}B)PFQK%6c2DvB?C=wt{2Qm>jp9!bmBe2i9a{F#xZ*_4RCP(L5$kF=Es%8 ztAlKDso={G;6bk;a1LmrWu^-N)UPP_sxDcYXGQ;KWV+<9zzG(Syw%)&-xM6ddK6}Y z3AaH69X1OUggukC1rDB_2=ItZXsxEAuty5QPUiN#+F+jjXKAjh&L&({{|soD4MpW$ zJ=Sg2>(elv8UN;}+D&JD-B*v<_Ru}mMXAfWo?{j@HZD2q>1K-^;F-+8D{IsN)snv+ zL>rm=liPRKzo+5L&dSN1vRT=IwE9$qZDZeo#&?13feZWM=dsr{uq06^6J>Iw`Qz0V zAA4DcGEFRfP8dUWCP!cMC>yyVu_3(-4iVZ$5xE)_#v{48 zFDjBH zo$KKBgC5osD!?m!Wt{o}GgAO^N0qVaAbN|;8Ew;%Ni9#sYb>GXI(?xy_W^F{# z$jx8okVaLt@Y#Si0tC-Q>C)NY_f=82w~!?P`v31kxDv#S@WD05?$2uN)zCJe=Q|i5 zLes+?SMUkKvu}}RN3ea@ zP4AxqVCpW31JZj`DvKtOkv<}C5FmbmvQ*z{L;b~%0cI*D{sx9h;$VgX(85DR|v6>bTyUN3m5jiJ1U)@gYL6u2b~U z2vSLs@W<>Fs-JXrjFrMEx0tRUD6aw;J6;ws#<+_i4)u=XEBCog2+X^>HxFMtI?@SW9GwY=Fmfxi|-~V z1ka&Cq&0fmm;E161w~ zY79x_+FVPRa@d@4z8a2It*zN*=h)dCul~x)>KES*SPNn}Tx$#06*mKz`9Zy2IS9A_ zRwf&2kU&8JBE)7IHJw^4EK-pln zF{=FxmM-pbib0;SvHwUvcr9C?tXg^}GLQlgpDMz$)Ru)&*h@?h^jDiaSYWT>79U4g zdI241x2VqEVRtXROOP6)MyXAE1;y=6*I5xUCq(AQZ)R6g(6}8ocgwpGnohu%Z-4~3 z86)$ARFVXsESgN+vm3wJvI-EIRu)2=UHUb^)&b>HdDZ5JLaTBWbmS{sz0cj(F4b@q)P+*g|zOrx3D>($1cI`@idYRk%xbg#V9H1-~16XOw%136# zp!gQ(E+uwHzUOn#?T#!Q!$K6V?M6~5xTb8=dnNJ5a3`FglE-9#9ljHBFqgcq4gN>A z7PsR8ueE9|tK&h3WUqCDTfG<>P80P=5O?8#-q?*o^bm%-*^7#Ut*NVcnJx0z+xtXJ z`A32bGnz$Q&(xt`+J^@=y78-Qa5Y~F&u$q!es*grwnYyLPUg}rxb~6Sk&;~Uc;|Qy zPeX41Z0B^T)tx{X+6r%VsWKknBMH1SLbrDJVF=@HSq7|~*XLfzBnD6;`}s1OO%Zyr zEga#qCVUy*w(D{IaAlTYbIJ^dFw%k03b0JzjRCeyBjhErsf5`TwOw{2(Uimf7N47w zYDU204_CJ9ll|2bm9-uG)w8Q2U$JeoH4>o{=jZ0=7W<|=J{x{qhIq(4(pEsV=k}Y- zx=wDCGw^frzDf8(FqVL(2to}r`%}kWdI#IV5}AGUH9OGn{jvIRC2WLf^?4#cz>l-x z18%?Wl6io8*dX5CJINFNIkoXFvrDFbIzaaBAtzP5){oo`+3OYhBIIU0mC@~LmnuuN zUE@4*=&fb%b9H*KW+$I_Ny}N&-Cn03EgW|^Vjr%BrMC_!Lox}#)5GX8ybs>sulpeu{QU=F*06Lk8 zuYj*`qD@8*Zq!3`;@jVdZ}yce68Q(;3*hzfniu)peXg`DGi5x@ZOVB?e3`sFuVD`b-1%j-|mKlXGi+`k_a_R%wDSSt5NcfN8`A zStU-6lcoc0A@KeN*N6TNga#SUn8uK>fxYxG_VB;Z{aumSYU-7&)P|0a_i&EP%bY+H zP7y4W0;6vmJQbz3N%rs6Fa$6c)dlyssIu~fE+~)kc6z^EJ?V!aDMx|B)Zn&pLjZa` zIXa90*kehA>A+=Llk*_qm0+3cv)XU!h^^s*?4arBtHcDjjc;z?V8K0102zp@L+rsb zXq2q)ZNHePy0g$l(I*W?&|N&<1Kh~#BMNSYFhQu8j`w;M0H%K%sMAFtum3!|g zl{5~1dzfRFb?+jTYZ>D7Ldq5t~gwV=e4#wEe9z4&oXZ4 z05(Vjk1e@g=&>?c74zUlS^Si*#qo#soK7UXEy{t%15);77%KhT;>6zYly`C13e5%X zI$G@DbF;~XUe6lHmy^O_#k$uXv~|zjzC0C~$uxp;HPW}vomHE*5FJR#ti$KhBZ~pU z@&)M1Ys!oVQMgl*T8#NHciAo+ZVX0L4+{_4ez~4kc^1&udB@OXu}LyvF64~*8_7V- zoKfJY0oQxGl{v-4Qb4uVM-5-W*&!SU$lrp=AWt0*_+Phu#@QbY5t*>v==!7|1BeO1 zPPHd>qYji-rg^}M7j>oR@TCXezmK99D@eOSatiNc(mwwXT#V4(n!yi)CP<4hb!lX% zTi??WBeI#|Pcx$HF!-acBp*x+`3r@yhLIgw*|GsL$LjQ0UBvUoW6l0$@)ZM!nF z_orfa-{65KD_+N*o{vUuS1QEY=XgKqQM( zg&86~=K1>SO>N}r%A?Ez8Ppr1rxQxIK9n5%+*xwZ0-o#UJ81}?GzpNi=X?YRh1eZt zGtsLR8twe-(*f-xFz+||4L^qMHZe01-MKD|PJRTsJ}-}ht*~1iPx*Rs_{d{i7P@Ug zYW3fyyrPyRDLB;UlCldXbT$*c4ywTKeFr_++Apc7-M?VsSkFGOJnbi`Mmt`6e-9TQ zmH^AiX&)mL;i1EXv9;~`^owV)1b}D|oT)WGLClI{cZ`B_F_JKgE;u>H5BKK?!a?$* z%fV~L_yoAa3JZYd1%Q?S%lReT>^_CO0YuGkOU;`oV&h`e-SgyQRo@-X?9T5Rzlt6A z(Zv~N5FKSDxng8uwfm~J6(h|_F!F%wa0C`;hHUN%e6&I*?%fmUb=Y(RBue~Km9B?A zNc+xP4ff_{npZs$-Ag#F{5LzD29caXT8EW?I?DQ;19q={Xy;`$8jnSn`+c9VAC*gh z_o>Moy7Qh0!mi7K%q1A!pekMW;b@*%FM1v8j2gf3aK}3R?`kh5prq0ao?S~Mx}Zv! z%AaWws6C~nuzh)*J}^k%G5qZg{IX5p!t(&9ktSkHLK2*8#fGo!6D8mK?m|8HKL!ji zNMGIsV+g0ncR4Hhnm(y9#=QQQRv-L?0$QSkkjH|LzfIZoN5KmaYmZz3`u1z*?w6H= z{)ifC1mMLv{wgxu{Gt0PpcTx$Vz)u~&x62d$g1y+aeKs`Q=C-?*ADt64(b6f`xz88h#sQ0r2G)d7oK>1@#f7 zahS?j2<`Gm082yt>*E`O+MD;?0DHi=b@~%UusH-cOkuQeph5B%!_n{SfChXAXnv%H zt*nHBVcVAwexeK-AwShIU)<(cD2^}sJMn@G;Fjgw90%DSo1i-2+lUQWM)n*iMP%gR zS}%Un3!;-!wf$#4`k*S%GL`$XnvgTf?QV&TL8GG@e3dUE1Ji&go#Z$1CDe=gd-rTm zS?p<{OkOT`>MH{dDt=fF!(?j0rhHEZ`QR zOySM^XS|*mE7LlAmOQ}Qra(+ZTrB@O6J70~PvO;e=(|a=y!Rf~Gpt69?spp^bP;)g z{hpL?<7aR;APHu(D3Ttv|EF1%jR1J1_+}FEfIs{1`awV52Xp`oqRl-2yRnS8fS?oS zWC#z*pP%$uz}s$3Ly=KHa_xmh{Vl*eW6WI(8vP!huB3PqIjjI#KM?=$h~?=6Z7O2- zbV?BAXGPAm|Mi|Li2uthI8mS{=H5Ld-}_>`uW&Z^ntl!w>=7Z|UyVx8(SjBwpt~~q zRh2P715ktjQUX;S3icr-34C>|$pa8v1`7h-4_RuufA-;Gm>}Rw>E-#E&142}$biU1 z&Py?!lHv8!PMgl_(gg(UY6!8`KeM#>sjkWQp7&i`5B-T!b5{Vv5AhAlnhU8cmN>ZX z)+&ZFrnEQV{h1PC_el)mZx4`i8?vD!fMbyz>9vy5&~fBI10c~Bhkt(62?Gaon*lKC zvmwegK*s0=a0o9m&bDlrKxx*8G~uo z=bEGeDd?Bc1HVawr9kwr1tG45m*rjx%brY=mT~DGW&sl_2R699`oBUhn4{RRkc3_! z+cV^6)tR(nGjcsibYLway#7#|f<@&a{>83``Sc`R^EQ@oGPvu}ARlPpcXh*6{#gNN z(&1MCq}e-lCZjtIJ4I=;y1U!=#FcX)E9LfGzw~hV+ zZ=;cUZN*(7>(@MMsP6#x1u@1-q2tjefc63=BF{xwC%cKW)$wn%SIe=sJ1?|ru`*Vn z1eEGzb&1aWm4`02o0IKVucI&5mD)1$vz3Z8G;RT~Cs?s0x9e=G7V8hh@nYKiljS{a zBnpCfGS349Y>PuhNT8V83}&?QxooH1xl1Q!B4DH48ZGcNFGK*&iur2%CwNKH;L9MN zTH<-ketgDStFs?pWxE+(OPBx&1@WX+Bx21*`#Zi7UmlnSWN>c42IVg=;-bF0B~-eB z8kI9=&uXYDZa`zN%&naapAl7F(}=L0Hl-JfEcuhw3MJpAr0gshUfU{!6EY<3Mx1 zy1M3N4i z1zsAI)1nBPU4ILv;ckI_B4m{O`P%W&xceA7DKXK4 z?vwOoUG&iq-a8D|#wA|Yr3*n)^fhdfm}}0z*qHD%!BTPUiiVv|i~H!)cU2>LHlSf9 z8L&4z>U1*U0E3uBG?<~Nr<^qNiuD7sjrq0NBbR>y#DBIg=DnJaKq__@LDfi^Z5wd- z=o5QYo;7?Vtzsrtw)`MktN}KrH#orDn)k1j#cm9Gpfqtai8m{UqM$cX?tXDQd$&aZ zX6qf0Zcl6d2FMqQsi1$NhIk|Qb!|mtp8U)9cjEp3$@cf#9dZ9b>NfkTfrj>3_^^5Y z4>t;ABb}}!`Fr>cm;h7Z{s?#}s<>s1f66)TKPb>0%|cIehOs8YVEyBsn;;nQft2aq zB{i2d(h%ShE)$(41X+_`?g8K|x43G-tpcGIC5|FOb}{a#;7SbLdr!%v4lw#>2%8qa ze^nfs13EJA5@@nOQES@NhJ0>BBCzadFK+z|9SJA`sKORL{bP>Y4XA?8tJ^PPZ?6Vg!aVW{kSW^n%HIsi&?|90v@QowKTTS;#sdJc2pY!~ASyeBqW;^VjlY0zS0}ML z4FM>**DOV7fGcq-N24^)dBZrX#_NMPPdFG6z3=Cz`=T6l1Pv>5=Cb2O6xX5h-(tee zTeu@*Mm@IQE!6MiVX9jOJyrFdGgJjy&IiK)e|44gwGowfo$+dyQI2<`*uyN*`EU%E z)j*yb$h6ra%`SCDLUFT?qi(~-O2RqLE{MndY#?WTh;xi-hlacOEB@w=@lT>g0?*Qao`KMI7zj? zDAqT8q<3U)@+~b9y)k|@-*Ci?Gf-f&yfl*U?644U6WgVKT?7I_%A3;O&@|#=G^jQ8 zeoZm`y-sXgu*qQ=($ScqkC%b2JkJ_+M=59_1yI{K1AagYM}4(vSF2I@O5%$E!00o8 z-dme7QFrQmh~}hZdtNXEV${cCrV5w zUmk4%0CuwxXol(qG3>Vz~zpuL(UkAXK{H~YhL2B(pQ&5Jm9lC_)wrg6h7YBe0n9qN^)o+Z5FwE4M`PHHMV20dBZn+q?RYQTZu~0dF+{id@8^B{lMF1rPMAW%& zUc%4r12LpA9V?{JD1S5jrEC%iDPCRFUU545TLBVv`KepsC$$6vUymf7qBi%mM$nCy z7#o(~MeX;O+^X`d(4-uLlCB~FLnSAWEdx^xGpy3FBZ$5pqjNCfgsuc+5zPoCjcs2>e`6xrV zs;NU!Xorth2bY2LqqHgY`I>62Bz@6=f~XF*GA8zmkC5X53~#%i1Gk3Is>|JQo&TGR z@IWg0$zn@+Pt$qXbQPQ<87hIUWeM`W{ z*r|T|^Ls>SYDkp|P3r>`RGt;$`Dj4Mr{0I7a5{52;W|*UO&+@Cwsfs0w`553WECP8} zE^q&2iQgv_Y+1lI)gUapSq;pYO0K4w4)cVW9Pk(cHfIwsc?tZ8(yOrB3L3<8j*Y?S zItP}J0Kh+h!lG80h3?S8S(?G>Kw6gCZRFJcwc)R-#%MJF4RE#d@Tz}&DsII3CKa;# zI~CGa-W>yO??pc_4%N=jpc(uoMjpED4%{B^&*I%^faM4(XbFH=ZTcS!xiEQC-bt(m z$VD|e0#uuA5aY{-jNUszxJ6X%_Y&_My7)x80PdD#FKai9y0BH~K@RBnUgLN;nF8nU zvVv1<)32di1H?CJp1`3RIR84U9O8Cw94kDn)Jph z)4~>_<~_*#rR@7Sz^pifC}(8E;dRdMu<{#KKEO7-Y65-LVI5--k`8S^Y{*@PI3@LC z*>2k2Fwgtl4iuD;5g8$Hu__mO+RZO+f3P-;&tW2t?|EmlMgO~(2LjMqrOkXDAhrAW zYA<^kwaw&oW3c+n@MBcn`sNF+t?s~|Gh>D2%m!<8z@O{@V^9ss;rktA_C>)57cw)? zM}R=iYWSI|WfO+F-B6}N6RTK>A+nJ&>Qho)HhecFTO-YS61NirUbB7AMq41r`f&6N zm(y$#LyVx_Y_4Ps!)wac)2oWtx%q6s^WbMcEBtnsT|}??vncQE7w}xLQHOB|U3Os; z2W5f4<8Xl1@gl~rHkwrx!W)HFpxZf!xV4EXzJC{Vtc3(_XF{UE*i18 z`Oek))LNdi^&%jy>odRfJY|Sdp(aG5uuEzWA8d@UP^{{B(z)x}VRb-0f`r8m|?ybK42HnSDeEXR~3 z5O5!nl+Z|AkG6i7s#_MYEp*3Q!YS)BUsok)KM=fC5Xqb zlibbMXA=bAar6G`i%vR_gizxn0O34~bUnfD;i&-ZAMb+ujQD*N`2mkDRkR9^#&NPg z!G<%AR#ozpD(`FZ8-0r**xD3v~0X4_)IF%Bqg09ibb~8?wCXdf9tr z-+)AQ7l+BsYKb4jqLRtjR2I0m)oYz6fZt6oU)Ks?8&6l@{`+(+7?pa{46yY+uiMCB>ULtDivbbL={QyDr!yYc6Hu+RrO6+Wrzwk zz$Ag+*`cAnT_P(Ec|Tg1>ome)SKJ#$RGrL?JL?#5(V!jxYCuMTgDg4A!vPe|NjG%^ z(yO1Y7mSZvvc5{*7ut`Yz_6j{O6e7cl_7D&v-r?b2qFWJ^S@vBZE5S8=^E%`mj*jqV~9-XV3!m{TUJ0Md;`25}Oi0B&kN2eU(CrAjBk0tG=H~qwFH2p|ID^d83trx`FAr`a2p2{v zg`xt#=GB}6O2xp#2d6y=E;ij!WCpz}$_-x%@p0AiT=-pkzi%2JR(N#szlXB!ag+41 zQ`uf)-)@}LHUU`8GKnC}7n1|CM0^gKmdy|7e=2p;WW)(|&@y1u5rj8IOvyRT-%Bm2 zxHz16=&OmaIa89wk9!MRk`6e`e_k6?L72lk-+vnS53ug_+f$)=7PZPLwH{%%h zWCNg3c%L6&MN@`TygsMMmzxVS#?OEZLkCKKG+-?4jbCjw1PA&Y^smQVu@4CSJ;$71)dQUY)(7Up(><=B#g0nFQ50A0#ZxnB5gjq!4xvF7kw-UjRI zJ%C)1zN|;M`4g#i?(&<`o^S6sNYQ8VLSFbJlEA{b z#)4+Uc=JoFAB_g##|HcbmK4?c*_F6}V(oX{kD3?OBkn{$Ykevmm76olMn#j9czM+ZZd~Ll(kCUc}oBv3qM*Slkf2|?{Y2X(&Oi8D8S-7A~m(3A3AIk&z#c} z&fG_wo_k9^^L`o!GNqMY@~d|YSe>(H$`=jTX!PyTCv0A)`l4H)!02&`LS;eZ5)d*k za`B^{$Q0P9N6=2{*A0g^rIBk-VB2hwmG~u<#mZcawXfT9*k#A@a!j5Nf_TyZ*xBKf zCRe{52JkhGi0@ZqmPzKEbLb;~6%Sva0yy?tkZk?hIHvIXrGWp$%HbX9VjJQ>p z>9rIIXaP~f8J|D_OdmhUavenfqIU<6#RSqnbNbCl1ciICp|W}52&ht|M-TjghMR;d zX}s+oxN$gVVt7IC$gjv)o)^L?#}i-g%R`Be^&!Rt0Tmwz4ixl#OPOy2lNJsg4*a<8 zpW(Q{69+>+b0g8P2ze9a;1PH=B6tPmKue5o5V)Wkhfjft#A~nvobT*F?mL@!t?#dW=mv$lq|;vJpxI{x`}`8yCJ9Y8JXo)=?fe(b(gvz_t) zMZ|!sgur|22y_rMr)F9HG^fX!VWyCm0^g-RU}y5@k3s%h5rGc0VBMp&_v-9{f8A|i zD1^1!kl_=FOKs zXU6Ci#I#K(y?ZL^u|t%Q_{&8zWg40CN`HixykEBoo7>tvZ18sl^5H`!_2HPzw63`_ zegypD${71P)Be8|x4Z6UyANS9{vM%SDdL8NiCAQ*NOKoe#Ci0Iym%KC`hETeE^&pyrv#d!6Foq zq;Zly5Z?821+4wuzPSq_GEd9KlW+3<&Yp&Uf`ORL$2b4l?H zamt@f1gv{z0!#~B_8I4u0J=K$&E50cX-ZN+0*~Q*RF9A_qU%j)fM^4k2jm+5Ddho4 zX>j5u{CKthEZI$xMFy%%mU?Ha_;=Ff*E2y23y?v{DcielsrmbLH@eUj+p;%0g?|pr z{~upqgbrH;B2J(Tz&Sk6JOhF+&fzf7u=8gS&=+>^L0_4U_BKAFL$>(Q6%BasoX$2% zIZa00m;paOUfB^VfQ0s^h>d)&k_@P^Uhd(x{sH*wBh{1)d}^G}hzgIayO>)6zB2>U zb3EgJp4~z$p9gujGv5s0blZSwpr|t+l$IzQ1wd>`1YB|ME&p%wg>r}qZwC$L&HGflf7t8bD}TD0Gqx(lBa!``%lf{X1c}U*A!uD zkLUfNgc>nV`x~xirla@OpE)@n=ZUAd`9M6}kn^ZtGWsEoHhIA^7x*e5h~5q&IC*f6 z+!M%pFWx6+McDUAvkshx9~&uOGMfi%Gs2QH!yW7;{^fN?v!8t1Lpp{V-@d90yBt!? z*{QGtt%Wg=-~gmtN5{6T`8l}0)wII9J1KfPz zs%s~1jcB`06~9(8td30ipAE-k1kb|=*TrVQW`Se`W`0D=(ez!^#5o93oWa5t8FZ@` z8!2!}B(k{T#BvYlKQ(yrkjIAlF_~xp4xfX~2^&~ad0LhJR>f>0_s;L7sY zszqlMP-8E*eImn{UKyUMv>OZ#Z@)(=T?TLu-YEDg9IKz4m*ed)v6futn~=0N047eS zuBylH0WF8wWYlLU2@4p&at@RS;qL(fAIaT&?$wER6YwE?u>#@-tGbYFz}<+RNG`6F zLh36O9u*GQYZ5pdcA;GI6HL!7fSSNoawzSkKSRaJCov)r)M=j1*e?@?*-s|7w2QbN zjv1cZ*8{-|l#^U3@P&%8{vHF^y74Uf$e2eU>EScUIB*KcY3Q{#0LO&UgC{qQdVkGF zQCwZ^k3L&?|Bh^f-CUy~$v1ZMO}@+VBdn$~)G}y9kK59f0@tu5>B^w02ecX%6xAsB z9LhtCANw|585hZJ-A%U-MP@MMS2bd*5!vD?4FB&-yR&{2Tt?DKzo*I%=dlNpS){is z-~LoFpi@mKv6oUT&Bl$DZEjlKW`&CmF#i6ek3pj(n+2CQk%K)dsv9wuf9+dnU`y41#KZa5w$?)}n$>BphX)A*sYwoSc`rzB5T8ht890BM#|Kh>K%Ozq^lEIP{ znU5&)kVN7Edl!(6hK&lUt`1U$A3Z?Q4V41n= zbqaQel)y4;H$WPjpBb@j-fr2Qp5R)79kSa$%WTGn?v!6ex3BwtQXgdaWyh|F4m zWYT|gKm5#1dM#%X8bSu>1N+*%sVp94vChxZq1X3l_`x6#*TN>uo%`OTu ziMBsq(Pm8!M0a2VrWm=a`&jsq@$+VQrXX0D6VnSt>ERK$I=3EoW>d-2lDXve%$LIA zUYv8rj6uC0mgiy z1jSUl=1#js1YabP>3=K@^m;~LX`|^2x0{V9gI`AcgcV#)=EniE zXKTZZ-LztC&uk~&7(Uh~ycY9#VP@;R5Xfo8p{OSIe@2RjWb+CEM?%83bmws@$h~`b zT68*p?s#vp&{^uB&Mk8U0%cdgH;f-!x^S}BD-gXG$F5L2h5RFX(kTDKTak-tKyW~P z)e__IpX~#7Qj$>89!p)O3P+j4Qn+daqqder?&eHw?R?gv6>aH~Z2!`yS^zAj(O=7b zQ3))El80W@Df$^D@ta-|*{)6JRQlV)OJ^ytw!N(j#o975P%qKm( zTkBJmkwL5CN+<)+l>=%t7MuM* z)}^IhL^+A%HrY~(DoF6W15*SzlIwLFOp3a^G;9J93}$G02pHhftASP}pa)=8?}3%2 z615*yT;2L^fS)6|8A&-4PZwSS>O6K!IkXR|{>PYG*kZ0Q!FIKa(s^{tiHt|knMJpC zi{VJ48O)ijl6>uvCuTDZG+LX*1mOtoQuYUB`+Z4QN57|YW$&Ns%UQ}MT`Htg{%}B&;^-AW0 zi+z)e&IM*G@&6p59wtyicKhrK)|4N>KM9337y;cwVZo{&ex}6;;_E&h+anLE}Fr&N4`+E^3LIrR&&O z7^}@Z1*qVfb)o-rL>z>HZL+8$Q9K+7O%r1z2#@v)piV0u#M+P?FOQGWCv0L(+c)~1 z;QVbw>s-Z?_RLCM{cLs}W&+{B}S@!z|3GM3IUSjI9Q0JvE5495Y{MzQQ7N z6FNMAJCMSPA#`=ja5>|ulGV+G*<{nUd85!Xf@;Or%6 z4k}#^2nQlodPNfSAs^|Ocg+V_1O%UF3sL^9FFn&N^Hn&@&$LzKLPT9yM*41B)~PPO+efEg-(gr_Q>=W{&l z3tk)xz-8rn>1CwteDGjQHAo-jgB(^Q_wdS9$Lg0M6ZLm_pxzMEXq;Pps4iRjSr#P| z4-X@b%jh+!#WuvUt_K;$ZnT09_MM4&Yo(Fv zQ1HwjQ|Imhvm9>ajZW{BA$>U#Soc(h#JRshoMn+);q$8fi5|JL5ZxbrQGzUZYrYNofY^7T>)$VF-+$>y>qKWOnn!8h{%(yKPfp7h2@m=Pp>#oSqiTD)w# zb2a)ib;aSsxbs?6$%uvcJPf<)IlExc_^loPhO1D+p^kYB2&e5^)KUZ4(MuQK0{EO1 z(Ssd{25aEpeR8ANah$D#eYF?IZEaKrqMdkNI~Kc``?T|iKm+!pQ7W6j<*}X(%S#+I zIT|B{kh)KzJ+j6S78rzf@pPG3QRh@Hi7Auk=6zd$uP)0|R78sf(}NflqlMa4ndjp? z6-?a0=Xn}mqr0;2;z2(5dmikwr(`j#4aT|UUJq|kgKjklssQp(U#4!G+ykRoL~#q3 zk8T=^)7F`uCe&`Xam%LuG)r8s$y<1Ff#lcyuiu7W9tlv2lck9}iuOdXksY)K;(LcR zBU1TlFXEPpGY))NVGaqV?(G{r*fEA+MwCRSmr1@UDHpFvo5PcNf8o!WN?~Br20${(id_Xl%9ND7Ag(D0u@vyv6p$>-I8G zc(VsJpSb%X?l|R3#}diu!*2YFFlf|Tp8qv^d}MW>ANf$E>U7;U8!uxPAUJ!$OkW`s^RcCWxy+{k;JtcAizQTYqml=a+x%JS|XTHA(&N1!M=+Gqka@&Z%dm~aUa-P(q6 zXa8?>+=ma5)=S5I-Kb$!PH~@7$u|0trobT1m^AI1kiG1EJR}X3_GFhVH;X0p?@ykR zidnu)t)}Jj5+5sgZnTQ$h!v+3q7*B^KJI%T_&4(db&&SmU?5Sit6$v# ztsGLM_w_%#5#j}I%f~K~O6Jcb(c}TF!g}v1Pkf_ZJ)=MM>yA^%Sa)N$+td_hv^IM! zBDnv^Ui=aI?ctc83R!LhB35EgDKSH%a**0Gqs+TBjUz@12~|zjCx74<8a|^o_39XX zjzoZB-z^TY?v$M6NYQ7XmyYKNuP)=-_BE{wj?WQ%D@CRkA&L^1`8|x}EZ9B1iFa@u zV|uaFerf1j|NKdjcQt6bIJeyHM0SO@Y<6?e#Jz2+b;d$>DSS-fS=(O&U$8-Z?-($# zVKHcOwZ)JB5_E@pYISO|FeHAGuNEkj83w}C>V2peX}^Rw2D&v4s1cEb>lM*HUcr9U z_kKA4@jMO*8wt^Q>O+ib>93*}qzM>))WmUFGWnkji<2QJpXdu5mA<-l1&Q)7GnLp0 zMGs=^;OcfK>x+tG2e`MHkaiOzHF%6#wXiTFiOZZLiUgc`bS#Neg&9^M_91p=u0SwG zkd;vaaYzhlK8W6;6d>K!Iwz3#@*6gdNqifP54o3pfjL@>BG15pw6>>vgRKr zSQ1horcBpLf5Fay8L48FgU+IMuiOXOPkxldewPNJC`p2jlf&czI)#Wcn{rwTi-A&X z5ROFdWj9ZN-<5lcfqBJhx(#Y@KYgIeMM*NoK`hIn{-^I%<`-!2ISwX+y~|0I&duSL zFRjzI3-1O9nbn?bA-7E#%@`PNC~JV?Ge{Yv!kBpvqh~eVMW#%=`>CGm?mrhxQLy00 zRP$|;&=H#u)2tdv-Yii?Ci6j~2k8An{&N@+K`ifZ#Mwhifz@vXbraF0Rl&&!c*)9% z8ufl3FRfH>S@mm9;OvCFhM&{Hn7#uo3TP(7f_sHR;DLJ-b&PsiDk-0)0LtCu- zXIgr2AkrHKSC4kvp{*^lUHp2}o3+lL{Mt4;_6yl?`{kZ=lZ}-tqJO>Lf;XZ9smNd~ zvRaaic*45ja(RBjXKH-$gczOnSnagaPP@Wpm3ZF>`(F>0s}qU10E z;{|#J_br}f0oFZkgD0#QF{$gTi@Ye09+mbFR(=l4VMzfwC&mbu4H6-@S|rhiG0p$C zM4pL(mPjGR$T{aAi$IcE-S5}G+l0<#Y|yn`ZhXKn*4pU6pAQZ~Ggd`r^v?}6LGmJ$ z>D=hx5wkAx#4k6YA5Y$e$4)=NFh7df$M#sP*B!U>0TqVFVQodk*ky*7f=X`3%@qM3 zOE@3Y^h_*U8W*`X)87iMMGR~oH2Wx+>ilh+JM*qyZMD($+5J)PnC5=n^ig4d8(OUe z3Z7dk6E2w^)#3G?eLGk(VULJZOJG^U@@Ly>mSBuO2ua8=eT_2RlG}A>#U0g#V2$JR zE&}JieM5S)B6qG?hDE&((^41RrP-EkB0B?rPGQi?P7cqzhrKd zsPd)#5+W)3qPvU^Xf`}{jH_&s4SY0f`$gY-(@N1tcY$UwJ1V$jEPmI!?~&&9V?|L6 z{W6wD@|Shqx+%|lW?J2QZV%ErbEuVUeGW6bT{m6|T%70Y|5N1V>D+L(A5GkP3Z^mB zHaTv27$sF1y;8DnJ#yj$4<|SNQ<`u{cyZ6n?Mnrxdbf7>zFC?$odMVo{m~(){K;_Z z;l4CMjdd4;7qiz#Dz2(T>okJuh=~raIc8j!z9a-(*qqt2&Gmy)wWQm1tAta)e8?wn zH%IEno#OMoX&f7{ztzkq|0Q*{r|7gdU}IGr7?fV3$BnkpCk=a{m}_|1f^iI@4=t{1dT z;`N*@>hvM#c?jE#n0LUQb^WiG>O5ROY&?9RzwpyfP32vj>fu#gv*Iw*?O!K_ zB^jsuliKEn_gvV!vhHy6s->VsZ-R|&%UKMr0sFSVE(NG7w(Q8!&bgb+{vJ8??aD%z z;}W9(PqxQl=CZwt4L5xD&U|}WlI{A0eG(dRZziAG{`%0X_$7H}Z=z1kHb34ke}8j2 zzfu|S=A1c`j!gZc&&sUs_9A*+;37pc#~sIVB?bI{Z5HQ6l#S5#w}WzHSdo!Ry4}$Z zCl($NeW39R>n?7)^JtD$Y1SMDncBJM7>ds~1IOO}0@q<#_VLWp5?AK-4?J4pP&+4e z^%n1XD^pDOiZW%K`LaOuvl)-giSr*Gp9~T_u&}NWbWP3DU#g#8cHBIxzyHss`v3nt z{-g<6T-sl_)ZQ!naeYt5X<6kH78nCs3XS^&R-8B^u$N`ciufmaQ`S|US5J5JpJP!7 zocWu&ZnpO|;O)J@$%Fn?90^>pO0|pUT-g&lokPT}ay8pJg>Q(}z0hP|<;bvfCX;c` zC$ZU|`ajv4a!Y;ncK68z9dImNZ6mwxQ_mVhsUN_eeuh@V$}<5Pi7wH3FYO*5xxD8p zbTS1g%a(XASfmZ~>AIzXf(PDIwf#=pVP$aw7}jYil(Pk(od}jTpaP*y5`3Rvu5qE+bpT3=xOIg4%2`B XzVpdb;=iSwVgLe9S3j3^P6hlSj`W5OnYA5Mm=e~Y&1eE-6C3S{hja9+n3T(`fs1D<2^z_36S4Hv%q%`qNo3Wjvs{=6_Iwu zbn>l<+oL1R@i2w2<_sQRR9D8=E4J6=;edNKxtwTL&8}7YLf8PCIl~wAAO8$hOC9Yh z+kJbD?zq&IC}=zN9m*BOSH!7Tt@5x|=D9^;!J>wZEIOfz6v{vT!87Mpd)yd;C+D}> zsbA-QpzVFK=&`@@G)E`i)Pxn?v?oQ_ayb8FZ`oyIES4@?qXL@Gz868P`d>F8RLSu4 zi_tOhJKEQ-b+zwJ6F)oLsF{1mCO{#djMeyP8ZnqV$j(Z8A#mF_3qhDgwU{2rK=j`a zLTIj%anJDalma3i9hJLCQ_`>zVr=LCyt(7?9&1y|wD*~{yI0MtwYULW0Z5r7jWCXm zTk`|T*lQ9%Lv9diKv{0;}dHfQ{#pcXvwbt^Tww zhA9JCLV-WV&DF^o7sPFf>y2e*y=lBq?A!7C$u}D#J=~PJKAXVGpN;%$mzY)T{RsW( zPIswgT`fqqOG!`?NY*s;UOiuG?cl#d;6?1d=Xy6{2wI*n6*HL%dU6sl1GY>^z zmX<~Ijeoyr3`?I=HT~){<&MVN{&YvXJr}hlx?{NKB@hMJh=ETkU8JjQL*7|Dx_XqW zTQ~`($=#$L)K+;Ky3?F+Xj)qHzoLQgx}R=gNE;a&OXCCfR#dkH^ar-9Xi8+R1z(3d zroe4Q{Syz~RhJ?Jp)&*f$)Qyi!W^#ff8WGBOA2lBNfL|gtklf-VeGZ&z@K3EqE)g%0UXTrX-nKdHN*(ANT3_z~WHaD5qb-$ngUA2cx^A z8`A>*tHH8JiR+D4Gj0v=%PFgU=tb#ie3+Z*-JcX}gHOwnpOO9Vt-eYLIJ7vZNu!2_ z*P0D7)67eMX6V9yb#|~uf)4KW!uYe{^96nE9l6dDmMIg#sXQKz)>$u&e}{P~>TR*C z9>ND$A4?dcShik_uG?!p{22P7A8jgDT|2md25m;G%=GC~`YBgs8m%W>&W6IQiZ>9X z*_H#0|NBq@QXSPLwrIVCl3H)`DYjyQ0|;%~8_}k&H|oJ_4ZopcJkIT2?|mO$(kKd@ ztNS(&)o3Z*`gaJZJ-UW{0zfk>DB;5%&aG+{H{*YqPY#?fp%|> zYcu)uzt7yK{Kg=dBjT!iI7PygB#!u$8zc9V{5rHX`(eg%cQOe>l6QEMN??F%u9+~g zarFQE?DBM}H+_Wij*0gQ%WX_OMx)U&{`L<7vOk!6~yv9P2 zP;=~B3Wv6~#d`X??C-EBZ?%7KbQ2nFN{h#W`jn%LvSsGz03?Njyc6yi19qA3R^j#nIu>r0;2;Z~iO$eiHPv`oXc$+Fj6o z1i@6Vc&FJ@m?x;xtMT6%ETb4T`vX7vXgOZ!6*Hvl?g3$Ig>L`%w1R)%PX*$q8^W+) zI>LUlaYs1b+mR;wf7a(16~;|LLwD%CPCaAA%Xz5Qq|W$!L=Ed=x4b{ z?xAjtXLsF+VteBG@8n}H=$EIO8|5=z;LcX)g>reZUG(X&caTplg8>y|CeB<-{r8nC zcqp0jt3TEvuDM5y5zZJyN@fi$Wgp~gvl&8c3R2GgobwGjDPx}Ua$IZi;f@A|&AUad zd`Brn=1;&gM!Z}52aNbcgd#&Q)DgQc#(KvPQV7X>{s)c`5f(QTzD`gN@V&}BH_MR1 z=Y}w0|0&Ua53Y|IXuR!Ic^JBFpmtMFK{>ksJZ%Mbb;Ca~Hz+O7uao+Ind5~&`LmvX zy^dc6HmUD8>&oT7GTQUI;5puPzM%V8HXCCF@AxI->|cdaEdb;=R?g_qettLj@}n* z2Jr%K4L!#!a=rGFr#;ViTIDO3hIPFTeomhbR~A;yy_+~a7II!6ojzX@jIpq@9AvxN z3HM2HnR4T5ICmIqp7;zNUrjf|quH|jKjp&@6+48CZ|QumH`nMI29E1mL8T3BG0uDe zM5xQCQP6V@J^t~fqiLV3!kSH5d6$isKC;9updx>=LAhr4%0N=*&#JtE2v>l2)2nu3 zK{ry_zbQB&Ww1Hd{2tzcw<39gP=*`t<6NzqNp=>(&NgevPym?U@;aIn9B$a_5e0}| z32F@4t99FBR7{FdFD-5%x9kg9Pilz+kH5QCSX20|Ac)$1g-K#37(*}?w!76UelRDh z>P*IKb@p`_@w3~u7Fw#M;5SCH-Ftt-z@%5@SE#?#_a$^cgqzvcpDY<%osKv%osF7= z>$xMc!B-e94m133X*+iFtNP`pxvy4?+pJC1ot3mwC##oADb*u#k~K#?w(0=KqDc0> z+)H0BP@N;z(#x#Y(FA(~Z$iA$ZLH#oXG-l>1nCY2W|=fBpe3p4D`Om3~`cD$@* znsU!lKB8vYsvU3nlCQp05BQwl7%?|wUbg)5ix<029Q;C_!QiArqXO`|PaH>64L(;BNyJ{B zGhc&0PLD$SqniCStW>QzM9Kq*R5E5jbiX#ZlbriI>hE!Jdme8SC<)Exm-STdv{1mB z1)Wz0b8!(d;RYA08f4@bod%atXWq(UJ3p)|;DKj;T(#Q|Z1yLO-*em&+iqM(c~Sw` z7m?*H(e+{?4c*AdUa;h>h8}&7LWk8RC2i9s)o2(Tey|g304B zN?Az`OR%a!54iGTqi`k9xh)UJEQ_+jB}4?fe|~zJW!jZ+KXb|?T%5T{#%7;^l^`%{ zjJS><7m?bt@m;(TkcR?PS#RfJnlfmMI2{ou5l+n5Zl=9ov_P3`g;?RT~+3cz2qMcfVXWV~>g=7PI|P3%SJdTe|R z@iAqfOHAZV@+E(MI}M@SL&UjEcOuNn&T(D?Et)vJP50PyS#-J``O|e;yoWACJsUfk zF!CodCpq$cQNMD49JjHy2LF|?rKqs*TzvMkXgD;B?}+C8q_D01W(R%1Rk>??KQYyL zEcon=8xEJt^=Q9D5jHX&4Rvt@H zf=!Yrsxd406+vHFq$D>orQZ+0QayLuO=yl4C{hxJ@0tss|O zW)e-CO@TM(mu4j|cfu9&o2{!Sa1?IR>zjru@wcMVrIfLi^~!d{iOs#GbDn%PvYs>m zr5<|ZVvjf_E`Y7YmfVOFUk$E1JzRkeiag{Z-D?ylXq92`5t)e~^5Bnd(s2^H!ImNQ z6AP4+%_z9xpMFFnBY7hbnsATnr5XD@MEtmY;u$N((>-4U)25fF zjn*l3Fhoc4WVLI1lum0y%)5<>&F!?wYQ%u6N@_qPWMsJSLFac)`%aEe*Skc z_ai4U^k#9lnWxWHN`xe;#;N*Qi8pI`d+x5;_NK*-m5mf<4;s|%U9Ok6ASq2FWWC{ciC4*Z zj7A#a*(1CR1T8*$38z_!!%-8(bPAX2dzoF}5aKbo*>DdU*srZ4vno=;NDd0_m{^n7 z;I2e5+q%hFkht^nOMa;w!aYz~IZX`aiI(?aTzp#ARH(W`)6=elD&utnuE5m`WAsbGB*W2Q5{ z&LM#9ED}*fonCvdy>+d%zsz~~)VJ)Zf!ur$I5FJxa^PWgiZ^1G1EFO~X?~9$NX&=uy{&>5z!o%i=(hwf|dC2`gpiShN zZ%HdC5@!?35|!Vv*}9Sr`X8y3f6yq>pQt~Zr@3-HKi-MgbJp_jMJOslkGu}yOkN@A zr*A+Bd}3g4<0VXUwVx{~zS~BZes#WlH05C%Xy)j@15#{v{?Pi_fIL?ywYaBAFsEd(?%h38FFZ0=g$qLHZmW^BO_9IsV$y~~MxkG85b zF!E=fRN@U}jX%QKGn^$w7dQI;rr~^%ODuu~mHU3G*=@&Up5B+M!vz$RJ!pmlyrJ|Q z@osO`@?DOo&v35H* z$hSLF9$O3-Evb!pkjVCr?n!arLGHG@|yAK$^*(zGwfV2M1!KEg# zx%r531?TJ^y-;!wnJ;;$Cy{pBt?%|lIUY~!J*wsq<)yEer)x5&&|!0dSmEqF{t?}# zbDfC@&*Rykpp%UI{+bCuM(v)dDmSW}bViEEn>AY!sNBhB+fNtm~RfsU*>a+>ZiWyq)%BEd#1w3OxRk#s4ZC8FhdgY%o~X{Yn$R zRhR%krASsCMoE8{uwP~75PZEdKL6lXsQi8qLS#Am)M;e$pA_)dXJhh!&gqv9fBAjk z-|1V08G!r`oI#=gl6TCxz}G$6wTpg7z^{P(03I@+n)3hl!#fo>rU*N-y8a00)F;X> z{`p)nS-|@H8!Y)ac8lu3R%(y+?0EgmpNb@GlOljI^=HW_C*8|)QfE3Z#MAK2okoY-CD@^Raq`L-D2vsHIA<-S(nAZOaSzcymqmvJA? zZ*hW5y01p`D(AyQk;l&h%HEYKDoBD@?oFSrw4F{9_gIoUeTstKahn?wpY?+5ca&tT zpzcTFho-qLB}OZWSfqO$3WF5x1Ne>P!I0`=xyOi}i#UL04h(elocgswmGxcWX5i{* zWeF|QS>2Kgzz7%GA}to1a3#BtIhf4y?J2VGc^qvj&M{!ObZ8iO#qP_i+p=Fc(C*{r zij>`WVIiTEDsm7&qTg1i+&R=fJ0R1u28gFJO{Z=K{&zS30Li_?UOZpG1nzpKil(e7w zG3pLrTFZl4)jLT)imm}x^U_(>hD;Dp{+%74t0NzPtu7`QzaIin7pDWCk;&wjR9FxY zKc4ZQZw*&w{d(Wj*ceGEMOT87Vp)XuWK1=ghN{-9;a|eKR<`2NDqJ<^@KDB-? z@iRpCDW;EGh;^*)<4n0sdj)5}hmomzV%@#%ZV;tY-+lN&D2L!}Uu1pmP7yA1l6ibP z7t(co)e6PNE_*O4Sr02z@}yn4ZMGyqIsV}Q%VMOkR}O*x5PMt<({p2zgr6yVXR9k~G{2A+{q zOA=nE=i5P&>mUo{8`w7!A<(8==R?zdF5OmNv>l0V)$W0)i%f9e@0ZE-GBHYhH5`oY z%p|Z}(IT@ehLWIT*LiM{@l8&<+5sF(N&Lw+GjK&gW_JCjjOa;um=r{4MmR z(&hN{rTUnXO}eRzv6-`i17(1VQkl=yCBj7e7_bnpl@CEV;fm~!4BQJLRBijh2H=Nn z)t_-TrC~Kay<;=ZSh-c)bPJ}J=5?sWi771U?(e8`0rqwgXm_1YOGEzbtvSjA#@jLV zTAOHLfesC8F)XSMp{9y9FC18s&B9o?=$h;XAg%85^Bl z$Fb}bba$7$2o)r1O>yX80hL+Znd>wzvFBZlbGx6BK+V%PgDIK|=Kvn0l6I**Lo;P{1Imf&?8JAV3ds3QbR4(cEtQdlCMdCUn2}t+ z0HDdo z?`Vir?y&WhN*ck%_5SF%gv@UtdKoU99+8G*%AIL+T3o;nOFc9`WjjsDvj*T%o=p!xqBtPL>ad!+{Z7gmcBpSENwF06Y3IET zz8EYfHulTetN}65r-L{3i$Yo#>TKM}C)XIx`FCZ?6dh^L(PjugzzJa`(kKaJsRIjL zINUwM={h;uBClW{jsWIIp2zEP{q5~?riF7oMvRfPCp(M!7g zU%SO|r53XD&51bYHVKQnF;@o&;}uQx)7cKvB)@j4fY_(%l_tM_{m@QGdc9Fd#^43X$WPQdQ{dEe>5h>{CE4E?)XEv-rLtqE30P% zDH2rPZR@(ry?Cl_dX3a8IlnzjnRAk@G7zhBrTimT(k9gAf&tO|zD6IhyntaSP!gCn z{weNmeZ$%0*4u6%i1Hp`$XKTk7NuXTo1qzQ!l)!Xk9S&Wt^m&Xq3&Ls7esA%>ptzG zCstgDLRd_KV%j-#M5aYy>dww8v)kNnr36L6 z$(Z9*kx|t|%^6CQPj1@1$J^yyC3AK|(dv({1SHYyUc=8msiFV?oIwddps-xrA8hzp z%2#(k{puuLfvlOn{a*ak2vQbYcAN4zlu!3DqJ_zpyRJoh0|nb|kliS1T-WiM z7yLbWDTb~T(beum*>gOUF2W^F|FcFEy<$~KU|EJ$O*7I;$oYxgfI(XoAH?U z-D!z436q@fg`a}(OX>=_Td_m?)igcv$MC@Y9)z8RU&}`~Sk*y%P5epd%JP`y$+z3(Ucnd02y4w2Fgrw_T%mlfHjX6PwfdEi9M!SiR zzhS;wI)p%o4?9UV)M1Z3*Ku5^M-OT*mN zt$D;|)h|lk={T#3T0jK%dEHLeXY#>~KH>J1c7wCAk(HT60c{%$(`QiX@E?i|{Wi3;Sno8S_;qqMq$n8%;t{AO zh6#BX??`1>K}g0*>i4k3#AJu|><}}?6^B8tquYDe(C&+maCOff$NG(x z;=VR!7etZx%26rR;DwN~8EaWId56$7l4Q-0N(4L0`++^@&(8Wmn%ognwEzq$OI|o7 zQB3AqJYX4)I9)mUxD^R2s`81gZS^XHVI{7d(-%AyqVUZck1K9H!d8++q$c2rSWnnR>tr=>7 z$G)5+|5ImJ(W_7nfP#>P;CUM#CWlYO5~CF}c+&S%*3`s&2f%cYmi=AZs{yZ}QZ>uw zoiOi+Fbq7-A#Km8%8ETtdBn@5`ilc^o5d?*R+ z+2-S;);J*9A$vnNFNsU$|Q&F zwao;JVx^-q7p?ewB7!!IJALv8Z&~CbDtF~e$&-a>nDI{Jo$kA(4Y%)UcEw^d_a%T- z!$UUmr!o1QQEG$}9<0`qVPK3eo)}V`?H?JFAWncGDFa#Jk)A*~o4&f3#<_q(>{we| zO*+c>C*OBIv2f?tl3j#<7V%Dm<*a<~c2oRJ#*rr4!Lh$P+}&~ zSl+s}ao6Qrd@o+VTLn!zaJm}6RnW#r;pv5=vJ*I2+@)&UdBvpZ8EsnR z593W{j2+%o{LTqt55QAYqSB_GXu)*M;E!C)E4Cte+7WaQV;p7j)?3>$6|5D>{hvhO)TlRB(Nvl|GvJ{O+VGbJ>+w)&X^eNV0 z&i2{l>`QVW5|@3cta;0bBnj+kB< zVG!Xx7RI<}aT~a5->4V!6YyBJ8%ptbY_r)j%T92&IQS$KD}`{WE|?|5{6)u?A>t$Y z!S|i+?w^H=5?m8yQ26MENb0xIPrsOaydzA91+jZU?iydv| zA+C6gPQ2R$C!gPKC>iffmOY23*EnW5Ee{tjjjD|jUyAB*tYzUeeU!h(T~}4RVw9tK zDDC4>eXm4<5#A9uE8IkHR$VXbvT3(82Cb|H%IYG}pF1l{KmLK`x_$|#u7LAp3r4B$ zn$uLjZhy0&(6WLrLpLuyoSDU&ibeIEM9=A|ll;I3xsNXhE?Q!00h|QpRd|6;r7Jnd zWSRvR@smK7%Sa-Vv|MH>K?{VVOW9dzSC!>oEpS|)f`bl;_lAiB3)JCXr+)#Tp?R8Wl^*P+IHxb`Fkxi5; zQm8xZoLGv>rPft_yI+PzQQNeOuYuf9{w88y^`f66gefbpebqu-5G&dnMhT<2%^X3E zh`|=Dib!4i@(r~Ra4-iDyNk?Pf5bNCa)=-I?y?^ybpkp0d^950YrUk^n8ET{5IA2C z$YVOC%q8%zTuY=hUc8Wwll6k(JboPdu$X`8tMOfZoIz_7F6g1N7B&B)uL?=8K>NJk zt&=flgm!pC6THXAuX!)Yv z#O~7>ojJ|X;9ZX^?m%mU89PPn9@Es1@o*=2cRs0r@gnH%Cw*u@It%FPcR3=HO-`z- z0PpIPky{Um5|fK>;we*mm)G@1VT8FZ2T}4cucv|wPYWh5JQ=M(&3L+G)17S)pAK<- zdwaez-aB<;IJBZ4Q$G4xtuhB}AxhrW8=pKICK%h!$-OIFk3Sd%n%MXY6aA`2`J~D{ zPJKH=pUTr(`tH~LRM*MoXHW6DJgId|ws&Ue6vM!BOG|t-?^et`+0#nts8Dz&UMXKj zllK|UORSRd8U6T5VyyS7vPHBKr?^X$%jU?C9cSyj7z!y|{bDu$>wITmplg%(TH<|I z{hR_4utVIinu;IqHM^150@J2{j4;0zOywznz0$%3e|Y<^wD$=V;7on8@$BCf_?LwG z|Le=m%cOvTd|Wq(h?DWk_GE++orXN8?*htul&!G zl-D$Rbn0(-lj8QJK%$FsPBgk3yDeaPzcnJ}PreT`Znzs+#i3qTNEL}aXOsSbRz<5D z|A4=}_7~QA%v5l!x-DC9CDxSm9X=EiMW0=sxFC7g88$y&_6GHA8a*x9k;-j z9`rVi$N98Z6f>)K8qSeA=HtJmMig{8a8WknUoFHWl475FH#+%0KM9=xv>(=Ak5Zz? zVU5;kp8H(a&zdu!(*b(V-#=slBv@fQNmiBXC>|s??8%a>-i&;br560tmyjj|ci8zn z`Y*q#-#bv3*pyxd{C?J7H~hbKxl@sAs5*G7SIpb%WxYs$1hUcRi*jvsdtV&-ClvfX zgDB8whL%QRt4YlukqAi14IpiO{ZuIIxFiOYN|+uor|vPJpw%v0Qx+FU(R?}0WAhDx z((zEPM67!C@74}71phQt{0{M5fk6W4mZ;gRUPDU1HZ>dSmqwuOy7fzw#Ks|ARLIGd za_|03Y4)RaIA4K1Fd+QiN54#uzOf#zPL`A?mYwCMvd`%t zP=Vr3WkSghy7+p_SESeq$_I=(_0QJJaQ!pkf{U}C%y#CQ*+;KU&^`y|i{Am_R17k% z|2Odz)Ktd4FB(N#K38W=LAXr$X~4M#I@6ZYs-$vtz*y2PFm4sfKisxygKMYW^p7Ps z2Ab1*H$AIZ@M3*gGT{WuVv##t6L1eWH2&)xDbU6RJvIOffqB(o3SrKH&cScF1{Hkg z4cDhuQK%cteMJV6OLj{Tq}8p;eqP(@W4yk*#lT0|FNM`Fak6_hMNL|8B;0ZBhJXCy zXa8eS*%~Js6kZdxnp-e!iyuuih3Qz8NRJfKoDJ?=o^ACe@xNEJ_pnpjtof6kd{Lzd zjz=p;Gx>WC!Cp6`w}g;AObrRx1RZJR&CqZtHFP=E#gxl<8?==oCZQcMEIW~xv+M5h zzY_=8Ugj9Eek$=zEzEtJsNoW)%&o`3V^;$VbES4Ci}9^!J&TmC(TW1X$k3ZS0^sYK zs!_JyGYGY)vz0aiw6y;mW@+SM-gq}kjXw6&mvb7df6%oEZ(v2^a_HOy9S`a~?N~Q8 zYX2YNjr;o&NY_w2p)a!MP(JVn{exuq4p=}q$B0VAvCFd>K`%pg<6+P(Dlyk>R$wI= zx2XXd)R!XtV#E81GSKV$OUbrMv!Knwu)zzOZkmi(NZXM`-9LT&|7lv9%b--7WsN%n z^Hg{fvd011bsv?Ffu7HC)d*ghGr#~CBFj5L2z+zs3OP8Q56?XSy2tNeWByM=GlL2p zm?p7b8kmIggT)ZCyYnzf%kAfLjpn`;hg&q)(gq*(IbGEQo7=i8z<|3F?)xk28{Zby z%>Ojez`KedYZFfowX~lSF*ur{b9oI&9p=!Y4%xZV&@@5^N>#18qF^L1vVE2ZIzvr2 z1yz8fuQFuU{>DzRQPblP(thBC3?^Wb09&M}v8ethK*9Z`!Tnj*snz^$5xK7B<O1+Iop>LswukxoHs6p;(&i(D_CuP<#(UZyK5trR=>MO*pgD0K|U28xu-h=Br4t z8hRStnXV<`LI~7?KkL!wjXF7A^wLsY%8&MXgf{5->*6DT#!i|Q<5(~TB;+dbgb~mz z?dZ}(w$lrxPLF{p7z_X(*8r=dZmppm z!q0NlGK}cUk2yo}7S zb#c^a40Z^0L;28KqnhpdPIvifFC@N^ZG@yS>#AhrpsnmOq+V{=`sh^I-6c?`0*x(j zD!fh1o-A)8Q$1ggkjdrw2@nwu!HM?)@E>YR#5uVGyqWdD!=Tk$yqX}()C6E>4#uq&&lA|@LFHKl*Oi^c-{U^%Vz(eysX6IW$qjMxCDVR;SKT7DaG$X z$IqnvfbgtD$jPiCii(u^fr|kTSDf~>_nOZ17+8m7i8`R;?#HMq2?M!&%Iiok2SzK2 z^dyIFH~?y==g`jZ$nw+`A+E&tK(!w9NMBeibtG{ceQ#$*9;CF%^i_?R@Fc7t?@ z^0@aKIC~Yw01Y!41pe&c(k}%SV^~Zn5!lmi%c(#;yGPZja5GhXiP)7I|5`CDt13|D z{x~ePX63I@rZHNnDk^?cwIRH^did=g#c7NbQO+7ZCUt=|fz&UKHD{pz{`sk|p?ulA z7JV(3b~*EumS(Xbih;db?o|s!Hbc1jI#1zkGBDeMooT z`spUe*S1MWO4zfpO5N%rOQ5`0qjlgk-tsFf?0jkYyB7Fq6EJsY!^VAeyuMr9d*!U_ zgcFq0V?|>B1$Q3$?#+~D zQ{4|48@|$KG9}btWwHGVpZCjA|9f#@68H*#T_-jVq%2&-~O&RbL@;uLh^4fuqji_w^iUjlv49Lc8iZjb-5&erO2EhnGmggE9GPssJKj^{)^t8 ze)tEC9574GER+wHy%iC<2o%EAH1@-x43}Gt5g3~P3Wgq5tiU^&8K8v!@w^X3OHDW? z57?SbzD_o6G*)7_!C1m}QkP#v%y|@IJJo~QyjSGM@e6PO%aY8UYM*)gM;7c(xhdXB zC~T8B>ryL9Fg%dq!vGR?`B>5V>~BH=F4n&D>MHQTn^`5o;2IyY>r|^;#j)C;=c6MV25)Na{!qCk_Qx2I@^k-`Kda{<|9FWCyd$uWDWR)4;DxOo1 zm`k5h)MahB0IvPEBl78q`~gVi%LBG$HStfx=sLDdcCNu#0^tt7W8$_RE{Mx>lw1l{U2?PLJrjf-U6dSlcmgQNA zp6%Voq#9}&n?MpgDc=UBeF)zjH&8=7DMg*vS#ncKn~8O{(=ttuHoJXBssS>JXV=32 zh@4{3x`S_E_YJ)y@Q94h^yA{7k|>7`6AhRqkE{?VX`GhQzezk(WQ>V6Q*|b2^EI37 zb|8h7aw1#&R>?V|zrgHrp#4@zvVfU(q6fbw`zzGJ+VTlQSq;!g_PD#pK!k z%0q?`iC2mg*X&-(PGGGwub=_D=2s>lQ`A|mlCh}V@dKP~>q8LrnD^O+4xw*w-pA>B zud^s`;8dLWanh9}xfSDKGj1CC6**CoN^~apG)mEaZ@kF+fNiszPK^()Ft|90oT0hL zu|1@!e3MF~9JnH`c4)5bfhA(Ma}vZ|(R{e1_r})|CGqNRj2Wbh8T@*HSt$_QCx<`_ zzq*{h%93#jqH;Dr?JF2P%~SSz3Cc0YWF%<=kkeuci;k1lkC$cn7%QqTf1VarOt+jB zO!}m%kMzxi!TZ*jS1^Kg^Q5eSZecku;!cb`6xIl!?#^}-uA>A}ol90~h=F;0uhKB< znen;u+<|Y5=q`VxagT^xz)fdef{Z>cAhLR3K9gl~`U3ShstQTz0R6rNyMU}pzl_oaH>9FDh& zT)=sZl;t%qx2`U?tWx2#eNQt=j(}_G9GG++OmxOQyu=IyLw#&seb=p(DL zKVT1MncLKTd>_fyRdbaT12nXtvE?Z`NIvpR*8B1dpv*{YZZj04*xPI+i~*VwyarB5 z#qT)htS%Yvf?KZ0lF00IUGUZ!!OAY&9yWLp6?XRP!>@WIw zg(17L+Q0hSOFaMu{$o64W#qP<5?c~qdd$0|YShCNcQVzamM9kH02aT8YUyCaARR~_ zKq`4=`;gF(nd95-2@9xN}WGe8t_xehSY%A%-7~Lj>0eV8C4&ii^|9GHWLFNr@OuuzmCGkfuJW?? z>Reg7otyZvTyFTQQf|wsd}ootDn2*BO|n|KM&fE>#`E0Nfj^cAY@)`SemO$s6o^5? zanuiP;ra(V?trO3BS=JB1e1OAIJx|u*WTxS_6Ad8IkD`0RQKh?PFJ$r@SZx0_a9}x z=aie?HYOO9+ku89W|LDUw|=Tc+IkeWC)@quB!4Gb7Ht?U- zwN818Tc55M-yCo#yWzY%Cy`N2MdkUj*XRr-0M+_8X96;)m)$xhmm(ehCstOKsi` zVMKZTw}A1My4r=Nn_mk0T)zAqQE)6YExQPk-o1){i0A7zVCwCk4xp|dFIpHVN%!1^ z-|^`$0kd}KA^_!`F>t`TL`908a~UEAs>TDguQ!eFd61q_tmN7y$RvdUg_s+3x? z-BPvz-ots2h6w6SvdN!}l$mzV)mN1>)=1@YmWi}_S+b`)k6GYkn(7Z)L6q#v;q8gb zT-r{{Z^AcUWSzOJrodY#&%Y^r_9&{HElD4h@Yo+%6hbQ-;$D7P7Q{9=$qxYYGU}s2 z(?JV7WIetS?TvJ>A&r<%6M~DXzP>TQBD=i@%!H|uWBl_eOPWg|*d9UF&+nC*Udp=C zVmrlwv{|+wUWiIXzn!|}$uz*#nq_+kyv7SGHE0d8(Tvum?TiIBXwy>;Fnd67Ugiq~ zp7e+82ZU?skTN`>0CTEolMJZbcVP&RVEE#thCw2~kN5g`o#n`6;H_oZCwZSw-V^66 zwh%v?Cqqw-qhMPHtV<tfo$(>G1RR@ClP+99&z1&&GS zO&8`^6k*@t;qWu#(zU+~aWC}&LfVTTCCGR2Lk^kBM;NaHiD9xDqHq(KOF5?7tBewo zT@&-6GmU=mhcTRdDO}kG6{Vn+3(39TS<<-v z!=HA9e)Vgxl0KVnA@D^Qgf8QNK_|}}rIg_;J>sQRcdX0Ez&^165|B+_Amg`+XE@3? zi9Ye=F~mmiJ&a>xFa1ia@{HH@xVKY3e|Fe_nh{>j^D~c(2a{hAYwv5({^L2d^+gNS zR>kx<3Er8+MGFp`#))=He(ocMzkI$b847+a#vH0}nbYhv;4NQ0T`OA732(XVv17xg zQ#sZl$JDdPjy-nlz(EIGSz;@cigx_FE@X*#Ze9IvRq(f3pV5L&YN7yH@}3+{W%9}u zd*z?^G4bKzY!FRO@@pM8H()M(zK_LM3w!mm6ik;E5S{Uo?Du_mNbzO4UX~^qw!e{svK)*JE+00c1!Nb6RbF349IAbHz);U9|AGVqrn8TIk;p7xOQ)3I05=1XD0VX#f z1tCcYS+fkj1h6??0r&3@RVnSKOikz}T<*Ea*BfCvp1HkV4f~q;FEaB74lESW3|oT6 zjiMBEK?YL4VW-gs+~|tKp`2P#8zc3H{Au(u0an!}@b~$h;&m{ZNm8y5EMls_pm)v35N3(!~grhbF@OHQ6@|Cgx^lzu@$4e!XJE+?E{H zz3O_UTn}?PhjAgpo(IIJ32&iBh5-7&Ad9MtrA|-umQgZ?#}4`$u(oAL`pKXT#`af> zkYSTXoABJ%_`=4r*M}TGWMF%(vUHmR_=vu;O7$!VFFzU<`UaTd?*6MZ{MNnYgpaF$ z*)7J)2uuPXjgxXWY1i)HddmLAKx!x7!f5=smzI)?nMzu+qBi|w7fwXH-tpPvE=K9S z5C#eGVi1M$Fib9Ri%a*xPxii0M zY(Xy?Z`wFygBZg@#W1{LU{;w&g}JE!sO{5?WmZO$N|f&j0Cy>|C&hfHma`&zw1d`L zy@BDIg1YW>oJH%Em70T@E(7ln_XS1%S9oD1I(jFaKyi6w!$a!;8_>?Jx-H&PQ-YYr zHBl{RT(p*67k2eEJFw+&5?ZG>8uQHEq*)i}5zjgLzJAuR1ug9iEk96?!@Yf(A0Mp) zchFVId9bo4ttgsEoE!G-_J{(UQ92slG~rU4b&9Q!&H3aB;2c#}$kxpNC^-u#-CN{z zA*W7#cISj%S1p&P^t^|W$(c>X*yF~gJP7RN7whUv@0E)7+nk(bqYdrf?&qepSB}QqYTb(ZVRD*6=1(O918=8g zDCRuDp@7N%(A8M=tWIVnG&n<8uB&pwJIGSHJ5Ls#i&B|M?ebL0@AZw*Yr5MvUhEN? ze}Q;ice=mL5%kn8nu%+J4qCVbGR`>M9l>@CkkdDkJTMCrY<7rmjxfs5bao$L?wwfx z62-f;SwMJ$id6S)x2ZVAm7{d)b~|X$``7Pw=q?G&^m-qbDP*~WG2|V+g7fj<8upRw zu7}%H_CR7JlmHXTA~O}0ygE=GAf?fwT#7|K<*HuE95M}zru0}ZfvqH0lokU#WDS1p z!jBo(&3@n#_6NTUB=Qyfo_SwJsNhrrPy0?i;DIx9TnhITdzo++r?m&Rft$Fxj_F5-#D)2f;@gpYs&t}W zcTMZ6T_y&CiDYne#)#JCf!g>C)Z^&*pV7}|=umQ=&I(h$7}IPPZLy zPEaR0kRwQul8Lj4J54aG6pH+yQO_1KvuzyV?`AlXM${7CTXb&)G$llvfW>k;WvPDd zGUoVpbUJ?)PPmyF=^hyEzh1(WV)tOE1@~=;i>}S6;M%kLEo^1gdmO5(jncwN_R?wNOv~~tSBiZEwus?64G6QgdkngpdcYB zDf!*S=ka;p?>)!k@wmJH`@eJN&b>49o8Q>FUVI$5BIa1K{YsB!r%WT-QR-RHjnlHv zA8zdyXOMOt=^MLo%Szqoj3lWz?eH92b$K*nK0FNg(C5g0+3PJ7^GKo9_#H>os9C9A zCz8XPfdMxQ?NCF($))5;<&ZSmB!Lf=eXI}mTFT$?uk;nz7Q6pMlu;bfwD&%3eNgi= zZ4{G2Fny2Cyosu?lT{KCN1bHx&+0q3jE!McW#Te!#SgAx-{K;<1JJ(2_~A{Dz6~+% zUL?hMlaM^nYtMYv?Cu?Lf}|@w3tX8-q|4i{hUv=r@fkq{R|^Op^4$KAaoCSJX8%wP za*(eL0IIz6MAt`8u4Q;ZcI9mpXRFZs$|Q+ps3R{>xRkm6?Ey!%Hb>i6=OBiJgHi2$ z_A=bIIJ}iVAy7ECe(1RKX*XTu@z7FdsPI*Tjc)fbv$_H}q!{>1f%363K#kTWEqQ(; zyz(iJ+2Ymdj>F(<`c=-A@~YsU&Ozq7$QjtcDVv z*Q4cqlMaZmGZc9jnPW+&LII1pTswHj5}kEyXs$plyEf`Jr3fM=@|LMN`AllA^03;8K z&9TDk%0H>d;Rc8YMD9l(VQMm-kfHdV_&D%dO2DtT#N5*3Gm~Js41AqCi`|?lhD3$@V9-)yjUl;zgTl=9 z?Y)k2qaCR@Q7`Y3&VO`_5y(4C?|$U%!Yh^m)cSAk{m-+R)psGbG>3)Ux!m*^>5bUjM((l_1Mbvn@x{}X{e#x*~_fcfu@bR zz-wZ^AD#e*Qr6$UqwqJvp2?2KYwF6ocdss+>ax9H%h#?6R|ZgG^t&EjnjEi>9`?Vf zC#*^adMdoMJx`+EXL&Fg+qYl7X!m&_xqjZ^}UVR)d$! z`WLb@2v!{UDP%gWP&3HEVEXu&&?C({D(1<1#R-vL4cq0D2s{QT+C|_P_FHX6Xp?={ zYCu)@OKj3#g9i_rNZ*ejDqkPL0XyZv+K_H;FT^O9R&b~mkwtt=kM}m^cVT5LouYz} zPVJ6I<%sumqHgZS={wdj=bvKpN-#3K@>})j961G`!g`n8e_|a$Gun#@w<`kAuS?Z;5yyV%g8yF(nJ$7t?U;l-!cle67Aq2}>eio<9D zG39(VC-$rDMmArn|K#_358gF*5?JR#u0 z%%RY^T{*)>j}6UNB-2n8{Qt}A;Lr+G3W#yZ&!_f8 zg#_S-Nk+`+|E2Ka@XK!rg)HZQAP*q?;?V7L`^N+TRqXBm0`Rp`kZ-Gl3>g0lrvYdMeSlW@OxoVbrk;t&Ha0ue8vJXD3Z0R|pi?JD zCtJie@4&uJa@qM?tH3-Q0XatUrfm(=`9FyzW)KEOUpi|!&T4=-B1S|WGXB^2fDski z?+<69?mi{{zkF1He@49h$ah}c9&H9BiJa)*P5-Tc$8+#uX7J8^;=({6oTDdFL;t4T zhzcda6o2l%@$Uv8E^sSCmM;FAz$02W1z*1v;xB||Cj~wupBkz9`{AY%c$*{77I8x~ zR*<1D!^@la4}0PP2P0C3Z@(ofqy&%HHc}dr{wo}6#E5GK{`pwifWpP-p>pxxEFjT3 z4fs$LW2Tc?-4KXkrZFoE;d6r(09s6q5KjGI);kC>pp??RJHGipmIDf2hcbBUK2f1K zVnk!DA$iy&#-6C(8A}WQx%a5V1@VNey!ylV$fP{5n7`XvEedX7OhvaX=a zlT955GJQMEn8RnbN@ak9w0T-U4e{ClI03lHGKE~f0Y;yk&{3)-02mue7yK}B)C3Y> z;~~%!KOu!7kozVhq!FoPS;)QJmU~dK)RwPnTSeZ4^#@&GqZ3>&YByd8a#**iB`yFJ zS5ClLtnP*2PXM+@)UNm+ZvjS(USt$>KEt<&VI{z+TsHJ`N1v@+o2E;?^>LoAfxceu zc*nRE$!K4Pz-%bO+G179AgI_7b*cQXK(>Fb-u1z!CxIjw?H(5kz;7*ix(rg3PW>w5*(g`i!O#|o!>0g+tYVz~%YLT4E}`h{~yQ7?=HBj24gy93P+d;{h2YT%dto&>BUw_v*oi zJ|GOPW87(5)lj!t_6A1>>?s5GVNe$Uh@EOa&ewsEH3&2}d{hD8dt|iN!N@`y^>FAV zR^IJ2lJ_07H3IC~GF6T@#RyPCRDrLiA%LZaNmmM_>JV&nbBZ_MrFURRO~U`d_DrN3 zoL1%*ZLabqHtB{NK%E9;{sv*EK>hyN5Ab0KfDg@p*?=(pxm|9wfFd=hSVcyA1B{9w z?E8QCQyA?{DLIw*%ABrDvskSH3<5-j9pLKl=HG1xhe|=_4$ndUE|MKgsnq=mKmCdb z$Sdo?{X2_|{|Ac(^eHN%YBtx?8R<8?w%w!NCWKb1>lKfNBAziC9j_Mx{L`ntwG_4F!RA6LLl`XrQ|iI*5cRKM)O#SPQ|rxL!Gp6#b`0cW zW9K8{?fu;{1zF3cQO2V&8uvYAom~u`^mJ!6LcpB@sq7>OIqNUY*a$wJ9*gsYJ*WAJUh~z2T8rEl} zcO0Kba8cAD7mx>kZlAvUr4>Imz3`I?*uTXsL{!3WRUZu_gYeBAbUZ?VMdB$+;vrIAjPUjULCmZn5HnMYz)wM(KH#q-27s6W1@%Le z8G)T|Zat`gqQ}TFcq)=_{(SFWi$x^ct`Em{XK@IJyd+(^^$T;1k;l>M)+^2LlO;g+ zq2J6|v95PJ&=HVCcD!(ZC#|#X5<{2Yckb0uxSw-hCq-PBjSyT%jXlS<)j)d>7(a|^ zQU*iWhASZ3;(`i04ySgn&1x6r-GpwSSnqWa@R~dRWZ3g81)V{bw1;lIT>X3wAb@s= z>8)rkRtUU`Q~;qDeKmu^qFxFdEbuy!xs(B90dx@xqN1nuRH`?p+c(I_B6)61kywXI zSFC2>OTOUiZhXIcUezVyNEHGDDt(?L(Bp1JlR%!?Qt4s0Ki*wl|8`}X1m6&4BwnMxMU-KO3K*kU&{ zWzd(XIp=~em$4>h&g^Ip^QX&c@6@%5oPeUG4um-hig18KGMUulIGN*HE}ym@T;2Dv zKpc<|2=`J$@R*47dUUAgLH;1v`z64<;}BD6hD(*@4^ZT}dle9*b`rS8 zz2``YehfE9^Wl;1p(;@Th7;M%S}gHlLwun z=@nc%nXbB$zfXQg{RpbBOu9bl+B_pR zv&A>H@{J$B<^p%x)2UvPzu?!$5Ad|u3igLeRa3RB)EZV_rr$a;yo^b4&aQJY38!d1 z!td0fs=Z?U>AgMbx&OMW)I5^0>mW`q#+t6CjP(R)z<;5|e>MdT!L{i^fkho|wxzw{cVmn95vvDadb^}Os=1L&LUfrG>7x9m|;A1F1 zR{UA+J9r_yJNT@w$Zf!}KmYJYUn9T>z1IUby2k*Z8nt*8Wx?0RU2L*oO&&e%KCszvvv1-wNX9ESh_q^3^$k~{O zUx00t-tL+J6ai{_%KFo}ZqO_JL#r>^W+fI{Bop)u(OY4E#xjbi&=R>Z$a*Ln5c%EG zGI6Xuvzjeyab(XfUjtSzi4ZIdsJH?_Dr!s_8sWJfT;q5fET!pXw&#Rb8G0(;x~&e{IEoW4{92a>yd9&7x%2JYF>C(pL$ zrx@F&&YtA5F7!HtfRrQb8wjjKxwAV&Kx*jPtC%JDEyD0SWe?XUbG-)pcr}*3L-H46 z{ZAEOF(j#NHdolrZF@hy2)3PX?7D7w-YT0-Mw%NbJ@El@Qvjam4!zHvVyFr>MfGn| z?8i~^VB z>DEB)NRsqpw^ zy8&BilK%pyJ#Y*keP2xdE&Dj*IiM_t4H5$~=(RI{4>UWirTr=DY`$lsqV5Yt17imz zn}*6LIaS=C|1BSkH zG4GG(*rc3WW4S}50+QiRhoVS0Hy0c?boG;WeSROO9atsnM!y4wstjB>JfHm*zaa~O z{X$c2TQ$_zglWPK`Ibh$D+wmo{7Cye#5FL{O1|4uzP4lBlo04kFltz};OFuUWk@x! zwuJQoP#aH>?khVFfk=uGj^2Ew4e%&3q&)B{5DXX>eYSieG3-~xl`Q6cHgs= z%(U3Y)>*g6WV`q_3251+9C^K!R@@j!^r`~NTpFBU`gr?Y)$+}*pky#T+h(?n)k=o| z^N(g+6al|?@Fh1G$ldSVsIxM1bl|aVdyOx*7#rFqBBgzDjf#3>4s0|*oRB`2oS0dO zhCx~JAn~;Fc%%IhH_9Y{Pa97*zcc>W3Z$R|q)_8$DUL|nL19=Jsex?4HpEx~cl|*5 zr?K)YVCu|jhjjo`nTlJc+|FFub+e6qD+XxwzQ$;-Ox-c8Pwi}No4RxCh*tFpx zXrs(FG5tK09o%2*L()fzgTz4dUC?MFN&7oENKTh7xcx z8pH=;`;Z7Iz#d^ruTzR&nJ~WO01@l?wvkn(POL6Vz)lCxM9enRv{VPyNRrAMB%tLX zAdmM?G7t@)>yl*U(brdGgyF;e3SF7)XlYn%qt2UGo)_-Xm&FGjM9jp%tc-sGxQbyN z*gbdai>(;m8H1>Ew&8nVn-8j=q#n`YWwzfA{NXFV^3?B%Xx$?J{3ZDS*X3ltr1Vf# zE5gm({kc1RbJMXvRc^a?8-#V6p)X7}qg72I*2nwuNs=ZB{P`b;iq7jke{({J6+nZg zdS4#$-CRmR(BaGx5p+l-*7p8>_ab6?M+ETXgNs1T)j9H49B}(7=(jx>5 zymor<5OP^9o0b1f?1vS+cj=29Pq4Vik8Hn4C*_+lq8zmGi9a^HQ(lsu;#<3Z`tH4U zDP8s~u00Nxb`cm^kuzfe;g1s8w1AP1ympG9@6gQfc#wrGO=Ixb^uv=%MH!zpvz&3H z|FYwwY}2+pbIdI8XHh3dOuarP>yJa+0H*Ht?m+=m4%32{D?$)rSF)1nGz&1BvR>>3 zGV%T__dprIdVe1urjGDqL}j_18ZZm~Q{%jva5G3i81pr@TvyDDk4$yJezemKc@FR@ zo;z90uVbllr)ovge}O0n4aSLmd2~U_dRg$)<@!Ew;39^}yUbF?!yI~?&0HVC{6KhN z>R{qzj@U*vn3M1&R(o|p8cCBrz(6fmP9E+1}Y!G z^lRIY;$`TO`F*DZmKL1)LTjrguua?%sf+JB8pI$A%lL%?RBTxD3snj_u9u+u%z@iH z$_*jAokH+Kg$B&B!N!9JsxFgmRk5Ngl6D));-p|sy1-#-`eo1nsiA2njX}6z4{dB| z2V%t7LMukF=i}uL^^O=#(aY-Cc7ESnG{>ue=4E|oT`PlPqmE*%kchvkK)ZG7Gm^Ts za$R-8IP9fknI(8n;St6?7`+8e1e69!qs$Y_BOKhD_uM?9xa32r!TjX=31b8Hz{keL z?~5A^n_4xc*+ZVw7AivsLZx9`pG@UDQsa<$@Og&5pD0m%ZO!oC8E81kS{7fs7&N0i zZUP9B%dN#$g`MkXS(grU(+g@{#ftdqD7uj)mx@pbL0mAZn=BMLqY7<=0&^u5I@&H= zt1(7D{19Tdg!}w}8&e+fC8#lQYIP^=N>J%(kTK=qnyAC=pw7zXWT%y^jOgikQt-_O z;~Bw_`X5SgWW;0X<4D0XnoC}I-8>=~l~tP*=WqKB+0{kvAzY90(q{5%+Zf1d(+({V* z(-=jyD-0YPFNalykG(^~)P_O*`CUM?iS6m*sWPjdg{ZpciHMoO7#ZM5PNOfqX9$?% z+sA#ilpORotUj48a&2@g#+qFd^b**lpi_Y=$Muois#wG1KjM(5aYhaJkWoiGLWQ{! zj?zua`9qdV;t zZxJ;R;+Z}h`#&Py3JHezPzN`&!>kzFBjg(11TJiSCZ>okVg{3x*`I0nM}l@hDvzbM zp#+7JkPVugjMOYaf4Ao{yzix;I7XC%F|=SAfjkPCkelVBGUOmn~!!WCY zQ8S`yZXQGfnflUvf~Kj5hue+CL9&Z^dK|J{jmG`RB{YsN?PIX?k>j zp42N0+Yzo)I{=F!!Z7T79cX?lRy=R_evAL1e#O(@uRWDWN=(W@8e1eY#!3m!jLgS% z)St{gTVXCYg0AzA#?!~Kf!8x)59^kPKg7u3`IUIkow-Y3dD!I!d#L5Ofwi&LIQW_g4as1Du|st3enk*#jDc;7*-iumEM6zIUv0SYEpd|2NwB4duf4yIZ%81;6* zv>x+J1WEuwDAsCsK4jI%nApI$v2nhG+ zJEdJvS(MzgQ}i~gsrs#@410w;*h6JtwSM~j<}-nKN-dR#$eRAlcTAsj(l->8wJ*F; zhLzCvb{LBP(dJ8G`>C>LARmskl@sd6YAeC$Udz{B zsorg5x-?#1y=_q@g9d3XsRJDYBWfh~*(BzF|@N*~x4RsF1 z2Bj1R*N+qiN^TK#nTQI?k%5Pap}Jf<&DFY2m3eEKs0evEdXO(Ts+-UHdSfrv- zc^Be?Kmd6q2nKkG$7W{0KG{SAiT~LJ9?9*IIBZv*n{6&s1i!O~?mqib9ujISa#blf z)!N{2Svlyneeh?WC8C0=VApXCxfVc?%5JSD?rk_}h){nTC7>|Lp_Vsts@Nn2n+rkBA(cK&fvZ9f(;BAfx32PMWyAlXa?t_%1w+S;XN z=K}kgaix=jwf~9lpWWaDDadeB)Y;L@&u@qq@&~`u2K!4>VOkY}FqjH-s#kNLv)eX8 zo-qD=9P1?RV<&x$ud7_oLzP|UW)gAv6`W>>6GJ@_33&)45lk9o8Z6a48toA_9-0hY z#*N$(??-$^1ZvuUJRs_|y*{6NlGGEJQNEVhm8I%YRGmoX+iQajl^t z?6*{?fg&q6?TnBLJJ=V7JQcDKg7pWmBywHVz^fjIGfKDixE*8vlCR|y*)GRpUKsK+}P#rbm+4?}b4{*R- zpu(7V2VXSWSGPu5|D4Ri7}et~xwm4hHhui|_t8W44o6@2yWncIOTN0BB@o1F+4{J{ zWe;eR1$e(Iz6VN($^AL5#$Q8WhcYKw;y)a2+p(7mZ({GLW(x8bzwkA3c3~%-s9=a= z0t1VchSuJQVP<>0NBP+pLsJx4AX3Ia15Mhs(!|@fd^6-X@?Nko zhuF8alF`5}@W7d2&0a12_kH>3U@NEWajlN)3j$pCLw|ENA>YNxNct#7{;NJ(wV44K z*g2rSxn(5>um6td38g7oBswrE$Eojhmme9w@BLl0-31(O$BOIyh=jxcx zjbh*EWDlxPhhR>Mv)D#=xUZ^Ty-^ib7x|`0F>G2XpfiuWpFi>v%;e}1+`i@R`^5#&uX2M+UY9`A(ZRrLf&KDOVyoKAk3mRK05Q1Jw@Pb!U^4JXj7^XOA zES~4g>KjYKyg)g@TjtJr{+{Jre|A=m;6kM>Rz;aM6KRiZOha*hN2B8^7-f!7 z0;^ZZ4&L1Hw`e1(n~LdSdjRH=QRk@8jntTJH+n_&Fx}3CKAjxZKN)PbJ_&3RowW9g%xuRn&4m-Jip_SL`sg_K*lKXT$0YpblwzK)d{Xd$UzpYY=dJj*yO2vwL z&-qgR;A}^WaiNX)w~}C_eyxrlc17Z^c_;h zc&vWrbzI)VhnVBoK(Sj&61^1R-Kb9K+zp*=l^*RL-HM$>Fj1u8o0DZF42e^XJO5yR zs95mB)zzV4<-tt#v$3CSPpE@>PeabBUfo`3b@xAZYU(RI^w>c{FK}xTsi*)uHVE7s z*Mg#})j_YE_FdFPzm*^Ka>Wif8t$*C7D8C>Y`feD34G7S^wnI0J=3*k_e_c6uCk;A z8#3k!*Z@Ln*m=GLh2pT!Lu%dO9L9FG3SZTguqm1@Q3V{nB5GP57&lg5#_C)|JTBG| z2gRJAz|o;g?)^6;_(E$7{mB&QvIaMi?|WAp_9KtT5-kc8b}yn-q~5wc1P6*??L z_9w6}ovU}7+A+@D5b$DjzY@#z@JVsAzP+ap1T2Dj8&-yEEf)`MA&_qn@%9#Iu>yxDdvA2g2M_S*!|tyn7Y%FDLjKhoKB%f3t| z>V?A$yenZ#gbziE{;mP{C?MiJ0%x-_USQBZ_03eIM@1+cKM zHKx@e19C`5vuU|x{b&!W1-ZYXKI$Q(0abRk_}ESilDy7@Rzq3FE`r7}Z*&OWh@GVsILn@c6dhB(t z`DD+b2N@>ESKGh|16ve$o<=%M46ttcc64?$m%wDN&G8~f>2}75mmlwl?LooHMH<9d z|H?~HW%Vm=NwR6nd$b>LwW-@?$Nou>Jn0h9!7K|oI+nx+tk40(h+L;NHH(cH=o!c7 z^s&^=q!mzr*w(XXupp)f>3Bym1H#2Sp9%C~K45g%Tyx!T7(QtbcXr`oAScGfem?HSMA41ce!8Fwm8 zYl$STO5WpB5T;PS52l0#t1-mngTR^{pZBGUN0)bJrgj2lnvHuo9V57NX<@IKroN!f zVU8TO1_-@0%)%VM&|>xyG;JzZv6a>5Z1;?mz2G2q45@quIwOvj=Gg+i>|TuHg<3~) za&JVVi2?zQREd^h+hb7gDB;_SP3F%6E-LE_HRt?SG1GG^w;EX{V7RFNSaeb=_j1DTZlTi@_keULAzm_aRV* zQH?>b_rq5nl6&naEY{ly#!al}EtvA%$R?58j?(%)-%Ed+?@KbJIDdrt6zq@o3~r7t zVn{P>ad%hf3_mrJ)#G0U%>?QyLf$mVP}fyrVp`mpigvT6fd_t&Tt4f4#_zd6$oXL7 zbTXpko~yDeg$Um2mNDXf*@?GDT@b3T$b|6nLA+X3{Aiq@r(3YeYJlt$F=nC93MfD4 zJX?w+W^*AYZF#IdZIIz^Cwuz<6j44x;-a+bva?fHr&$svZyPY?k=cJ6eAWUglXJwi zuG()&K!wx0BEz55($dLEl>i#F1_$Ao=iM?A9=C@B7u9htUC}~tZ zA_ZUD7)oHwpVHI~C#<~u5dz0@6gF)~;vuekdW)bqx@o(S-|9;$Hb;GM$@nR|9B|w~ zokAR4caF)q{)exej9roL)La|5NFE*#R2J6yBG~&^1gr`*i2?TKYRWiK3Hh_is@V zY^L<6QTbwBTb?%r?L6aMe3MpM@!)^Eqd+&CF!3T^_1AssQEz)em>`R->tY}4!5Ey} z85h1Aoh7^x1{-DmgoI%6nI0cQ6VCoRot}k5uHK73nlb+}YH1|_5~_7g$u`WJo+f(i z0K$Htghg+GW$zSlT=k4&>VMc9&VSadoN(D#@r<;}mmYKJQ2rsZhs@>ZX-2MLz@S4M zhfkzZz}CB-z`B6BH?jQ-uB&KLw_F022j=;2^`_cK&l;_sUkw1n#I#Oy20p z^a46qjZ6Y{q^XS#+gij-$q3~YKS2Aw2{Z%Nk`aUZ52gpm6;f@IkD6+$C4N4UDP3+~ zDO^q-FerX#ET{9{A*3KX@C>kMQJ$M3Vpa%3!PCI$gaAMwV|@olv6AcDG-5STowa7D z@#Dz`HM;ySfdVQ;79z2i0hZ4{N%k;4rKm!c)I#veZAP#5wwf`k_q%>(bezdG4nmaS z-KsQDzJ}aC$?5OD{jJM>L0mE)*?KlnOVO_e`U5|ZVhsf?i3lr- zM>^QGj^98*V=P!=pBizxmGV33FY-_x0#@7SXYUyF;ent6zl!`A6!#X~<5>657Vh>9xti$&*x9F_m}sYnW>fEp2w>7}C=9;pWunu~qsQ*n_MrY0HWeQ~3ZR=oBI+wzZRAgw_{D!F9y%u6>qHgPHt!?{mcpayDSDo=sK!o)% zLChJ=<)Ea7Hwk)#p-dsLU%8*+{qt-GlZ`M`)pSc=$$DP&JZt`ZyDW<`Mq2^$Ia9A( zKP7c->tpk$J4|fy&?L{goM_=ffq8~7EmqR-P3^@ph`-1FOWC?`ZUP#ugSU5{g{zJ# z)F!&>*Uhs_d_j=w3kb=B5*(`N_%VyLK2@g8DoFk6ybX#-o^7J&Z^{q%JGL{Bc=YY| z2!fWepO`wk%>3+cee&bEB*j3izktj`UQyiqj@O5^ISD$y>ro8|Fh)cjud2xzqn&)~ ze(+D9uDv181qlbJ3 zV3v59B@g?ai+er~`+a?pecj1WlvQPo?~2QnJ^p~$CSky`YZVj_*Lb8r%6z!2)L3O% zdjw2(D!W7+Us&NI+5kO568eGVgtojtEx|5G4kJPv_;f&mmTA0s3pd+N!#<7dexED0xsXI;iK$SI!aZVVLW~8~rbOY@!WzfwX2!1t=OXq9Zkg1^ zfk{AxC>fh*eizZIby+~IgE(8b09g_+gDSI&KmWG6vW7S+D%?*&2L(8~5};EDZJ{aN zODm24l9N0e$?+3CGJiXbAx*^hw43=0h3rG}>p2I>xWPJGu-@rj8=3W}tTLuYKPDEl zuUZou(rcalo~{1;e&=40%VJ3U$644 zHpnBXGsA|j_W=nkx_E-F@Vp93ylZrRfN7zeroz5{wGBQGPsRfMQ&mOc51!;B%TPhIZnKGX`%wUa9SJ!YmAr0aYD0*+DsY$F8n?wr{$!9$g-U6*)nN2YpLhC zuKjOne>RZo#~YGkFNb9l+PiwnrX!C3*;M@fs8FLXlh*wJ_OFsMO*vBZ3t$6PRvnP3 zA8d-)$-6{zJ5=DxL_W7X;jAln1YD-m1&S>0(!7l+Vo#?9(e`N?#Z|%pUelo`7TKBN zG;a`pVSRNZ+C8jFm z6o%#!IlujBMbR%&>t*~&Z(G%%NR+vcZ|Lxoe51psnvY#mw#LxBHF_-yRg(%=wN=q% z6;>VY8&WI9wSP+tz0XO6RcoE?w^>w?CVZw~SP2LL4_7Q0gELf`>w~Jy-?>e``@(FU z;fmh6=pl#&+NN~I&Zn7YV2d19#$&u#w=8zd2zzl-QyVx{eJ=P#{Ze4`PP%(M)E;cw z()bD!5FaOpMRYRZN|Xp>b$VGQvHXINHYXJw-%8n!9rs)% zBp;G%&A$nfLeb9|4&MxP%UI+8SjLcP{7yO`B22f>BTo3UUvQE(qVorz5i8dxL=7^a zE}%^c!y!-JtlD|PsxTD*XuCX2I&-7VzjO5LK}gXg+Vsidf^iTNo*ukj>T06&P9yYMmQlXT*$(sAn!ix*~QiTzCsvk zxaIXj?0q#0Y1g1(gn*{|yTD$ft|m;YPm23iu!2h4mXBSVRRIA@-M_e}F*AZS6#l5 zG~)J{iain+;hHNrlp3@kBGQaY)EK#cu1lwVS2#?KU)W&ZB%l35^{3d#YXLs4%ecUz z!hXTq=I#%CUuk7Av3_prTCOWp3FI+1+WE%68j?-&^i?3PAR~MH7~1n>xk3v~KB-N> zrhKUo{hhM~IIMec*}DDAf!(A{M6>tgc{8ST=LEZV+&#y&H+^rq+^+K8UGk-jap%aFPCloqAljjhbj}OH?b?yh zld|~_X+GO|Cv7q4|>SazL3tex*?H?Q|0pZ~iAV4R)L5lpDLaN9N#ZAz|SuaM8wAkfE z{*|x;OVcIsuHZIib`1J5sija(Cby9I%jP>a<3xpKe8PqSV@@Uu*m-xH9IIU|-sONU zMvC*AaM#8>WierD6Yg@_tpV9Gt$UTpGN@!N`^)j_ZOx>;jRUp`eo+v2rilYk57dq< z|9N7_?zL>xon028P2qb__DWJzlxWZ%(S_jW7=_Z8k;UCjeAc^su2M1ln718FzhY7uwLeDa?A!hDCa$i%mrTrY`!LLiq`4N>Mfu-L|l;eXx1GwDl}CJ zPcLeozGFb}$X{?ofbs=*IlSn{v=A+`2>q>JpfhP2@sNWtx;()FUnhU`)6cn4G}1-i zI91$I1eEU;aJRVXxgKU*axBHQ$Otpkyb*9T&>XbU9T$BhxbZkYB1kARP}%F}B!N+Z zHz7Bk{k*{=9!S-G@-&;Zun&D`a7b0pA%7 zRihsUor&&RgC5&HD&|mn<}2k*4LKoUDWvZam!m1IhoHqMy)dS&@)n;Pe%c!mY2I9c zhOW1jKEYLrJR;8D$umP&q@K$T)iY?lF7S!m{^0NdC#33f2^F`FNfx123LVR+2%-_& z2=0K&Sn0Ghs|n6q*Dib!!?YV+M-{kUg|!-{2(J)tRs8=i{!7^uik^I-Zqte`g!kCqHcY-dZwPvgrZ3NM*8B325GhO4JW@Rx+=4S!piwyh(<$Pwbie+^f za>AEN3ycP`IO65Ek`%FeWz2#{JcXFX!WNhhq7RP2wcbi719;+!w>LoWrcfWfLyRJc zxvu)Y0DnJ8_~RcTw`KivKgY-G2RYYTCVp;yxoM^LKr^mkILOYui&z(qvR@fWO2)}t z(I=EZhx(@b3kHvn{O7b+Td}uXUmrXauF@j&=8L7%*?_6(*cNC6C!ot<=4QAaK!jzd zb7x|Op1(oxw#dc(?A7oxsxnRscV+Co)h51U_T_u}LNEmr>%05wktswzZ#Alj;##W} zys@#Ca2#JTT==+Xy3V#^Q=NdYUfyjzA@fecbg@p$f_Sl(!o|HyMscI#iY;LFdU;_S z4p+<6tXI)%*|M#_b-AwYzj9WNHHKc1C$Bvo7r^ugMhZIqy=TbZN@*lTboDdn^27CM z>~-%GwEZ5?8u)rQ(b*He)`=^!K#cIuQEYn>xiYGUeS4I{)t}Fzjvn4T9P&X z%jXLHVIkwu3BXtzDj=nt-^U!6eGgfGsqle~*5PXjZpL(-MjKw%-ytDca@O5#Nu~U3 z216nBxxYu){pwJXlu2e3RL4+m>!&2I-Ki^f=lZ4lNrE)T_}Ppe$d`Zqna;=Rtz}tj z+0%zHPjsBoI1n>Y;q*)q$b}sF3jb4{k0nLhw{F4fk^|PXp#IYzGVaq?^8>RNHF5~; zgz={@dW$JbM32AM#8{di5MX;BXsZqnEPA;5>$3#;>Yic#nagp0|0I@2SDLuYu2q5t zvE#4-!?Wa^KwpaasAH$n?Ao941CD|=fSY=kNYUc!F_g0Vt5@AZ5|lO$WWT?MYg)Kz z=XYQMw^nTInX>|oE*(+dCK9Y=Y$it6O7mUss$s6sQ!$=SrUJ!M`>$Ni_ za>f`hTp_R9&f&*al4KL|;M9t>(AD2ivfL6ZBjkDmkQ|BG;2{^v+Zunf=kjo4RJ_Kw zo+tUCjG~84JgKUWFtwnVa@p%ovF=C2H)#l0UKa}K32}TE?Gke@`Yx!{U5WZ889c@| zWg+4(YycL3Z^IHYQpY?y+^&FG=g7zLgv_N~(~Zp9{OxSuWD|JDPDI}SfVc8-h#WPJ>4K?zd9|ju6$pAwq}%S#X~4Zvq|>3-yMeiphO(=Q#v46-<5P$Frwv zxUehlYE#QMxBGhhDyAN|Gbfp7f>w*dc)eh7S= zyFb?-(5vG^EJjM?+bFmBoR2*`s3e&F`!2vBV=c|Ncxz*hqrrL$)2Ou$tkeQ~Z6f{~ z2g-u_1!9cFFe?vNz;sFdBr#;*pvkA&B!#L|X7n47jUL#51X_1Axo&mr(a)(dE6`RP zR4lX21UG@M8!?7}YE*hez)`o%xXJ7HuhkK&)4gRxGl!|V8TH3MFDM-NhlFL9ZE5mB*E=ZP5g++@fh46 zl{gw!0E^LsyL%u%pkHJ6So;dl(0G2F*W}Ph)gxg400^gnuaf*ro7_>rapuLkeeT0K zkmDhJUJjpr!*8GZ3*-sK0xx`=2C^lu0SR!70O(&f0tnvKhg)mX6r4)L z!^Y39Cx#L<6g4#Bam~+mvcv`@-OT$#WUP($QztSBm!P+05Qy96)NuwZV}pX?zGDad zKN|`l3cwou^7g=7$!y0-aJrbJ6P!}_WZaHE8xVc4JxdD9E1KEELUfcE83374kWy<; zHqKWySOCm5fTRQbnSP^d-Iv-U^y55Pazo-CaO=(;4d`UYEN5Rzo>xhdbD2VC9h*UF8KIcHi0EM8TDBve9BAuay9<;LzgDV5@Yg>sP)V;H z>IQ8Y0_+_n_F#8jAejI@7Jwc!w3o&640~)J+1l-U4yY*ue(+}7IwlT|gC11pplP%y zAOu^dZ?Y@g$(gUU7txadyxHqvM`rMxX9fr?8sY^p!3(OAJmRH~djdgy6m*&6teh$6 zIdf4oQTO_;L-X(i^%VXr;~s+Il)s1N&hgItIUu}a-t(%Re>&Giojy)#a0a*qUimeD zM7c8q&MRI%y^i1=9zPUY98mC9|so7T`suxP>w7C?ra%7 z&2D#c{(xLw*E-cS9)@2U6$d2qsXJEKLaI_xw5j`NPP4Vq0lE&813QNKpblqC3vCr} z5Y`%DcpYoT?x{vUjPKJ&o-@GUJKkH4NAx)n_W>~o1cY;ghuC1&Cxc86VX1*pUWo*N z3Elp;+=z*8h9LdU5K=B|*BQOeamXdumgac(9DRe}H=+san|^#cS)-uKBaQ#Z+gFA~ zxvt^D&>~70G}0yAjnXZkAPpkjh;%9?EgeInfKt-k64IeCv@}R}bKU`$%f0tGf6u?U zVCMVYeEPnh@aGCQ_{tvA&4e)Jn9W7@&t|EEqwDxN1EZk77Vww5SSXb#EBUX+>AKPr zx&zL8%Y16j2Sa%nhOJASN{m6oC=19TD^EOxkG zN^O`h9ab3_y*ugDBA(t9;YjifuJ%*CeeZXTqzg!W_KpXch9ld{>i=9t!Bk_)TSV0t z#dk;^O7*WZPOk?f;Bp^7_bXQ-!;@*O@d#r-4&utWDT%YeG-W5Kr|)hze&OOFx}#8m z!rZQ9Qx_9j3HaM|29k3|BSH%m#Y$r0hMb~uCH6TAR)$FfOnf=pordRR7gY6?T(kK7 zen=`Yn|24z_jRV^g(tUos(N%m1U}$>h;_;(w@gwR(E6ut+g=W&&&NLuu!3^>Mi3EE zC*OXS$ZGiE=Wrv2T)~Z2)>ls-5~&SnlAVsW+oBrZ9+Ak6WHkd077Dk>(ahTp1_s!- zQxIB!LNs~C1h-r9lxK*hZDi$R?l!{Pftcf=ly~eLgD|jKn$Pwt6{RGgeLx_XS$Pa3 zb6*Z;-VWYCTx3pild<*lLw1`6jeJnfCjcABu&p9)0<@$;<=!t#qb~LUS|gH@+()jM zq6#mkWGgZnedJ|YX_oQ=PLk_>rdp>&jSwgLv~RRIas2 z1YDa;Fo*ifJh+c+d-h`sTmP2stjH}y?)whRo`md@XFG8XA)IpaR+3)2fXWr-D^scT zz7-%c==cc|;%b{@ij-R>hsiX9Tc55(T7B*?qoUvfS0-`dac=R*eJp4+X;U@Gugj2> zD~mdtlsP?;V`sR(JpKmNtnbyQ+doO-@?A`;+;%!?v!zrJCsUAFH_@F-BCJ0^k^+W? zar;1|6Rt!-&#!wMu+zUz({@y^tPEN7cY=_qqd5k4|C?&DCGNo=%7Mr5Veav!&Y4=ADD`_j8qPvjt~ zOA4Vsoi+;+2-54`H5DYF+|mv~!0CnIS->79w$i>!#QB0OP3f)tb`7t0wK_KWr)FzY ze5COgwwTGU&NO!27t2y2vg_OUa|DWU$}Z`laakD-8G zI+qOEGW?RfH9rqQ(Pv^Mw;U5@7=d;Zzmcs2o}X~3ig-P4TrpWr<4xe#zfsDsvkV1F@U&)#m_z${4+mF|FvWRb#1$hT~L+L7Bh|NX?6E=2bS57;#dXvqqGj z8_WZ#psEC^_!!hT0luRbO*+iMH}pAw0xJTFnnB>o`;w_*_AP~x*h7QwGUu~tl1lK_ zb!<0oMAdLEMrMY1fo}I{xSQ3#n47)jx=rt%Z-wThhFNyc2{VN>_v+Yv$H+g@%3N!fmqn&Fh`%AoO}Tqz0SUv+tlJ$o-spwGW6uHt6v z2U@Fct+&qf5!J=Ny_XzJAULX@(}YF?7Dn4yWh_Z6kB(Z{Q1yqN*8#ghqm+rsyF*GM zB=(F}VhbDH2^=L>V{~)XXZ-=f(Zgn?;^F(7(+$h2rL=GOTS-?kmCH>zG&6MU9$kVu zugB+-t1HgLIzfZN^ATdK0$+9J_P=VJ0NQKfxgom1y3%Q`XXOuP7Qfn&ka06*Ke0Wl zKxW0WKbz{wjHIxFVN?s5$!+WyBaZhUH0N#oui>9iWLVz>i@D9~0^YNWG`JdqE5u){hAmUHHf|&GS z;;lNcM0W}DfVpV8WzbH8Ejd73_tzS>a}2!J=Fa`(x|nZ)VvByM2cUq$^riX;bCh?Y+e3+@qF?8zMbm!Fkd8uNc6Db{O8)>aK`@qj z0PQejR97S z&&dPPE!LpVjcT0ZaE46k-1sA!$a^NnKQ3X8rfeItdF}Be&8OWJ;*0t7fo;ihko+Ie z3RsZ=u0~mOCAyr$BG-ua(2km8qPQ#|yq%^Idxjejcn~`^?2LSz$USQ;@NS2rPcUk~ z2Nx}+m-t20t5#zq#Ds6Z{Cx|!5al-*4`@xKF!+*RTbn3}7$1-E?%byic}o)RP%f4+ zQIh@K$VMYpbOC*<*ovxIZ1BbI{<-8$TNQ@^8gZR+4+gv%0nq8tq4O;h2UB*91ZIb3ZL--2TXW5W zT~*f`STcEB^dE~Gm?=Flhe=X&-{ioUllEU{*HxyMzOR&?y+aQ54}?(cqKOFZs4bj+`rZFn!#ck%IbUzRp0+qV`UaU_%zHWV2s1#WMDM8i z{teF;lsd#-qsMOVMhsBAf&@4U`ap>|7Jybx=wq%rz-_Ik?+{LP$Uq}cPW*47X|U9@ zdD<_C`1FDG%?YrAr!sKn z2US<7M{`!b;_kwISNwb8l(cfr48J6;TORc=A~a{iGJ`is(52t3$!@=Z;Pj?>hfWRz z8iZ+AgRD)YL9Qr=wb3E%kc&^hgkbi;J*p>s5KFolKTI2~qxUps#5Rt_hRS$_)uv)y zzu`5-Ah)SO7<&~6NTY(}2&+gMwS>Ufg3}%sX2dPOah`lr2`fL9c#BgRzppY#x?bIf zRVq;+C6DmD0RTz>&pLou2PBdWyz1D)N$p`=iABwkE$bCPSZS6Ti+$r4pr?A;Jgd}=J; zF@2|{k%q$Q9s!LJ324(O~*Wl+MVXrTF>?l5fvs#Oj4YTP5f z3!YyM3fx)k81eJnhm%{eI~ zgA~QV%F8+1ady?&517Nkt^%i+9($r3Pw5(ZI7qxrN}k8qcjE?Nz{@INF|&J%O>fbp zmgZgBh@g;kyBCxfW{o=9Kj0#2lpCsZCw3n%^+??3Er0bJ)^e0rl@ip`9cxd^ANcg* z&Dh}UDsE@Tlkr^)N|UIBi7cKqbz4(NV_ga5KNvnB!06r~kjCeIe0*YDv10#5vHX5- zQ4eZ=TfXJvhvtFqy*HT5xAMwwqV_s!y&xE|;D1yx^ZrSR?~TmT7LsrNTF558j8cYU ztTna}LzQS%k!3N?R|jcns!BpJSbeal*9KReJ%tUCSU>SH8m(ZPtbuCl6jwzQic-E* zdYz9D&qdx(Jl{(nV&9StE66)C!DHW^g2mRpXrvB{<7I$V^#nd|4qFJMQ3%~W_gph1 zqij+8)OpVt!I5q`QZUfbdRZm=XUi=;mJk z0YOsUSV4><>O0NX!&xO7`HDt4sFj{;f~b+;XI_pWN@?DSlx5wAEP+wtHM28DwB*bm zvA;+Qm-3TAKja2HebCSU*%QVWvM}*MYof$iFVje+;R(gZMA=p<6CAi}Rx6bj1uCut zS5^CRy;&GfwLCwyD{1MwSI684R3bIuSAKiYHlUM+mDWU{=rs9SefcHnyIP}{ow7e+ z50Ouxlfyq}6wXaB=actL5DS&(bW-l(4jll_!yXb_w4oj7coey=ukfWL@W@;&U&@ejtPYemoCF_eGup z>K&%7hlO`lWNlHKA7Mphgyu(!(qe1{M0W)4nbW(@WiuaCI2FGl1IV4f5`D(VYBsuc z0HeOPg{fBezOGce0Xf1w^<+33+tA7x#nACgEl5+cIla{tgi;fuGg3bn))SI^&9-{D z#>^ZTXI&%InE?{n{0=tbkA=oDG+qXyQkjg4C+JlU)Exz2^0F=qFOb!Q8H^V9Sz`6W z8%JQr5+l5GXU3=Fl5CaKc70_35LyxV{7tHAS1ig$Z))B;)mHY;jmE~Dtitm@Bp)uL zy;w6auCh~zdh^*~4CUOJ-p2!X1}(;k6W%STgeg}>q!H$Ng^j!cg4mee&hV5$Xk%oV z+(xRK9;~_~6N+QnVxyr?A2$0YF(Z!pMt*sj_CN|oKa=M4v8-j=mx*J~vE}qKs|u8G zY=@rgv`D!uOZryL`gqaQT{D=01s8AMajD~oD@Jr20^2d@pc52|zZbIi;bX1XXcCC3 z=O9;eueL(t{)%af;Xe4`jeg0=^=&vy4ig^1`L{ykIvxoA1dwY?=QtBhP8MeKJEj%f z0OVgrGc#VSS?E0{mu80%fflUY52wVce|5UE-}SLKwcKGcvMsrQBMKfO^0|TgAYc}t zItla#5{0JS?;U82X3F&`i1AEu8}4*mWMG&`s6T91oQ$40*&RrX#*H(ZrMGlY7r{ilQM@>Hm8+VHdbyH z4bM(Lpbi~eP`)~de`WfrcT{NF6aIsL5t$3*te43ypp1(=sAFpcWiP4Q zt(7;-!mE*9UaOakefS60*!xhqv=193LbjYkUx$Ljc@{}hrg(K&fV((HCV5jSNhF4S zn&GGZLIucdfZfHr0oGC!hF)7V?{|K*S=TqXFL%1(HS;bYnfJ)M$>VUd#^9I#;l`2I zwK3Xwihf60&tVg0*!xk!!ly@B&(>+RHdlkXd(QRkv=j^zgOd$-#CRm=?lyra~HTr7jX1n0r`#pUJ>C~TC ziu?P>5?UbVQw)|k?rwH6_+dWw=obsA30Red38O;Z6{~{JBK0+7G~UbEqXefn-x_IZ zb8@obKMS3C$r|!uX$b4{8YtYBS-N6`<2xy>}ZVHR*g#D2r_Oo3&Dpg$EC3>d~V1&A44wvZ-l5S zw)ARTp8DD;*1lFxLIA4qa>TUhOhoJV(xxxqwrk>m(v_gvxhwSM)%`c7@}7A)2EeNP z7Zr&QdG+7@>~FMts-j?-v*=DD_ZKw*+%LQO#W&o>^DYFL^EM-+fQLWazIlH|)i1Uk z$O5#vptca0fp36Kc-Plrs5OJ$x89w<11ik+(ji5IE^QubgiIpe^3+HPoig}PwKW0 zxKvKc%=ED8uG74H)U3sqbPqAvCfM*!H>M9GGntuA*0kX5PY=}ww5ZjJ@$eBt#K2k4 zlyh%22GVR2zOR#!W<|)K#J%-Y?eAjTYv6unwsY&6HN=QIBGgN_)YxF@)YI%(PRr4< z^I-R&?Jlg#F{UJgNB#1k%;Fw5II^+;5zXuuX+;HU$R)AxVIf0~y;n1QVhwq($%nEN zEny(cwz&=P{IOkwtn|HN86i#4UEizV5b!DrecZe&QW1b}9jpq}sUDtUDE60hjT}qL zK)HHMzaj)vZQbtJQTU=Nxuv|&a9DO_U{9%G@oTxbJT3c~3p8Da)&T65Ow=&plZebE=G1XZ zQD`CfvMyMw1Kg52>mz2qMgnFY#rNxPetAza4o#}O6Iu( zm_Uj_jym8r@el!`wj^bg3&?=@5aY69sNK3R5p|`quP?bQMG+9~Wm-Q59Yj+RsfF|@ z!L6%;mz%qtC)fS4P;yv(co8dSIA_?ystiYNxsC%hWpa{N`abzfj|n*E?6|DR)gi3w zvXD@D{od7>67>cSr+tAE^}@V8LE4-6?t9*kLhRS$DH(-g;c$Gg^dvaTKR#$(PMuG~ z_7sa1}klQGJ3bjk14|42yIR9Px6pg-+-D9 z=2#g@YM|J7Jsa5Oay7BMmd@0VHWy{G$vE_F^DS+)uXF>zmX%V|f9#K)KM1#P=U*Gh zm%5xn>Tr7ftwZ(5roESBvZn6z^V$$*if*Z^L3{N+Jy^J0^h&hK+}QC>*|bUI$LEe_ zhp!gg)BJDLLWhc2;E(N5cmT%IE^P_>vJjiya5#}+!eccqemmV$-CFy2)FNEbW&M5F z{)#GCpc0&ZqzOyL4S;*N1rbTTlr5c_3=8-+ac8|}xmDlm)!>TJ#@NQS`Ne?DJK`~R z<|MT`kGMJRWaYIS6L3_hSLlhhzuI6wHx9k29V^pn=9R3zV#L;_2oA$H@N{jy@`Hx} z^l!UFREX=Tz02o&U@XVlG|I&ziFEy3B;?0?xF|Yp;{AZ{N2}IYxoX%Z%iGu-Hsme9 zs!9e_?~W44Q(bZmKE{yNzl~`B1oQEg@>q=)Rf!+osK^M<#s@Tnu2?i{n z#TdlFPsxiMf9L(-dTomqLhd?^$H4pU{0hT-70@VPKfX}PQ8;rw%CxP%%`;_bsQ-r7= zxJ-;UM>qa_(;N8!0DFj*$kPLc7RNPz%Aoq5s_$!k_5&yHX%sl1iKTFDe5HYb5M%+6 zffkIAnLGpTygO&miH4pU)?RH$517}4{O5J;KhFge_P%jB`t0WkeJBNlP2zW>H_ z;)OVGCGsZ)unJbQVYEJryDi|f99T%=w6i7b@ya~I7;gJUh4Q;mYd`qQRn6(T2G6)`8Vh#He=+9(Qs#Y^ak#zwIL$3nzSRXB3_c3hEcMMOf8wA=;Y=E(RwKQ{8XxJe zW(F8#0tY+9V^r8OeU4c^WUtnKLD$)_{CV`@^KkzAzGO6u+qgNZaK)&@+Y>8VfT7Jl zy9G?-wW+$(be{YA%REYg9=3&3(OTs4%O(l0E2o~(Vn6CYpULuJBWIu&H);?0 zCOch6U-%I`nen?#yYopjG9jQ+t7Q8zpdk(PHShWI8v{zVWj`mihvT*Hn>*^!4t`Z# zUQAXmbjT`zI}I+?#D5ptiPgluuwT~I^dI42^vIQ$DUx0J#tn9S4oGR9sYHHCjNy2M zY_k3J0X$05iC-5V`fJ?63CHKRuIFw8L7(ie{&_=@9sjc!y!fu2s=wvVV_Zt7OnX2m z1Xz4-41hw3?0A!J{GM>}ZfXox!dTa1iP&|10cEPPZ6=|Ga*D7c%vP@AE5>R4+P{)s6~tas__GVh1*dJ!EPiz2Xo$X|7J=U;lk_3D#!6!N2$4 z0snrDEMU%JMvPSWpE+Luf&R-2D;aRv{q-R5F&fUJ1EEU#GtS?U8_{!66*_WB$d82a z)W6Xe@h#(!9hzHDk`M{hKm1B={+@3bxTKD2BpQ%o8e3p6Rk5@F%W(924Wb`|cYxx@ z4wr(L2nd}0GUAV(N~aNE5D$6jb107U{V7%jnu8fE-&{dHN0jIiIx(LqbOjbWiXDt-|5^_PP;oL*D!186U1S59hC1+vI)d=X2TiK={FD4UFa9CE1he~B z_w;*0cs9Q`u6q>-D)}B14H1&QS-+Jj{$Qk4@2T&Nrrt^S9=j?nYyfNFRX;mD!r2Q^~LWp zMEKgLMSBF5et zY&Wl@_r@IPb6pR*Yrdp2GM|m)E|ssiN?p*wPc_2qhrfP9iXji>wd;r=e_rl!dH`Vf z6baG^gv?cPNl$IANa^IjYhvZ|t`x)dggQtNRkYsEFm$^D62M50T+5Tst*u}j{ew%JaPG8N+7*KBi z9-n_jzz3Y=k-}*>8AE?8;VLFW9o+Tnj|5kT8qeaN6$fA6k(&Wc5Ieu=d>fu0(Pjc$ zy#q`pX!iI1d;f|J9}k=dGsm^Ny>j_<6*q$votWU~qXUHHOw68N#dUt~AkshVdTh}) z-(Kr~p#cZ?_`#F-#}CNV%>JVa`a=A-1JtrVQ8#^Ok)+@1aU3(tZIV4Fjud{^#xzrY zgT^#N)SDMWhOzMR)`EKVqjSO9e~%n)2Nt5kX7a9Ha-FLYPO$6dF35h+%>8P7p>XXS z55np4@D5I1Z|}{{g$g$h$;mOd@W~@yvc5R#JuZB*s6|bj2iF(4KFl>vo4Tc@%Ak;1 znzYfWqAnFwOYeBqo86z@-?y+!OaTsB8W-dYwp3!VX#%=qou$UE^a=a9-{|7!swsO` z1i+qP3vOITQ@ISo(iCbSNnXO2F;AKY_}HJ@*dm&+Q1?3{A2Gd``MO!^-o9Dkz6-1O zI1M8aIHIuto4Fl3MIZxGsw`p@ol)er(|4ItAwSG-x%XUvtG0Q;>gYj*! zU9lo0RPupm(!z))O&d?x^wAHb2~);(cdC8^NIKOJ&$;i0!ZgW7RmN?ax0z2^jMbyx zCBtQMjs-*}4MbfXSEgc-Z*U`ID{BHy3tNY#*WvnNV1{3@hs@qFjxwnnPIOmwurwHA5@TZPn?Wv&c9p@ zjT;WZdmk8y8*WM={_L?eTA6^mnf&koSmxKkrvQV9u*&Aaz$J-tqQI@1BYNm~UFm$6 z%9|K#n#KCLJ3JI?W9ug=fuzT^po{vVvWDf1u9*nw@m+OO@fr{~u?OA*v_)co>dyu4 z??6@|w&yjZL~&UDDXWyEJ#@33&aT#W=cc-=_9+lU_CQ}kqx|}B{`-?V|H1a>_5Wu3 z`$w3VGDFZ6X`sa_&os_aEp9!}@J4OBd4uZ<`9nCSB8MHwyci#W-+azsuT6C!UzWIY zr!}pb6bOns-hDOJ|ByV{rP4@qcFyV>#zKF5~m3OAlBZ~ z--Q#E!BPLo@WS6(z_)t<(=sn|-CxzRt}+5DakBdL>DWkp?5f4{z${gnn^`26BF zFI$?)Lr5Zb)!Jtv%%+q zqy_nGaH7Mfi9mP^`od%8;HZNWh)T7UG<~)RdMB?nwieW%tU?goLB+0wh{Gsg{=KzV z)h7jrwe~^DQ;uoL_FQ{K^n`?#<41PK%QiKw6AZSAgj;To>yAT5b180auo4@V@iI3j zlWJK-{cgF1UWa9P7%>HyguAu;V}N=1+P-*;_dwPK5EZj^f`-~lIhkP@?&DS!aFScI zMbH~PcxTh|um-TGWu1UH`mabiW|=svJArR5nr?eODQ$YDuJa59kywmONFUn|yG0_D zzHSGa9*`{HfP8trFci)*Raw7>Hg4LfI0NHQBSe`*rLd6!1dqTo*2hWyV-IjqZjE@I zkHGn6gaaC8gBXL#;Vs20tj61z94|cq06T=cPjI&zlcl!5Scv(BaIPo7!sJ4CA9G*0 zY^*x*+pHT=-pYneG&ZAOK&2R3?ofFX>uZ}y#0 z_Qw8*-ev0LuGhwM8!JJ->I*}Xu%75 zqo)cT&qvvHx<~^aE6-*-I3XZ{pV%g>>{soP34?_vgU5tnPFAq7~3_2U6-@hE0EJ=6bZjZF~D#uKz?>j(hiPU zS`)@hLny(;SG_Zo&YTSS1wc!t3(PT%65~3+X9B45f=_&q&@RrWFNLPHN$oqx-2vMN zfd(K{s=vHARZVD#5I(HxgX4UZxBypmC_Ai3#UoYNLlG2<5BoP4f@bBz>{?_-$c~Sw z?FRPgyje)>oGX}hM9=$^FyjaQGZ?`fuV2G#Xu{s~-D#sjPs5SE!oqh;WHLGUc`b($z)zHXgs z*})7z1MHJsZj2kvhR@(E zM|(p`w~4qzwAGybDZg+8#YOiX`SR5sg3|A$BZ`Am(K|3hUI25TW)DIb3O-M%z}Tx_E5PTD~pp z{iu^0A=RlV=N@wW9yie87;0e%&eS(xM?OQ{xF+TV;(AyJ(Y*>(f`yyy0eBIpmTJw- zP6_(4unQQSq=d|XH2q$9PktX1{>VV$wboY7SuPhE#3_~myU^C49LxEBp_c+JD3AXs zaxo`zPw>}5Jksr;q3~NP9*yd>Yp}}@gj)~E$UIuJngXT{#-Jpd>pl12Wf49ZU?37- zo?lxCa6zs~E$a9gAojklqhQ`UgQcEpd{#J|Y9xZQE&~4on#_TU;59W(78G7@p?w$dCK+kMsJ( z4Px;lPeu|7>Z)_0OxPJ`3oKpAqHbu7#%D5M}vpTAkY)xQChnIM^0Vm^<63A^w(0Mgc5?UUb=nsmRw+^ zDi$jNEnouL?h-@dZOZ2)MR+Yi)75jIx>UQlHWIs5oV9z_NhAiN0JqywGo)V2BJ{k0 zR7eb=&)wuW@0p)V$C!jSp0`<_S);pDl}`Bhb1;hgz%_K$pkKf8Fu;)p&9|~%UDS~`4sy)+jVYk`VcXYa8T(VZhetiHV z2d^$w>6yM*pJvC7gZU2H9eSOGU-|@XsEzrEQY9*uNGGf3c&AVy6I!`+dp9W;^ow4_ z_4QN1aXA%#iS)N>+U8@8V7DO}EqSK4k~2`A@}G^Ju~yZm)fHFA2#43_O|%_uZb`B4=AW3tj5@ zniAA}AKuU6cjn5?d(kLyNn!ORas{J-rI9zw3%WOG*60*#6F-lvSCZec-L*i}o&t_^ z8_2g>L(3fggrJ`KAjo9#R`HwXY4z? zXBAW~lJ530J0_g8kfXlKvpy}kml7VhjU9_CL)o;%P-yhGT+vh+-%Oia+HePS{VXm> zd{hvei{{B?m)^yWYU;@y6P8Ka7OWg2nw^G=k;`U7X!R#?a&a3C+(+uof+rz&`tKBH zBdVJ|gnI_&Aa|UbA0|AF{hGygU2AkkUxQ)yut@~ z#u7Z;)j;G!1jJ&G^(dMCy3qXke{CJr| z%xQ{EkiLyHrxZpAZ6uZou^~WF#4=ByGd=4Tmr4Z`sRJMFr|EAblGB-xG{+E?wx&c~ zr}pBG@_N9Hs;2DsJ0iek-KuZ_?#S_?je)SG+B=&?JRD$>>v*d;|n02^)vvuKKxKP zW&PEu0wGlaM2b|gSN?eTO$oPV@`V$x5{Ta`ns7i`WEDiE)l;jk>D{kfB^qjMT{UPU zxj+No%ATg#Oc9m6-WU98ucSTNK{FmQpmBEdt2q7*i4U}^_jc1C; zLBjz|9RY?gkWzU14h%;&jRc<6{cZjsKMxI;0KfOMu{RQk z(Q<(lYyr7DoRj{y@7*Kq?L4<;tUqu1nv?bCk91ETQZ$^;o=MwFeSADTU_h@58%q9- zHkLi`Mg`Qe1V^9f5BIx<1jtk1QYQOxtrQ6F4{g^_g6a7v1S$4}kc5%dh%8jj^uz?WWk_AbV{+oH9f9 z%`;i`a(Mk*py)eNeH2@g{M?WK7&Q-kBx(BnZyJwHgmz{I(ECzJZb&W+AfYPYv(ky% z3~x<32IMBd{SpV|2UOWvKva{dSn^<(~kHV%fiFP$ci zxJEkTs;zDH?+#$eJ?PZoMwnZ?=E~^(&6NSIJ4ycUj2nPN(Oe?hp8Ppl4;qju)~f1q ziyV#@og~WSA$KVw^lr0eGXoaql$Lh-r__&DxNGOSrtAka~ z=hkHbrwu5FNiX29PvA20Umma6BzF^OCw?UlylDou9FPBcw&_jCK7;pt7G1yva@z(l z4bR7%Nj05o-$IJ6W zL$4pw(ITlXyNl^Ta0oug^%!kx{(G6Ocfv8-WNnnU0gcJ5}3 zms@EyczS#S-4~8u9=<}#y#)MIk-rMKdhuu#YXLzA=p~?xH1as>pNQS{4pe@_D4inI zk3B8Wt*hRG6*OF&0ROryVzUmI!uI=Grh}RlL_F5r-#6iqzo{wD^)jzhcd%Ko>em() zb#a;heMU`?HCd3lIgL4OZw=xEvinvtN(FZ=aWb3{#EuZl*{5?Hicc6#-l1^5U1M!O%5|P4R+@N>E*+| z^I~W`LC5gfY%t59@L*OThV<63GJE_JI9UxF{wkTUJMS@Hsu_s;u9OEzE_mucyuD!{ zpY+EH{e7}kFiLe%<5`*z8|3W^PGp|sgW!P+AQaslreipqj*}(t=?az z@O4Q!M^CUbFk5=#DHG50fNt3t5T)iAp3r;V2o*7Jyg1wK+cg`VZ`)ny$3iasuPO>3 z#&}V=8~Pt9O49F)liVieEn2Pk={*hNXMyJ#pM=*3JJnRoNl#7 zcb7`g*fG8N&bZebq4kV64ge0@1J3S~?K!u%GUQ@3t7@-Q+yo+bzh17CZRBpFf zonP{2mC_Tesl@#J-IH*U3ul$dD!u>GDBj3#L_gn{!57NakDXB&jddCNr~rtIL=8SF z1&0|)a$?#=Wh-WCX=$aGcA?nTn{gmL2mpP@Yb{2YOFb@_saiA+pl<)Ib)?fo)2OpW z?@#$?-8%#Xt1|#&$1KS2yrtiy+Gkboqc$vMHo~y58n@_2nRuhd>N`hD?XA^AIDauu z4IH4zOGICo`Clp=L~M~Y*^xrBsA{xaNC!cLm=~RA`aXjax_Z5PezxC`1Fa(T2&BB9 zaTm6~+L+*56wFQpQ>! z{`DBe=D+1oGP0&T!mDDOVEv(N3M;vLJWBH)rSRo%8~?Q4ATJB9G}5%^Rqm?t*9O%S zk<@atI0?`AWz7r*dx?*=c=w$^v==!K`c47a*!2EEZgZ!jwxt%yc8%LP*wP(&d(Og% zQ$i808ls7R&C6>OsQ?wi#Ep{3xduSwLkn%aASnfycxVA>jMkB_WrO^S@)`LG;>)D4 zTOWe~-PV%S(MR*nv^dW1e0*{t62bS%%F1G%F2_i%q5WXAyLpXh`m_2oHz@mGK=4lh zDc86hOI_=Llpjjnwn0Q5alk2Pbu`R>FVJ6Jr{HP1vvl9$igx+1X0-$Tt8~mI`~jRn zClKodv6r1_deu)CkK~iMnGQ=bj^H%N$KR_O2o3;xI1%SZ{GXRy&qp&^G+4ps)rp1 zgsD*oldyeGc-_!yLdkgY>FHOOak#VpltVRI!%*J#-onAwn%>j%Uxf`RPU-)1LnbNu zBO$y~*z|5)9|rU9hkcWmkc?JYH4Ap6Ue{LYsl7Fu5c$8ib%uy6Lg-)iE%>;n1Od8T#C{%K;6fWH@^u?j0%acubgCn_9Q@1K5Tl^I0m(jSm7LD9KM%ykWRARI)=GuL6x?uy~G}E>F z0i^5?L$X{dLT$~aOf`AzEg5@WgPazyHZ2Alx_>Opb^Lw)pU@)S*#tx9%Z$b{9jJpg zK30r8H^RwLII%eZRT{1o-oM-nbqi7H<{g%w-5h4oFm*h$l0QGNb43(+$jwM_?u!)s|%udQ0V|%fGGi`7e)O^qDr^7RI zHKy7T5P5C<$puWd83&@(Xm5seoThhgV`(60)1tzIU4ow^GNI&YIoP``$HZCN7^7Ka z?4O$Hd38X0)WI1huli5Zs4&>?zMI$EN`TnQxNwU+@t9xXVkERtOo7~Epjw)Jo_LIl z)CN}UC(d@sBxOo&!DBsvAKqUb$REZo;X%F%#@#Vw`ldttc4qsQ6Y=ceRBuS{uuZk*$pm|QlBwy}mpDXB_Nw(k9jJdY*2CL!npK?N0v~OXj$| zZU+zhc!NueQDz73Co82&kRXZQ*1}9$CCHlfy+5Y11H9tBMvH zRQr+&`4KTii1I~_1L;>K1l}&Oud28M_|PqWgJ$2S4aiS1LQQ+oH!J6EdEQA|8?U&{ zdq(%30r)#f_0U<@Ae(^+NYgFcSQ$2K~X8iPgIyt8bQ z=W|&?v`0l%ZEOlLgj{MZ_I}E}@a0*slnhH&DOou$DKKroouIIe?!o<4HlI@hrIh1&7Hn zy?}mCiV)F27gS3V2fI#|H1bC4qq2|tIZs8yD5^5a@!rXF$0EOc+RbBJz|~~|3uEMV zEZD_@l`uqeiy2wwA&2?b8dLdH8ByCN52$d>h7j?D)m8Fty|ZeJNG=n7EkpUWI~12t zIiEr7fE-ESozurM%Gyqw-ET6xOWUX2q+4x7He2mYER1J3t#^@5?2L#2>TmUR2~AG>czij(Up=M!5a6UX-M zpyv`N>HK`u@Wh8E&wl}@9X%amdxrKraM?(cYxVwi$P;nIpYmhKL@tty4E@+J+!~(m zH#*i#v+$4%-DsovNN`edVjpT6`#Ln?2mYV7u00;gv<=UUFpim$H7prYqntjc9DfbQ zWH9lGo&Czn*mcNp2uu6X$QZ2CFp0Gh%_x?2Y8^&DnlhA$XpEF5hb2ZRTc{QFJ)+-E z`rf~uf8OVL-}^b<_jBFX)w`cBpRc8#-WR05n?Vt9b3M3dqe`Eg7>9)JOh|Tp*3X7Y zQB9bFfpkRlMbBU_zgIf2mtFl(-T3e6-bfSqx0pT6@aUwd@gF9adU#{C4cFEl570w> z-@ePZy|>rg7E^q?@V2ysb?R{Dq3i}WO+F$_>A~}-KaK^wj#^yaus}X$Uat=F!gYE@ z%uA&2PPe<_Zx!*vs3EWQ4~NiHI^H}lv$71Hs*!)duFFrwEaMrE)&#r4s?4PwjJa^9 zCS(wygRee!Tm#qjf%EU{Am9)gZP6pj$NioZ`rzY0Yjh4BZCR5(f5PtJ?93StM#rB# z%LcY*{C}iysFtz6Z#dYGMXN8&&DWHM0Eo+}rjP=_3B+a5FcS=;@Ud4ec3spcGVQ3rP9ezx! z<;HxqN_OzK1*juRX6ADztpd4W6}PiPO4348g$uC{e%+a>b1mUa68~<=$ofUdDcR-F zRS=TWlKuoa0x<(}my%z|;djJ5_YMH_8RX6%nqGMS_$xi8AvatOK1)HAVlZV>k1{wz~z2l#?4XWn=coy4vOs; zTSc=BOlhW58{aj9(zh4&QghDjOOf5sHNa~Iz1{=Cd_rxlaZoLJ5U0KWh{ciMK{TGx9Ej;dnWK*5cD)vABOt)y_@fcZzLKGuJaciYB~i~R;4=?o#bl0WLt}oR=xuQ44ST)3S?D6@&N>>k0KZIN z+%I_~hBn{oJ&e&VID%JDL}Gf&9n(a8$Dk47{*b-pT5@0Bm@QmcSpm$ldr~ZXm@In+ zw7WC>*4_y+?oCz4Mz-VU1E7oupUOAIqDc&R7ku_)f|Cr0hu7W%>f|**(<}<)P@tETvqTksXS#loB`i)UG$a(;rq=h= z{d1G`>EF=@JZcRQZDu={)rq!vNZM-GxqAjJ@|w1mFDucMgcZQixehLzQM!yDu}P4SM)GA`+bhle}TJ_x3Q30wPF=K_ewC(jYJ*(jnccATS^ul7j(AN_UrZ4oD*+C`fl>&>aIZ z)VDdugP!;N{{8Ucn(^Y9{p@G$wb#1Wy6-)&A1X@WUnIK-fk5zOq$N}!kn`Xzv$cZR7=K8K>@-7-s3>dV-Z8non8X|L9odF`ta#TWU+^duR{18saT+ z&jY;R+DdCXKp+Gyr@vTHtOVp>-Vhmydupy&D@oXil-StA%#gNd4qPM3WH$0VPsB<{_yB&X8Lv+sE=xm5BY|U4yI60|lPWO%H5Eu;v3kME?5+eV8+mZx- zc1*y>!!s~6G&DTSzvd+)xU61wFk2{bqkV7gjqiUxQ4s*IshB9dCw3)mw$^ZUylQ{mn^&Sg5ih`jIxUP0=`>B}cE7c_j1 zj}BZGdT8r=FG00f^>f!Xi8YsoS&_kOgSF3cITCK8mk7}bA+Z#HF4yTqZw0{vzC`}u z$?K=zc^X*~^`5xNjk(cgxGIMLqAnYKFqX z!~Mz|HVvKhSpV{Y(?O+a-zdn9dC-ZYlefYl(QCYSw6>oGUr=1fK8}TGRFkr5NSDcO z${xAZdIuBpS!%4$nOdpqST9dfu&kor&$)BU-2d%Vzs#wE^Ee_x(tfO5Ha3Psv)TD1 z9$0j+$$hOl$3=9b&Fli=M|sg+o?-C?zVu-noruaxohSs!?iJksePSfs7?x?{ls1@_ zOiclM*Wfv;d^wA8okwit>Jh(u{MU3& z{jcH`axjhAO?6)qv!q`f$rwo|lJD|bPe#9%zt0b<#Z)m}tX!A(=?fO$x{z9fwK}dY zioZ}kswzkNk3oLD9aC&t&}9{KGVgQax3CGZP!x2#A;X$GjzVZUeD(`hkJp-wG?g7` zFpPMl80Rt@D<84ZkPz+a_aFED`JgFZNI|D&&@7KM3;pyCx+q4oZz+|tDSd4|-t+^b`XA3o2!)I2f>T6j> z2hUCP^rZUq?p72H%lR>;xkPcTXAkZqMnbc%um5Ko`0x>Ln&gzKh$ojQGjBpxt^bYSfICL6Ow&}95$Qs?o{U+p*Rs&J zvX|#(zB!)wjq)rC{aN{lYD?R@@_&5bHq0KOo?)HkuF!mCiUGOW;a;ymo@UkY z=D)uFPO?c>lhw>Ljlb~2Wp`xoqR$r{#> zsex&t0iNK0T^EN)ny8wZq-h9W=0~Lc{}oM;(l^gismm2Yh-9p<|{F*_E$J|O4j*16dopqJ;_4@Vw_ifn)3o}!3o zKo9AL-rbUph^E&_*ROS6{P>BP1xs8{txj!?25Sx?eEo|2Z%Cm?__M?C*nX{g{&*{< z@k?90`+EJ};db}Q(Ykj^>4vftrPI_}3{gEPDe1v_V z^4C`Fv)x6=h=uQT+$MHRi`OOa{ZcWdBqU#VBtb?f09fQoM)a)&qNdju`Mb`R&*wI7 z-AKr)hQDe* zNt*3cbNk*J>;`6XUhc|e-2eM7Jvar1jmPL=L(OeJYA@FSqA?dKL0(>7=6wpuKnQJ! zMqRiCd!P{m_nPbPeYeH1(MoRPv7Inok;Usfn%Q_TxgH%AHG23U@am{zt3-FQ$YtS` z5=}!-bhPf%>eb3|Sy@@DQh)$hCr$7x@8Wvn5}J5FQ%UFm55OUXJ^tIeKVbufIhr+; z86Hk>G-(R1qw-$YEghTkvNT5Fe z?{qK;T6yxN<>jiUlPq}7D5&lU+qd4w(JvwfY-|Vz8~E?)Wj5o2;K!bbpnzr? zxc`S##e{ugBOJ$u%x{_mSR{?H--!O++D)d=P?6o(8VcT@+Dc!uoZQh%3<%!iQJfhi z&m~o`)3x8(eqHz4t9?zvhvOBqI@;{2q-xk5AEsfPJXtDfxS@=@Mb)@2WBw`k^Avu;5D(6!|k=W&jGZ9-cSLALSXvRFaOyx7UJSww~r zyX;+0jH44&Df#YbNSNYVJGdfm2~)nZ>(U(-{qVA4WhHC?R0bXuZRYytWW9=x+TrNd_o zPcXyQRg-flwPm%q4=IN~n8-?3M6#NvK2TV&qYqzDAHv7kqN1Y>ypPaiSFA5yrVx0T zk%3a)sIcg-IM*-3loXjkthg_ZBs_Q?CYvq}!J>$gHfA~twm3db?NO|#GUZm^6t|_^ zpnZ0;BHgOBctlYgzfH32sW&ZM-8HZuv&gZaH7^Wu>Q~?|)IlwQ!1?4J8z=R2|H~1V zOtpnOSg?|g-uHaJqa2yf_fWA0?~~&~%i~@t>cNHCtDMzeeaSPu7!aJ*Kf)cl1exmV zFfVQDHd}9Sn@xD`O=44fY}~`9j5P2~tON^X{X`l+j1CD2(ff4!`dL+SWedlvQFTlBlgd_UMLh!btz zddY_%-qmEhKOk%_H|PRyR>Ac+Ek*%?v*kYZX_yRHA^O$pl_=v67w}o6?FuR@E8Es$ z_ze+vEeCw;85QCkM@?g%DeZ?3iAP=*J1ohSt-a&8Jk%LunG5@KiiH0700vlz-w2_b zKA74YD$tIYs;s;xcCb>eB)b1tfsy}7p(0;-dp~C{l_USOhl86}Yog)NlBRx*<7RSR zadB}`5uc#hLgOCW{{lT6qcxv&!jT5g+TG&y;o|8uKPpSIl5{mhp{bR9TL@)#puqRh zoiAX}{>PTg*;wZ;WL~4e{@3J?$QTH8MD9gJ3QWjp>G2+_YO>K1z8rke_l3P`!eptJ z@nXvUmnR;%{Tk_u?Zu79m~S5gHH!@jr>t;S?h^<;-k5n`3HdiNqOpe^hTRNvAb;V> zl#11zljIzq4KsW;8y$#hjF6 z6&1fx78y=$co)DbUi%$}8X6jI#hx=h*gWq0>46+9mi<##|EG>TCWb=}I=HJ*xrSBu z{RjYJLE$heC0q3yU?mn}Yw7G|Mkw|%Acl*MKtQ%Bq7?J0`&^+;Dx9_&W>d46U8q}? zM;kmu#cLUveU(+!vzgoM%R@|Feo+}oLZI~}^dBe-IGyO}&2S>}c4K)F(P_7>MoM}! zq;zjieXbv!gN!$qKk2SqJa_qSPj=M9s*(%z?hc0vaL`+fH?+LAfB0D)?E?x z1X;uCEA{b)UuE4uu3I=mq1e%)62b$;{{4~owpZt;dAbk*lcj-N1_p*~`@%W&B#7z> z(}&s4uJNLt7+j{rnPIs3>s5sWzFaSK%E5wvRURaMgHP&T(7OvftuT4~!j0Xn4oXt}D=*E=1b|A6^O_#qAr^82;^p1VRI z`G6)?_8h}ko`|8H3*?A8sOxB%>8Sj`EAOLa!_LvJBw_D^@#zLk#&FAP5`_jKHSWBA zE2p^>&adpGd0UTKgFd@Pb?#l931V<~A_|;JNdz6)eu-LC?>N`{r~C9la_(U;|J3aq z`{AB%qmX#>-U}ChRj>i~;P*d(N@1*ay+K%amL)ZXaIAq=7i)`>smH`0#n^HFnqJA% zNuf5%_jmbmX^@jaa`c5u<5k7ZxOcJ<*!s0J(e^4eLW5axy&u}By(g0UzIB770WcsR zC;NR`<*?OY;hr;m30T79DIA0g!&MR$F|5 zTkbNeVJPIz?n3r>1UnOwv5Z$i^zYo5`WCjM;MvJLY%bYH7kanMdb~2o+9EqV+jR2T ze3Ds+O6#4+LUJ@Igows3=kc!UIggrFw~-1h)A_!V10kH_IQXN9FeE2jX=uKo@#~a}WCl6fbd1{hS9)tk}64=hgV9$)5o@2qd;9 zYTBObhe+rQ&8TeGD{|KH08c-%1x7U2#NpHcB%cBaSs_%!%R-L#ZEHL z3%l(sY&M=8G?KAJmmY&XVi+1FCnx6(VEW;1Rb!`?uRK5Qj~m~XiyIA;ht|0)W-1R^ z97v!VqzMq{yOEb9nvME6mit??t@|}KLQXjD_a0wqIt6cxsCW~m6pykR8PrDEjmrh| z?{@8LF_E2{tj6=~^IC64*<{#*b!;=_qS<;;c~bQa%uy@#dsB>3`MOz&mV?F+g^G5n zi@(B}2QAI$_ELVaWoq<*&D#D$9ZeN7t^RCKp(TSw?TH!6rH4SD`D(q`^4f|>SpoPN z^LfYc1Z`-&Z+sQ0%JY>BOT)*R{bpEI+b$$wzhdjj+C+7BcRwbZqLWZj+e|yfkhn>Q z?-@uHWJe}$_rTIm%iSF>GD3HbMZLAM_F|~$D$iwUYkM1ArxHhTvHHQIFXfPD@uD0Z zUGbIQ>vap*ANc?ik8s5O4edbZr)MA!G_Lc!R%K&#kI2X~eNe&~1I0o&NG3 ze4DeJ-rDhbWo28MjhHBnq%Yen0k6bUk%W8e(iBJll2UN?WrU9BO zOKN8lLo#l0y}0uWO*i7mr-@q@L_jn;ZNMnh7O$_WJ_uZ9!fc!_V_B{XW?1Ads;pYOW093UW z0cATL7=b6_)rC&iE&w{Hil;U&MAH&2OpdUMqC;j?-%@+YY?Xnd=_&!lMBUe2qv# zL~3H|=AvTHh{!8>rPcnbd7L{fm}j}V(sCIVTS;D@82BOulEnZpJTAC33dQn-l3}qe zy0$atnA4X>PW3B^S#$P7%vh08xr#GZ&=I|K8#edC8u`YbA34YFGjP;xhAC7lhy!!p*#pHy*mt+kFq_&x>j9VE;sjD66XRMrX*;N;FqWF$Ghk{zg zKy}tw`2_XgVLRR9PAFz)EhbrX%*0yWoF+K;>t*ksFI?75Of6ZqgxBjbUQ#I{@C?V_ zBwb!PIv&!-KdgK{dR3!YC!cG|jOX26LBq_diWc9r)pqLZ{wY@5?BhZ zod0w>H;8+NOHbnsx{wt&@2eb!AY7go@BUc03XM+Wr=3~LDa$Rl*^p>TAbSB{^ z?iSEM*bVjCp*w2ox6+-w1W=-~;VVXeeY=mOWJ573IRr0oOQZR@mt%>)?GV0+2!lWc z=&s(uqfNEOrLW(Kdz(`i?tJPqD_u2Yb36Op-cxEU)>a4rR}T8CB>MQ@zARO%V9(~P z10FX?b(J%%K^1>lRP|1xm{03u=EY^6t@gJH_*>OKzXjG`7|AM6cKwFS{P;$3 zuY^vE9Kz|=D!WDBSldsrr+utTa0l9kfn20YG-eS>Broj1_YI028O~ ze;%*08D=EBqvV@4T$~7v|D<*KS5(I$>M6HEe>+AOdq;%~PKle*lqQcX$xU?3Hyo_F z&qitTgzpdO+SKpQB`^f+sK3QkV9BskC*xUWx9T55Km6E$87!845yxrJ#U6`b2Jq4PL?qJ%wr(HO5zQOWEYP%TTT`pWBA?!L_k=~Kg}l)X9S zJZ`Px>3n?<%q@#kZCxss3Ky||5#Lz0O8$;6R6R7ESED_^niSD7p;H*0W}�G_*kJ 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 z%0A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 literal 57813 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 Fig. 队列的先入先出规则

    5.2.1.   队列常用操作

    -

    队列的常用操作见下表,方法名需根据语言来确定,此处以 Java 为例。

    +

    队列的常用操作见下表。需要注意,不同编程语言的方法名是不同的,在这里我们采用与栈相同的方法命名。

    \(O(1)\)
    pollFirst()popFirst() 删除队首元素 \(O(1)\)
    pollLast()popLast() 删除队尾元素 \(O(1)\)
    @@ -1783,7 +1783,7 @@ - + @@ -1813,7 +1813,7 @@ int peek = queue.peek(); /* 元素出队 */ -int poll = queue.poll(); +int pop = queue.poll(); /* 获取队列的长度 */ int size = queue.size(); @@ -1888,8 +1888,8 @@ peek := queue.Front() /* 元素出队 */ -poll := queue.Front() -queue.Remove(poll) +pop := queue.Front() +queue.Remove(pop) /* 获取队列的长度 */ size := queue.Len() @@ -1915,7 +1915,7 @@ /* 元素出队 */ // 底层是数组,因此 shift() 方法的时间复杂度为 O(n) -const poll = queue.shift(); +const pop = queue.shift(); /* 获取队列的长度 */ const size = queue.length; @@ -1941,7 +1941,7 @@ /* 元素出队 */ // 底层是数组,因此 shift() 方法的时间复杂度为 O(n) -const poll = queue.shift(); +const pop = queue.shift(); /* 获取队列的长度 */ const size = queue.length; @@ -1969,7 +1969,7 @@ int peek = queue.Peek(); /* 元素出队 */ -int poll = queue.Dequeue(); +int pop = queue.Dequeue(); /* 获取队列的长度 */ int size = queue.Count(); @@ -1994,7 +1994,7 @@ let peek = queue.first! /* 元素出队 */ -// 使用 Array 模拟时 poll 的复杂度为 O(n) +// 由于是数组,因此 removeFirst 的复杂度为 O(n) let pool = queue.removeFirst() /* 获取队列的长度 */ @@ -2014,7 +2014,7 @@

    队列需要一种可以在一端添加,并在另一端删除的数据结构,也可以使用链表或数组来实现。

    基于链表的实现

    我们将链表的「头结点」和「尾结点」分别看作是队首和队尾,并规定队尾只可添加结点,队首只可删除结点。

    -
    +

    基于链表实现队列的入队出队操作

    @@ -2023,7 +2023,7 @@

    linkedlist_queue_push

    -

    linkedlist_queue_poll

    +

    linkedlist_queue_pop

    @@ -2068,7 +2068,7 @@ } /* 出队 */ - public int poll() { + public int pop() { int num = peek(); // 删除头结点 front = front.next; @@ -2143,7 +2143,7 @@ } /* 出队 */ - void poll() { + void pop() { int num = peek(); // 删除头结点 ListNode *tmp = front; @@ -2204,7 +2204,7 @@ self.__rear = node self.__size += 1 - def poll(self) -> int: + def pop(self) -> int: """ 出队 """ num = self.peek() # 删除头结点 @@ -2249,7 +2249,7 @@ } /* 出队 */ -func (s *linkedListQueue) poll() any { +func (s *linkedListQueue) pop() any { if s.isEmpty() { return nil } @@ -2322,7 +2322,7 @@ } /* 出队 */ - poll() { + pop() { const num = this.peek(); // 删除头结点 this.#front = this.#front.next; @@ -2389,7 +2389,7 @@ } /* 出队 */ - poll(): number { + pop(): number { const num = this.peek(); if (!this.front) throw new Error('队列为空'); // 删除头结点 @@ -2467,7 +2467,7 @@ } /* 出队 */ - public int poll() + public int pop() { int num = peek(); // 删除头结点 @@ -2540,7 +2540,7 @@ /* 出队 */ @discardableResult - func poll() -> Int { + func pop() -> Int { let num = peek() // 删除头结点 front = front?.next @@ -2632,7 +2632,7 @@ } // 出队 - pub fn poll(self: *Self) T { + pub fn pop(self: *Self) T { var num = self.peek(); // 删除头结点 self.front = self.front.?.next; @@ -2667,7 +2667,7 @@
  • 对于出队操作,仅需将 front 自增 \(1\) ,并将 queSize 自减 \(1\) 即可;
  • 观察发现,入队与出队操作都仅需单次操作即可完成,时间复杂度皆为 \(O(1)\)

    -
    +

    基于数组实现队列的入队出队操作

    @@ -2676,7 +2676,7 @@

    array_queue_push

    -

    array_queue_poll

    +

    array_queue_pop

    @@ -2726,7 +2726,7 @@ } /* 出队 */ - public int poll() { + public int pop() { int num = peek(); // 队首指针向后移动一位,若越过尾部则返回到数组头部 front = (front + 1) % capacity(); @@ -2804,7 +2804,7 @@ } /* 出队 */ - void poll() { + void pop() { int num = peek(); // 队首指针向后移动一位,若越过尾部则返回到数组头部 front = (front + 1) % queCapacity; @@ -2861,7 +2861,7 @@ self.__nums[rear] = num self.__size += 1 - def poll(self) -> int: + def pop(self) -> int: """ 出队 """ num: int = self.peek() # 队首指针向后移动一位,若越过尾部则返回到数组头部 @@ -2928,7 +2928,7 @@ } /* 出队 */ -func (q *arrayQueue) poll() any { +func (q *arrayQueue) pop() any { num := q.peek() // 队首指针向后移动一位,若越过尾部则返回到数组头部 q.front = (q.front + 1) % q.queCapacity @@ -2996,7 +2996,7 @@ } /* 出队 */ - poll() { + pop() { const num = this.peek(); // 队首指针向后移动一位,若越过尾部则返回到数组头部 this.#front = (this.#front + 1) % this.capacity; @@ -3065,7 +3065,7 @@ } /* 出队 */ - poll(): number { + pop(): number { const num = this.peek(); // 队首指针向后移动一位,若越过尾部则返回到数组头部 this.front = (this.front + 1) % this.capacity; @@ -3145,7 +3145,7 @@ } /* 出队 */ - public int poll() + public int pop() { int num = peek(); // 队首指针向后移动一位,若越过尾部则返回到数组头部 @@ -3219,7 +3219,7 @@ /* 出队 */ @discardableResult - func poll() -> Int { + func pop() -> Int { let num = peek() // 队首指针向后移动一位,若越过尾部则返回到数组头部 front = (front + 1) % capacity() @@ -3307,7 +3307,7 @@ } // 出队 - pub fn poll(self: *Self) T { + pub fn pop(self: *Self) T { var num = self.peek(); // 队首指针向后移动一位,若越过尾部则返回到数组头部 self.front = (self.front + 1) % self.capacity(); diff --git a/chapter_stack_and_queue/stack/index.html b/chapter_stack_and_queue/stack/index.html index 7c9988623..9511c7fc5 100644 --- a/chapter_stack_and_queue/stack/index.html +++ b/chapter_stack_and_queue/stack/index.html @@ -1821,7 +1821,7 @@

    Fig. 栈的先入后出规则

    5.1.1.   栈常用操作

    -

    栈的常用操作见下表,方法名需根据语言来确定,此处以 Java 为例。

    +

    栈的常用操作见下表,方法名需根据编程语言来确定,此处我们以常见的 push , pop , peek 为例。

    \(O(1)\)
    poll()pop() 队首元素出队 \(O(1)\)
    diff --git a/search/search_index.json b/search/search_index.json index da07f862d..1e3655bb1 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["ja"],"separator":"[\\s\\-\uff0c\u3002]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"Home","text":"

    \u300a Hello \u7b97\u6cd5 \u300b

    \u52a8\u753b\u56fe\u89e3\u3001\u80fd\u8fd0\u884c\u3001\u53ef\u63d0\u95ee\u7684\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5feb\u901f\u5165\u95e8\u6559\u7a0b

    @Krahets

    \u63a8\u8350\u8bed

    Quote

    \u201c\u4e00\u672c\u901a\u4fd7\u6613\u61c2\u7684\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5165\u95e8\u4e66\uff0c\u5f15\u5bfc\u8bfb\u8005\u624b\u8111\u5e76\u7528\u5730\u5b66\u4e60\uff0c\u5f3a\u70c8\u63a8\u8350\u7b97\u6cd5\u521d\u5b66\u8005\u9605\u8bfb\u3002\u201d

    \u2014\u2014 \u9093\u4fca\u8f89\uff0c\u6e05\u534e\u5927\u5b66\u8ba1\u7b97\u673a\u7cfb\u6559\u6388

    Quote

    \u201c\u5982\u679c\u6211\u5f53\u5e74\u5b66\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u65f6\u5019\u6709\u300aHello \u7b97\u6cd5\u300b\uff0c\u5b66\u8d77\u6765\u5e94\u8be5\u4f1a\u7b80\u5355 10 \u500d\uff01\u201d

    \u2014\u2014 \u674e\u6c90\uff0c\u4e9a\u9a6c\u900a\u8d44\u6df1\u9996\u5e2d\u79d1\u5b66\u5bb6

    \u300c\u5168\u4e66\u52a8\u753b\u56fe\u89e3\u300d

    \u5185\u5bb9\u6e05\u6670\u6613\u61c2\u3001\u5b66\u4e60\u66f2\u7ebf\u5e73\u6ed1\u7535\u8111\u3001\u5e73\u677f\u3001\u624b\u673a\u5168\u7ec8\u7aef\u9605\u8bfb

    \"A picture is worth a thousand words.\"

    \u201c\u4e00\u56fe\u80dc\u5343\u8a00\u201d

    \u300c\u4ee3\u7801\u4e00\u952e\u8fd0\u884c\u300d

    \u63d0\u4f9b\u5404\u4e2a\u7b97\u6cd5\u4e0e\u6570\u636e\u7ed3\u6784\u7684\u7b80\u6d01\u5b9e\u73b0\u4e0e\u6d4b\u8bd5\u6837\u4f8b\uff0c\u7686\u53ef\u76f4\u63a5\u8fd0\u884c\u652f\u6301 Java, C++, Python, Go, JS, TS, C#, Swift, Zig \u7b49\u8bed\u8a00

    \"Talk is cheap. Show me the code.\"

    \u201c\u5c11\u5439\u725b\uff0c\u770b\u4ee3\u7801\u201d

    \u300c\u53ef\u8ba8\u8bba\u4e0e\u63d0\u95ee\u300d

    \u9f13\u52b1\u5c0f\u4f19\u4f34\u4eec\u4e92\u5e2e\u4e92\u52a9\u3001\u5171\u540c\u6210\u957f\u63d0\u95ee\u4e0e\u8bc4\u8bba\u4e00\u822c\u80fd\u5728\u4e24\u65e5\u5185\u5f97\u5230\u56de\u590d

    \u201c\u8ffd\u98ce\u8d76\u6708\u83ab\u505c\u7559\uff0c\u5e73\u829c\u5c3d\u5904\u662f\u6625\u5c71\u201d

    \u4e00\u8d77\u52a0\u6cb9\uff01

    \u5e8f

    \u4e24\u5e74\u524d\uff0c\u6211\u5728\u529b\u6263\u4e0a\u5206\u4eab\u4e86\u300a\u5251\u6307 Offer\u300b\u7cfb\u5217\u9898\u89e3\uff0c\u53d7\u5230\u4e86\u5f88\u591a\u5c0f\u4f19\u4f34\u7684\u559c\u7231\u4e0e\u652f\u6301\u3002\u5728\u6b64\u671f\u95f4\uff0c\u6211\u4e5f\u56de\u590d\u4e86\u8bb8\u591a\u8bfb\u8005\u7684\u8bc4\u8bba\u95ee\u9898\uff0c\u9047\u5230\u6700\u591a\u7684\u95ee\u9898\u662f\u201c\u5982\u4f55\u5165\u95e8\u5b66\u4e60\u7b97\u6cd5\u201d\u3002\u6211\u6e10\u6e10\u4e5f\u5bf9\u8fd9\u4e2a\u95ee\u9898\u597d\u5947\u4e86\u8d77\u6765\u3002

    \u4e24\u773c\u4e00\u62b9\u9ed1\u5730\u5237\u9898\u5e94\u8be5\u662f\u6700\u53d7\u6b22\u8fce\u7684\u65b9\u5f0f\uff0c\u7b80\u5355\u7c97\u66b4\u4e14\u6709\u6548\u3002\u7136\u800c\uff0c\u5237\u9898\u5c31\u5982\u540c\u73a9\u201c\u626b\u96f7\u201d\u6e38\u620f\uff0c\u81ea\u5b66\u80fd\u529b\u5f3a\u7684\u540c\u5b66\u80fd\u591f\u987a\u5229\u5730\u5c06\u5730\u96f7\u9010\u4e2a\u6392\u6389\uff0c\u800c\u57fa\u7840\u4e0d\u8db3\u7684\u540c\u5b66\u5f88\u53ef\u80fd\u88ab\u70b8\u7684\u6ee1\u5934\u662f\u5305\uff0c\u5e76\u5728\u53d7\u632b\u4e2d\u6b65\u6b65\u9000\u7f29\u3002\u901a\u8bfb\u6559\u6750\u4e66\u7c4d\u4e5f\u662f\u5e38\u7528\u65b9\u6cd5\uff0c\u4f46\u5bf9\u4e8e\u9762\u5411\u6c42\u804c\u7684\u540c\u5b66\u6765\u8bf4\uff0c\u6bd5\u4e1a\u5b63\u3001\u6295\u9012\u7b80\u5386\u3001\u5e94\u4ed8\u7b14\u9762\u8bd5\u5df2\u7ecf\u5360\u7528\u5927\u90e8\u5206\u7cbe\u529b\uff0c\u539a\u91cd\u7684\u4e66\u672c\u4e5f\u56e0\u6b64\u6210\u4e3a\u5de8\u5927\u7684\u6311\u6218\u3002

    \u5982\u679c\u4f60\u4e5f\u6709\u4e0a\u8ff0\u70e6\u607c\uff0c\u90a3\u4e48\u5f88\u5e78\u8fd0\u8fd9\u672c\u4e66\u627e\u5230\u4e86\u4f60\u3002\u672c\u4e66\u662f\u6211\u5bf9\u4e8e\u8be5\u95ee\u9898\u7ed9\u51fa\u7684\u7b54\u6848\uff0c\u867d\u7136\u4e0d\u4e00\u5b9a\u6b63\u786e\uff0c\u4f46\u81f3\u5c11\u4ee3\u8868\u4e00\u6b21\u79ef\u6781\u7684\u5c1d\u8bd5\u3002\u8fd9\u672c\u4e66\u867d\u7136\u4e0d\u8db3\u4ee5\u8ba9\u4f60\u76f4\u63a5\u62ff\u5230 Offer \uff0c\u4f46\u4f1a\u5f15\u5bfc\u4f60\u63a2\u7d22\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u201c\u77e5\u8bc6\u5730\u56fe\u201d\uff0c\u5e26\u4f60\u4e86\u89e3\u4e0d\u540c\u201c\u5730\u96f7\u201d\u7684\u5f62\u72b6\u5927\u5c0f\u548c\u5206\u5e03\u4f4d\u7f6e\uff0c\u8ba9\u4f60\u638c\u63e1\u5404\u79cd\u201c\u6392\u96f7\u65b9\u6cd5\u201d\u3002\u6709\u4e86\u8fd9\u4e9b\u672c\u9886\uff0c\u76f8\u4fe1\u4f60\u53ef\u4ee5\u66f4\u52a0\u5f97\u5fc3\u5e94\u624b\u5730\u5237\u9898\u4e0e\u9605\u8bfb\u6587\u732e\uff0c\u9010\u6b65\u642d\u5efa\u8d77\u5b8c\u6574\u7684\u77e5\u8bc6\u4f53\u7cfb\u3002

    \u4f5c\u8005\u7b80\u4ecb

    \u9773\u5b87\u680b (Krahets)\uff0c\u5927\u5382\u9ad8\u7ea7\u7b97\u6cd5\u5de5\u7a0b\u5e08\uff0c\u4e0a\u6d77\u4ea4\u901a\u5927\u5b66\u7855\u58eb\u3002\u529b\u6263\uff08LeetCode\uff09\u5168\u7f51\u9605\u8bfb\u91cf\u6700\u9ad8\u535a\u4e3b\uff0c\u5176 LeetBook\u300a\u56fe\u89e3\u7b97\u6cd5\u6570\u636e\u7ed3\u6784\u300b\u5df2\u88ab\u8ba2\u9605 22 \u4e07\u672c\u3002

    \u81f4\u8c22

    \u672c\u4e66\u5728\u5f00\u6e90\u793e\u533a\u7684\u7fa4\u7b56\u7fa4\u529b\u4e0b\u9010\u6b65\u6210\u957f\uff0c\u611f\u8c22\u6bcf\u4e00\u4f4d\u64b0\u7a3f\u4eba\uff0c\u662f\u4ed6\u4eec\u7684\u65e0\u79c1\u5949\u732e\u8ba9\u8fd9\u672c\u4e66\u53d8\u5f97\u66f4\u597d\uff0c\u4ed6\u4eec\u662f\uff08\u6309\u7167 GitHub \u81ea\u52a8\u751f\u6210\u7684\u987a\u5e8f\uff09\uff1a

    \u672c\u4e66\u7684\u4ee3\u7801\u5ba1\u9605\u5de5\u4f5c\u7531 justin\u2010tse, krahets, nuomi1, Reanon, sjinzh \u5b8c\u6210\uff0c\u611f\u8c22\u4ed6\u4eec\u7684\u8f9b\u52e4\u4ed8\u51fa\uff01

    justin-tseJS / TS krahetsJava / Python nuomi1Swift ReanonGo / C sjinzhRust / Zig"},{"location":"chapter_appendix/contribution/","title":"12.2. \u00a0 \u4e00\u8d77\u53c2\u4e0e\u521b\u4f5c","text":"

    \u5f00\u6e90\u7684\u9b45\u529b

    \u7eb8\u8d28\u4e66\u7c4d\u7684\u4e24\u6b21\u5370\u5237\u7684\u95f4\u9694\u65f6\u95f4\u5f80\u5f80\u9700\u8981\u6570\u5e74\uff0c\u5185\u5bb9\u66f4\u65b0\u975e\u5e38\u4e0d\u65b9\u4fbf\u3002\u4f46\u5728\u672c\u5f00\u6e90 HTML \u4e66\u4e2d\uff0c\u5185\u5bb9\u66f4\u8fed\u7684\u65f6\u95f4\u88ab\u7f29\u77ed\u81f3\u6570\u65e5\u751a\u81f3\u51e0\u4e2a\u5c0f\u65f6\u3002

    \u7531\u4e8e\u4f5c\u8005\u6c34\u5e73\u6709\u9650\uff0c\u4e66\u4e2d\u5185\u5bb9\u96be\u514d\u758f\u6f0f\u8c2c\u8bef\uff0c\u8bf7\u60a8\u8c05\u89e3\u3002\u5982\u679c\u53d1\u73b0\u7b14\u8bef\u3001\u65e0\u6548\u94fe\u63a5\u3001\u5185\u5bb9\u7f3a\u5931\u3001\u6587\u5b57\u6b67\u4e49\u3001\u89e3\u91ca\u4e0d\u6e05\u6670\u3001\u884c\u6587\u7ed3\u6784\u4e0d\u5408\u7406\u7b49\u95ee\u9898\uff0c\u8bf7\u60a8\u5e2e\u5fd9\u4fee\u6b63\uff0c\u4ee5\u5e2e\u52a9\u5176\u4ed6\u8bfb\u8005\u83b7\u53d6\u66f4\u4f18\u8d28\u7684\u5b66\u4e60\u5185\u5bb9\u3002\u6240\u6709\u64b0\u7a3f\u4eba\u5c06\u88ab\u5c55\u793a\u5728\u4ed3\u5e93\u4e0e\u7f51\u7ad9\u4e3b\u9875\uff0c\u4ee5\u611f\u8c22\u4ed6\u4eec\u5bf9\u5f00\u6e90\u793e\u533a\u7684\u65e0\u79c1\u5949\u732e\uff01

    "},{"location":"chapter_appendix/contribution/#1221","title":"12.2.1. \u00a0 \u5185\u5bb9\u5fae\u8c03","text":"

    \u6bcf\u4e2a\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u90fd\u6709\u4e00\u4e2a\u300c\u7f16\u8f91\u300d\u56fe\u6807\uff0c\u4f60\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u6587\u5b57\u6216\u4ee3\u7801\uff1a

    1. \u70b9\u51fb\u7f16\u8f91\u6309\u94ae\uff0c\u5982\u679c\u9047\u5230\u63d0\u793a\u201c\u9700\u8981 Fork \u6b64\u4ed3\u5e93\u201d\uff0c\u8bf7\u901a\u8fc7\uff1b
    2. \u4fee\u6539 Markdown \u6e90\u6587\u4ef6\u5185\u5bb9\uff0c\u5e76\u68c0\u67e5\u5185\u5bb9\u6b63\u786e\u6027\uff0c\u5c3d\u91cf\u4fdd\u6301\u6392\u7248\u683c\u5f0f\u7edf\u4e00\uff1b
    3. \u5728\u9875\u9762\u5e95\u90e8\u586b\u5199\u66f4\u6539\u8bf4\u660e\uff0c\u7136\u540e\u5355\u51fb\u201cPropose file change\u201d\u6309\u94ae\uff1b\u9875\u9762\u8df3\u8f6c\u540e\uff0c\u70b9\u51fb\u201cCreate pull request\u201d\u6309\u94ae\u53d1\u8d77\u62c9\u53d6\u8bf7\u6c42\u5373\u53ef\u3002

    Fig. \u9875\u9762\u7f16\u8f91\u6309\u952e

    \u56fe\u7247\u65e0\u6cd5\u76f4\u63a5\u4fee\u6539\uff0c\u9700\u8981\u901a\u8fc7\u65b0\u5efa Issue \u6216\u8bc4\u8bba\u7559\u8a00\u6765\u63cf\u8ff0\u56fe\u7247\u95ee\u9898\uff0c\u6211\u4f1a\u7b2c\u4e00\u65f6\u95f4\u91cd\u65b0\u753b\u56fe\u5e76\u66ff\u6362\u56fe\u7247\u3002

    "},{"location":"chapter_appendix/contribution/#1222","title":"12.2.2. \u00a0 \u5185\u5bb9\u521b\u4f5c","text":"

    \u5982\u679c\u60a8\u60f3\u8981\u53c2\u4e0e\u672c\u5f00\u6e90\u9879\u76ee\uff0c\u5305\u62ec\u7ffb\u8bd1\u4ee3\u7801\u81f3\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u3001\u62d3\u5c55\u6587\u7ae0\u5185\u5bb9\u7b49\uff0c\u90a3\u4e48\u9700\u8981\u5b9e\u65bd Pull Request \u5de5\u4f5c\u6d41\u7a0b\uff1a

    1. \u767b\u5f55 GitHub \uff0c\u5e76 Fork \u672c\u4ed3\u5e93 \u81f3\u4e2a\u4eba\u8d26\u53f7\uff1b
    2. \u8fdb\u5165 Fork \u4ed3\u5e93\u7f51\u9875\uff0c\u4f7f\u7528 git clone \u514b\u9686\u8be5\u4ed3\u5e93\u81f3\u672c\u5730\uff1b
    3. \u5728\u672c\u5730\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c\uff0c\u5e76\u901a\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u6765\u9a8c\u8bc1\u4ee3\u7801\u6b63\u786e\u6027\uff1b
    4. \u5c06\u672c\u5730\u66f4\u6539 Commit \uff0c\u5e76 Push \u81f3\u8fdc\u7a0b\u4ed3\u5e93\uff1b
    5. \u5237\u65b0\u4ed3\u5e93\u7f51\u9875\uff0c\u70b9\u51fb\u201cCreate pull request\u201d\u6309\u94ae\u53d1\u8d77\u62c9\u53d6\u8bf7\u6c42\u5373\u53ef\uff1b
    "},{"location":"chapter_appendix/contribution/#1223-docker","title":"12.2.3. \u00a0 Docker \u90e8\u7f72","text":"

    \u4f60\u53ef\u4ee5\u4f7f\u7528 Docker \u6765\u90e8\u7f72\u672c\u9879\u76ee\u3002\u7a0d\u7b49\u7247\u523b\uff0c\u5373\u53ef\u4f7f\u7528\u6d4f\u89c8\u5668\u6253\u5f00 http://localhost:8000 \u8bbf\u95ee\u672c\u9879\u76ee\u3002

    git clone https://github.com/krahets/hello-algo.git\ncd hello-algo\ndocker-compose up -d\n

    \u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5373\u53ef\u5220\u9664\u90e8\u7f72\u3002

    docker-compose down\n
    "},{"location":"chapter_appendix/installation/","title":"12.1. \u00a0 \u7f16\u7a0b\u73af\u5883\u5b89\u88c5","text":""},{"location":"chapter_appendix/installation/#1211-vscode","title":"12.1.1. \u00a0 \u5b89\u88c5 VSCode","text":"

    \u672c\u4e66\u63a8\u8350\u4f7f\u7528\u5f00\u6e90\u8f7b\u91cf\u7684 VSCode \u4f5c\u4e3a\u672c\u5730 IDE \uff0c\u4e0b\u8f7d\u5e76\u5b89\u88c5 VSCode \u3002

    "},{"location":"chapter_appendix/installation/#1212-java","title":"12.1.2. \u00a0 Java \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 OpenJDK\uff08\u7248\u672c\u9700\u6ee1\u8db3 > JDK 9\uff09\u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 java \uff0c\u5b89\u88c5 Java Extension Pack \u3002
    "},{"location":"chapter_appendix/installation/#1213-cc","title":"12.1.3. \u00a0 C/C++ \u73af\u5883","text":"
    1. Windows \u7cfb\u7edf\u9700\u8981\u5b89\u88c5 MinGW\uff08\u914d\u7f6e\u6559\u7a0b\uff09\uff0cMacOS \u81ea\u5e26 Clang \u65e0\u9700\u5b89\u88c5\u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 c++ \uff0c\u5b89\u88c5 C/C++ Extension Pack \u3002
    "},{"location":"chapter_appendix/installation/#1214-python","title":"12.1.4. \u00a0 Python \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 Miniconda3 \u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 python \uff0c\u5b89\u88c5 Python Extension Pack \u3002
    "},{"location":"chapter_appendix/installation/#1215-go","title":"12.1.5. \u00a0 Go \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 go \u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 go \uff0c\u5b89\u88c5 Go \u3002
    3. \u5feb\u6377\u952e Ctrl + Shift + P \u547c\u51fa\u547d\u4ee4\u680f\uff0c\u8f93\u5165 go \uff0c\u9009\u62e9 Go: Install/Update Tools \uff0c\u5168\u90e8\u52fe\u9009\u5e76\u5b89\u88c5\u5373\u53ef\u3002
    "},{"location":"chapter_appendix/installation/#1216-javascript","title":"12.1.6. \u00a0 JavaScript \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 node.js \u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 javascript \uff0c\u5b89\u88c5 JavaScript (ES6) code snippets \u3002
    "},{"location":"chapter_appendix/installation/#1217-c","title":"12.1.7. \u00a0 C# \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 .Net 6.0 \uff1b
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 c# \uff0c\u5b89\u88c5 c# \u3002
    "},{"location":"chapter_appendix/installation/#1218-swift","title":"12.1.8. \u00a0 Swift \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 Swift\uff1b
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 swift\uff0c\u5b89\u88c5 Swift for Visual Studio Code\u3002
    "},{"location":"chapter_appendix/installation/#1219-rust","title":"12.1.9. \u00a0 Rust \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 Rust\uff1b
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 rust\uff0c\u5b89\u88c5 rust-analyzer\u3002
    "},{"location":"chapter_array_and_linkedlist/array/","title":"4.1. \u00a0 \u6570\u7ec4","text":"

    \u300c\u6570\u7ec4 Array\u300d\u662f\u4e00\u79cd\u5c06 \u76f8\u540c\u7c7b\u578b\u5143\u7d20 \u5b58\u50a8\u5728 \u8fde\u7eed\u5185\u5b58\u7a7a\u95f4 \u7684\u6570\u636e\u7ed3\u6784\uff0c\u5c06\u5143\u7d20\u5728\u6570\u7ec4\u4e2d\u7684\u4f4d\u7f6e\u79f0\u4e3a\u5143\u7d20\u7684\u300c\u7d22\u5f15 Index\u300d\u3002

    Fig. \u6570\u7ec4\u5b9a\u4e49\u4e0e\u5b58\u50a8\u65b9\u5f0f

    Note

    \u89c2\u5bdf\u4e0a\u56fe\uff0c\u6211\u4eec\u53d1\u73b0 \u6570\u7ec4\u9996\u5143\u7d20\u7684\u7d22\u5f15\u4e3a \\(0\\) \u3002\u4f60\u53ef\u80fd\u4f1a\u60f3\uff0c\u8fd9\u5e76\u4e0d\u7b26\u5408\u65e5\u5e38\u4e60\u60ef\uff0c\u9996\u4e2a\u5143\u7d20\u7684\u7d22\u5f15\u4e3a\u4ec0\u4e48\u4e0d\u662f \\(1\\) \u5462\uff0c\u8fd9\u4e0d\u662f\u66f4\u52a0\u81ea\u7136\u5417\uff1f\u6211\u8ba4\u540c\u4f60\u7684\u60f3\u6cd5\uff0c\u4f46\u8bf7\u5148\u8bb0\u4f4f\u8fd9\u4e2a\u8bbe\u5b9a\uff0c\u540e\u9762\u8bb2\u5185\u5b58\u5730\u5740\u8ba1\u7b97\u65f6\uff0c\u6211\u4f1a\u5c1d\u8bd5\u89e3\u7b54\u8fd9\u4e2a\u95ee\u9898\u3002

    \u6570\u7ec4\u521d\u59cb\u5316\u3002\u4e00\u822c\u4f1a\u7528\u5230\u65e0\u521d\u59cb\u503c\u3001\u7ed9\u5b9a\u521d\u59cb\u503c\u4e24\u79cd\u5199\u6cd5\uff0c\u53ef\u6839\u636e\u9700\u6c42\u9009\u53d6\u3002\u5728\u4e0d\u7ed9\u5b9a\u521d\u59cb\u503c\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u6240\u6709\u5143\u7d20\u4f1a\u88ab\u521d\u59cb\u5316\u4e3a\u9ed8\u8ba4\u503c \\(0\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nint[] arr = new int[5]; // { 0, 0, 0, 0, 0 }\nint[] nums = { 1, 3, 2, 5, 4 };\n
    array.cpp
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\n// \u5b58\u50a8\u5728\u6808\u4e0a\nint arr[5];\nint nums[5] { 1, 3, 2, 5, 4 };\n// \u5b58\u50a8\u5728\u5806\u4e0a\nint* arr1 = new int[5];\nint* nums1 = new int[5] { 1, 3, 2, 5, 4 };\n
    array.py
    \"\"\" \u521d\u59cb\u5316\u6570\u7ec4 \"\"\"\narr: List[int] = [0] * 5  # [ 0, 0, 0, 0, 0 ]\nnums: List[int] = [1, 3, 2, 5, 4]  \n
    array.go
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nvar arr [5]int\n// \u5728 Go \u4e2d\uff0c\u6307\u5b9a\u957f\u5ea6\u65f6\uff08[5]int\uff09\u4e3a\u6570\u7ec4\uff0c\u4e0d\u6307\u5b9a\u957f\u5ea6\u65f6\uff08[]int\uff09\u4e3a\u5207\u7247\n// \u7531\u4e8e Go \u7684\u6570\u7ec4\u88ab\u8bbe\u8ba1\u4e3a\u5728\u7f16\u8bd1\u671f\u786e\u5b9a\u957f\u5ea6\uff0c\u56e0\u6b64\u53ea\u80fd\u4f7f\u7528\u5e38\u91cf\u6765\u6307\u5b9a\u957f\u5ea6\n// \u4e3a\u4e86\u65b9\u4fbf\u5b9e\u73b0\u6269\u5bb9 extend() \u65b9\u6cd5\uff0c\u4ee5\u4e0b\u5c06\u5207\u7247\uff08Slice\uff09\u770b\u4f5c\u6570\u7ec4\uff08Array\uff09\nnums := []int{1, 3, 2, 5, 4}\n
    array.js
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nvar arr = new Array(5).fill(0);\nvar nums = [1, 3, 2, 5, 4];\n
    array.ts
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nlet arr: number[] = new Array(5).fill(0);\nlet nums: number[] = [1, 3, 2, 5, 4];\n
    array.c
    int arr[5] = { 0 }; // { 0, 0, 0, 0, 0 }\nint nums[5] = { 1, 3, 2, 5, 4 };\n
    array.cs
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nint[] arr = new int[5]; // { 0, 0, 0, 0, 0 }\nint[] nums = { 1, 3, 2, 5, 4 };\n
    array.swift
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nlet arr = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]\nlet nums = [1, 3, 2, 5, 4]\n
    array.zig
    // \u521d\u59cb\u5316\u6570\u7ec4\nvar arr = [_]i32{0} ** 5; // { 0, 0, 0, 0, 0 }\nvar nums = [_]i32{ 1, 3, 2, 5, 4 };\n
    "},{"location":"chapter_array_and_linkedlist/array/#411","title":"4.1.1. \u00a0 \u6570\u7ec4\u4f18\u70b9","text":"

    \u5728\u6570\u7ec4\u4e2d\u8bbf\u95ee\u5143\u7d20\u975e\u5e38\u9ad8\u6548\u3002\u8fd9\u662f\u56e0\u4e3a\u5728\u6570\u7ec4\u4e2d\uff0c\u8ba1\u7b97\u5143\u7d20\u7684\u5185\u5b58\u5730\u5740\u975e\u5e38\u5bb9\u6613\u3002\u7ed9\u5b9a\u6570\u7ec4\u9996\u4e2a\u5143\u7d20\u7684\u5730\u5740\u3001\u548c\u4e00\u4e2a\u5143\u7d20\u7684\u7d22\u5f15\uff0c\u5229\u7528\u4ee5\u4e0b\u516c\u5f0f\u53ef\u4ee5\u76f4\u63a5\u8ba1\u7b97\u5f97\u5230\u8be5\u5143\u7d20\u7684\u5185\u5b58\u5730\u5740\uff0c\u4ece\u800c\u76f4\u63a5\u8bbf\u95ee\u6b64\u5143\u7d20\u3002

    Fig. \u6570\u7ec4\u5143\u7d20\u7684\u5185\u5b58\u5730\u5740\u8ba1\u7b97

    # \u5143\u7d20\u5185\u5b58\u5730\u5740 = \u6570\u7ec4\u5185\u5b58\u5730\u5740 + \u5143\u7d20\u957f\u5ea6 * \u5143\u7d20\u7d22\u5f15\nelementAddr = firtstElementAddr + elementLength * elementIndex\n

    \u4e3a\u4ec0\u4e48\u6570\u7ec4\u5143\u7d20\u7d22\u5f15\u4ece 0 \u5f00\u59cb\u7f16\u53f7\uff1f \u6839\u636e\u5730\u5740\u8ba1\u7b97\u516c\u5f0f\uff0c\u7d22\u5f15\u672c\u8d28\u4e0a\u8868\u793a\u7684\u662f\u5185\u5b58\u5730\u5740\u504f\u79fb\u91cf\uff0c\u9996\u4e2a\u5143\u7d20\u7684\u5730\u5740\u504f\u79fb\u91cf\u662f \\(0\\) \uff0c\u90a3\u4e48\u7d22\u5f15\u662f \\(0\\) \u4e5f\u5c31\u5f88\u81ea\u7136\u4e86\u3002

    \u8bbf\u95ee\u5143\u7d20\u7684\u9ad8\u6548\u6027\u5e26\u6765\u4e86\u8bb8\u591a\u4fbf\u5229\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u5185\u968f\u673a\u83b7\u53d6\u4e00\u4e2a\u6570\u7ec4\u4e2d\u7684\u5143\u7d20\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nint randomAccess(int[] nums) {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nint randomIndex = ThreadLocalRandom.current().\nnextInt(0, nums.length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nint randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    array.cpp
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nint randomAccess(int* nums, int size) {\n// \u5728\u533a\u95f4 [0, size) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nint randomIndex = rand() % size;\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nint randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    array.py
    def random_access(nums: List[int]) -> int:\n\"\"\" \u968f\u673a\u8bbf\u95ee\u5143\u7d20 \"\"\"\n# \u5728\u533a\u95f4 [0, len(nums)-1] \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nrandom_index = random.randint(0, len(nums) - 1)\n# \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nrandom_num = nums[random_index]\nreturn random_num\n
    array.go
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunc randomAccess(nums []int) (randomNum int) {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nrandomIndex := rand.Intn(len(nums))\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nrandomNum = nums[randomIndex]\nreturn\n}\n
    array.js
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunction randomAccess(nums) {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nconst random_index = Math.floor(Math.random() * nums.length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nconst random_num = nums[random_index];\nreturn random_num;\n}\n
    array.ts
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunction randomAccess(nums: number[]): number {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nconst random_index = Math.floor(Math.random() * nums.length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nconst random_num = nums[random_index];\nreturn random_num;\n}\n
    array.c
    [class]{}-[func]{randomAccess}\n
    array.cs
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nint randomAccess(int[] nums)\n{\nRandom random = new();\n// \u5728\u533a\u95f4 [0, nums.Length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nint randomIndex = random.Next(nums.Length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nint randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    array.swift
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunc randomAccess(nums: [Int]) -> Int {\n// \u5728\u533a\u95f4 [0, nums.count) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nlet randomIndex = nums.indices.randomElement()!\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nlet randomNum = nums[randomIndex]\nreturn randomNum\n}\n
    array.zig
    // \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20\nfn randomAccess(nums: []i32) i32 {\n// \u5728\u533a\u95f4 [0, nums.len) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6574\u6570\nvar randomIndex = std.crypto.random.intRangeLessThan(usize, 0, nums.len);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nvar randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    "},{"location":"chapter_array_and_linkedlist/array/#412","title":"4.1.2. \u00a0 \u6570\u7ec4\u7f3a\u70b9","text":"

    \u6570\u7ec4\u5728\u521d\u59cb\u5316\u540e\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002\u7531\u4e8e\u7cfb\u7edf\u65e0\u6cd5\u4fdd\u8bc1\u6570\u7ec4\u4e4b\u540e\u7684\u5185\u5b58\u7a7a\u95f4\u662f\u53ef\u7528\u7684\uff0c\u56e0\u6b64\u6570\u7ec4\u957f\u5ea6\u65e0\u6cd5\u6269\u5c55\u3002\u800c\u82e5\u5e0c\u671b\u6269\u5bb9\u6570\u7ec4\uff0c\u5219\u9700\u65b0\u5efa\u4e00\u4e2a\u6570\u7ec4\uff0c\u7136\u540e\u628a\u539f\u6570\u7ec4\u5143\u7d20\u4f9d\u6b21\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\uff0c\u5728\u6570\u7ec4\u5f88\u5927\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u662f\u975e\u5e38\u8017\u65f6\u7684\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nint[] extend(int[] nums, int enlarge) {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nint[] res = new int[nums.length + enlarge];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < nums.length; i++) {\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.cpp
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nint* extend(int* nums, int size, int enlarge) {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nint* res = new int[size + enlarge];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < size; i++) {\nres[i] = nums[i];\n}\n// \u91ca\u653e\u5185\u5b58\ndelete[] nums;\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.py
    def extend(nums: List[int], enlarge: int) -> List[int]:\n\"\"\" \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 \"\"\"\n# \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nres = [0] * (len(nums) + enlarge)\n# \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor i in range(len(nums)):\nres[i] = nums[i]\n# \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res\n
    array.go
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nfunc extend(nums []int, enlarge int) []int {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nres := make([]int, len(nums)+enlarge)\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor i, num := range nums {\nres[i] = num\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res\n}\n
    array.js
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\n// \u8bf7\u6ce8\u610f\uff0cJavaScript \u7684 Array \u662f\u52a8\u6001\u6570\u7ec4\uff0c\u53ef\u4ee5\u76f4\u63a5\u6269\u5c55\n// \u4e3a\u4e86\u65b9\u4fbf\u5b66\u4e60\uff0c\u672c\u51fd\u6570\u5c06 Array \u770b\u4f5c\u662f\u957f\u5ea6\u4e0d\u53ef\u53d8\u7684\u6570\u7ec4\nfunction extend(nums, enlarge) {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nconst res = new Array(nums.length + enlarge).fill(0);\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.ts
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\n// \u8bf7\u6ce8\u610f\uff0cTypeScript \u7684 Array \u662f\u52a8\u6001\u6570\u7ec4\uff0c\u53ef\u4ee5\u76f4\u63a5\u6269\u5c55\n// \u4e3a\u4e86\u65b9\u4fbf\u5b66\u4e60\uff0c\u672c\u51fd\u6570\u5c06 Array \u770b\u4f5c\u662f\u957f\u5ea6\u4e0d\u53ef\u53d8\u7684\u6570\u7ec4\nfunction extend(nums: number[], enlarge: number): number[] {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nconst res = new Array(nums.length + enlarge).fill(0);\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.c
    [class]{}-[func]{extend}\n
    array.cs
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nint[] extend(int[] nums, int enlarge)\n{\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nint[] res = new int[nums.Length + enlarge];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < nums.Length; i++)\n{\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.swift
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nfunc extend(nums: [Int], enlarge: Int) -> [Int] {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nvar res = Array(repeating: 0, count: nums.count + enlarge)\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor i in nums.indices {\nres[i] = nums[i]\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res\n}\n
    array.zig
    // \u6269\u5c55\u6570\u7ec4\u957f\u5ea6\nfn extend(mem_allocator: std.mem.Allocator, nums: []i32, enlarge: usize) ![]i32 {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nvar res = try mem_allocator.alloc(i32, nums.len + enlarge);\nstd.mem.set(i32, res, 0);\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nstd.mem.copy(i32, res, nums);\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n

    \u6570\u7ec4\u4e2d\u63d2\u5165\u6216\u5220\u9664\u5143\u7d20\u6548\u7387\u4f4e\u4e0b\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981\u5728\u6570\u7ec4\u4e2d\u95f4\u63d2\u5165\u4e00\u4e2a\u5143\u7d20\uff0c\u7531\u4e8e\u6570\u7ec4\u5143\u7d20\u5728\u5185\u5b58\u4e2d\u662f\u201c\u7d27\u6328\u7740\u7684\u201d\uff0c\u5b83\u4eec\u4e4b\u95f4\u6ca1\u6709\u7a7a\u95f4\u518d\u653e\u4efb\u4f55\u6570\u636e\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u4e0d\u5f97\u4e0d\u5c06\u6b64\u7d22\u5f15\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u7136\u540e\u518d\u628a\u5143\u7d20\u8d4b\u503c\u7ed9\u8be5\u7d22\u5f15\u3002

    Fig. \u6570\u7ec4\u63d2\u5165\u5143\u7d20

    JavaC++PythonGoJavaScriptTypeScriptCC#Swift array.java
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nvoid insert(int[] nums, int num, int index) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int i = nums.length - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.cpp
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nvoid insert(int* nums, int size, int num, int index) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int i = size - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.py
    def insert(nums: List[int], num: int, index: int) -> None:\n\"\"\" \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num \"\"\"\n# \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor i in range(len(nums) - 1, index, -1):\nnums[i] = nums[i - 1]\n# \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num\n
    array.go
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunc insert(nums []int, num int, index int) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor i := len(nums) - 1; i > index; i-- {\nnums[i] = nums[i-1]\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num\n}\n
    array.js
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunction insert(nums, num, index) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let i = nums.length - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.ts
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunction insert(nums: number[], num: number, index: number): void {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let i = nums.length - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.c
    [class]{}-[func]{insert}\n
    array.cs
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nvoid insert(int[] nums, int num, int index)\n{\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int i = nums.Length - 1; i > index; i--)\n{\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.swift
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunc insert(nums: inout [Int], num: Int, index: Int) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor i in sequence(first: nums.count - 1, next: { $0 > index + 1 ? $0 - 1 : nil }) {\nnums[i] = nums[i - 1]\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num\n}\n

    \u5220\u9664\u5143\u7d20\u4e5f\u662f\u7c7b\u4f3c\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8981\u5220\u9664\u7d22\u5f15 \\(i\\) \u5904\u7684\u5143\u7d20\uff0c\u5219\u9700\u8981\u628a\u7d22\u5f15 \\(i\\) \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\u3002\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5220\u9664\u5143\u7d20\u540e\uff0c\u539f\u5148\u672b\u5c3e\u7684\u5143\u7d20\u53d8\u5f97\u201c\u65e0\u610f\u4e49\u201d\u4e86\uff0c\u6211\u4eec\u65e0\u9700\u7279\u610f\u53bb\u4fee\u6539\u5b83\u3002

    Fig. \u6570\u7ec4\u5220\u9664\u5143\u7d20

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nvoid remove(int[] nums, int index) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int i = index; i < nums.length - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.cpp
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nvoid remove(int* nums, int size, int index) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int i = index; i < size - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.py
    def remove(nums: List[int], index: int) -> None:\n\"\"\" \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 \"\"\"\n# \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor i in range(index, len(nums) - 1):\nnums[i] = nums[i + 1]\n
    array.go
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunc remove(nums []int, index int) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor i := index; i < len(nums)-1; i++ {\nnums[i] = nums[i+1]\n}\n}\n
    array.js
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunction remove(nums, index) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let i = index; i < nums.length - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.ts
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunction remove(nums: number[], index: number): void {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let i = index; i < nums.length - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.c
    [class]{}-[func]{removeItem}\n
    array.cs
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nvoid remove(int[] nums, int index)\n{\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int i = index; i < nums.Length - 1; i++)\n{\nnums[i] = nums[i + 1];\n}\n}\n
    array.swift
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunc remove(nums: inout [Int], index: Int) {\nlet count = nums.count\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor i in sequence(first: index, next: { $0 < count - 1 - 1 ? $0 + 1 : nil }) {\nnums[i] = nums[i + 1]\n}\n}\n
    array.zig
    // \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20\nfn remove(nums: []i32, index: usize) void {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nvar i = index;\nwhile (i < nums.len - 1) : (i += 1) {\nnums[i] = nums[i + 1];\n}\n}\n

    \u603b\u7ed3\u6765\u770b\uff0c\u6570\u7ec4\u7684\u63d2\u5165\u4e0e\u5220\u9664\u64cd\u4f5c\u6709\u4ee5\u4e0b\u7f3a\u70b9\uff1a

    • \u65f6\u95f4\u590d\u6742\u5ea6\u9ad8\uff1a\u6570\u7ec4\u7684\u63d2\u5165\u548c\u5220\u9664\u7684\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u5747\u4e3a \\(O(N)\\) \uff0c\u5176\u4e2d \\(N\\) \u4e3a\u6570\u7ec4\u957f\u5ea6\u3002
    • \u4e22\u5931\u5143\u7d20\uff1a\u7531\u4e8e\u6570\u7ec4\u7684\u957f\u5ea6\u4e0d\u53ef\u53d8\uff0c\u56e0\u6b64\u5728\u63d2\u5165\u5143\u7d20\u540e\uff0c\u8d85\u51fa\u6570\u7ec4\u957f\u5ea6\u8303\u56f4\u7684\u5143\u7d20\u4f1a\u88ab\u4e22\u5931\u3002
    • \u5185\u5b58\u6d6a\u8d39\uff1a\u6211\u4eec\u4e00\u822c\u4f1a\u521d\u59cb\u5316\u4e00\u4e2a\u6bd4\u8f83\u957f\u7684\u6570\u7ec4\uff0c\u53ea\u7528\u524d\u9762\u4e00\u90e8\u5206\uff0c\u8fd9\u6837\u5728\u63d2\u5165\u6570\u636e\u65f6\uff0c\u4e22\u5931\u7684\u672b\u5c3e\u5143\u7d20\u90fd\u662f\u6211\u4eec\u4e0d\u5173\u5fc3\u7684\uff0c\u4f46\u8fd9\u6837\u505a\u540c\u65f6\u4e5f\u4f1a\u9020\u6210\u5185\u5b58\u7a7a\u95f4\u7684\u6d6a\u8d39\u3002
    "},{"location":"chapter_array_and_linkedlist/array/#413","title":"4.1.3. \u00a0 \u6570\u7ec4\u5e38\u7528\u64cd\u4f5c","text":"

    \u6570\u7ec4\u904d\u5386\u3002\u4ee5\u4e0b\u4ecb\u7ecd\u4e24\u79cd\u5e38\u7528\u7684\u904d\u5386\u65b9\u6cd5\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u904d\u5386\u6570\u7ec4 */\nvoid traverse(int[] nums) {\nint count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.length; i++) {\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (int num : nums) {\ncount++;\n}\n}\n
    array.cpp
    /* \u904d\u5386\u6570\u7ec4 */\nvoid traverse(int* nums, int size) {\nint count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < size; i++) {\ncount++;\n}\n}\n
    array.py
    def traverse(nums: List[int]) -> None:\n\"\"\" \u904d\u5386\u6570\u7ec4 \"\"\"\ncount = 0\n# \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor i in range(len(nums)):\ncount += 1\n# \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor num in nums:\ncount += 1\n
    array.go
    /* \u904d\u5386\u6570\u7ec4 */\nfunc traverse(nums []int) {\ncount := 0\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor i := 0; i < len(nums); i++ {\ncount++\n}\ncount = 0\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor range nums {\ncount++\n}\n}\n
    array.js
    /* \u904d\u5386\u6570\u7ec4 */\nfunction traverse(nums) {\nlet count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (let num of nums) {\ncount += 1;\n}\n}\n
    array.ts
    /* \u904d\u5386\u6570\u7ec4 */\nfunction traverse(nums: number[]): void {\nlet count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (let num of nums) {\ncount += 1;\n}\n}\n
    array.c
    [class]{}-[func]{traverse}\n
    array.cs
    /* \u904d\u5386\u6570\u7ec4 */\nvoid traverse(int[] nums)\n{\nint count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.Length; i++)\n{\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nforeach (int num in nums)\n{\ncount++;\n}\n}\n
    array.swift
    /* \u904d\u5386\u6570\u7ec4 */\nfunc traverse(nums: [Int]) {\nvar count = 0\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor _ in nums.indices {\ncount += 1\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor _ in nums {\ncount += 1\n}\n}\n
    array.zig
    // \u904d\u5386\u6570\u7ec4\nfn traverse(nums: []i32) void {\nvar count: i32 = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nvar i: i32 = 0;\nwhile (i < nums.len) : (i += 1) {\ncount += 1;\n}\ncount = 0;\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (nums) |_| {\ncount += 1;\n}\n}\n

    \u6570\u7ec4\u67e5\u627e\u3002\u901a\u8fc7\u904d\u5386\u6570\u7ec4\uff0c\u67e5\u627e\u6570\u7ec4\u5185\u7684\u6307\u5b9a\u5143\u7d20\uff0c\u5e76\u8f93\u51fa\u5bf9\u5e94\u7d22\u5f15\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nint find(int[] nums, int target) {\nfor (int i = 0; i < nums.length; i++) {\nif (nums[i] == target)\nreturn i;\n}\nreturn -1;\n}\n
    array.cpp
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nint find(int* nums, int size, int target) {\nfor (int i = 0; i < size; i++) {\nif (nums[i] == target)\nreturn i;\n}\nreturn -1;\n}\n
    array.py
    def find(nums: List[int], target: int) -> int:\n\"\"\" \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 \"\"\"\nfor i in range(len(nums)):\nif nums[i] == target:\nreturn i\nreturn -1\n
    array.go
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunc find(nums []int, target int) (index int) {\nindex = -1\nfor i := 0; i < len(nums); i++ {\nif nums[i] == target {\nindex = i\nbreak\n}\n}\nreturn\n}\n
    array.js
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunction find(nums, target) {\nfor (let i = 0; i < nums.length; i++) {\nif (nums[i] == target) return i;\n}\nreturn -1;\n}\n
    array.ts
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunction find(nums: number[], target: number): number {\nfor (let i = 0; i < nums.length; i++) {\nif (nums[i] === target) {\nreturn i;\n}\n}\nreturn -1;\n}\n
    array.c
    [class]{}-[func]{find}\n
    array.cs
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nint find(int[] nums, int target)\n{\nfor (int i = 0; i < nums.Length; i++)\n{\nif (nums[i] == target)\nreturn i;\n}\nreturn -1;\n}\n
    array.swift
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunc find(nums: [Int], target: Int) -> Int {\nfor i in nums.indices {\nif nums[i] == target {\nreturn i\n}\n}\nreturn -1\n}\n
    array.zig
    // \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20\nfn find(nums: []i32, target: i32) i32 {\nfor (nums) |num, i| {\nif (num == target) return @intCast(i32, i);\n}\nreturn -1;\n}\n
    "},{"location":"chapter_array_and_linkedlist/array/#414","title":"4.1.4. \u00a0 \u6570\u7ec4\u5178\u578b\u5e94\u7528","text":"

    \u968f\u673a\u8bbf\u95ee\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981\u968f\u673a\u62bd\u53d6\u4e00\u4e9b\u6837\u672c\uff0c\u90a3\u4e48\u53ef\u4ee5\u7528\u6570\u7ec4\u5b58\u50a8\uff0c\u5e76\u751f\u6210\u4e00\u4e2a\u968f\u673a\u5e8f\u5217\uff0c\u6839\u636e\u7d22\u5f15\u5b9e\u73b0\u6837\u672c\u7684\u968f\u673a\u62bd\u53d6\u3002

    \u4e8c\u5206\u67e5\u627e\u3002\u4f8b\u5982\u524d\u6587\u67e5\u5b57\u5178\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b57\u5178\u4e2d\u7684\u6240\u6709\u5b57\u6309\u7167\u62fc\u97f3\u987a\u5e8f\u5b58\u50a8\u5728\u6570\u7ec4\u4e2d\uff0c\u7136\u540e\u4f7f\u7528\u4e0e\u65e5\u5e38\u67e5\u7eb8\u8d28\u5b57\u5178\u76f8\u540c\u7684\u201c\u7ffb\u5f00\u4e2d\u95f4\uff0c\u6392\u9664\u4e00\u534a\u201d\u7684\u65b9\u5f0f\uff0c\u6765\u5b9e\u73b0\u4e00\u4e2a\u67e5\u7535\u5b50\u5b57\u5178\u7684\u7b97\u6cd5\u3002

    \u6df1\u5ea6\u5b66\u4e60\u3002\u795e\u7ecf\u7f51\u7edc\u4e2d\u5927\u91cf\u4f7f\u7528\u4e86\u5411\u91cf\u3001\u77e9\u9635\u3001\u5f20\u91cf\u4e4b\u95f4\u7684\u7ebf\u6027\u4ee3\u6570\u8fd0\u7b97\uff0c\u8fd9\u4e9b\u6570\u636e\u90fd\u662f\u4ee5\u6570\u7ec4\u7684\u5f62\u5f0f\u6784\u5efa\u7684\u3002\u6570\u7ec4\u662f\u795e\u7ecf\u7f51\u7edc\u7f16\u7a0b\u4e2d\u6700\u5e38\u4f7f\u7528\u7684\u6570\u636e\u7ed3\u6784\u3002

    "},{"location":"chapter_array_and_linkedlist/linked_list/","title":"4.2. \u00a0 \u94fe\u8868","text":"

    \u5f15\u8a00

    \u5185\u5b58\u7a7a\u95f4\u662f\u6240\u6709\u7a0b\u5e8f\u7684\u516c\u5171\u8d44\u6e90\uff0c\u6392\u9664\u5df2\u5360\u7528\u7684\u5185\u5b58\uff0c\u7a7a\u95f2\u5185\u5b58\u5f80\u5f80\u662f\u6563\u843d\u5728\u5185\u5b58\u5404\u5904\u7684\u3002\u6211\u4eec\u77e5\u9053\uff0c\u5b58\u50a8\u6570\u7ec4\u9700\u8981\u5185\u5b58\u7a7a\u95f4\u8fde\u7eed\uff0c\u5f53\u6211\u4eec\u9700\u8981\u7533\u8bf7\u4e00\u4e2a\u5f88\u5927\u7684\u6570\u7ec4\u65f6\uff0c\u7cfb\u7edf\u4e0d\u4e00\u5b9a\u5b58\u5728\u8fd9\u4e48\u5927\u7684\u8fde\u7eed\u5185\u5b58\u7a7a\u95f4\u3002\u800c\u94fe\u8868\u5219\u66f4\u52a0\u7075\u6d3b\uff0c\u4e0d\u9700\u8981\u5185\u5b58\u662f\u8fde\u7eed\u7684\uff0c\u53ea\u8981\u5269\u4f59\u5185\u5b58\u7a7a\u95f4\u5927\u5c0f\u591f\u7528\u5373\u53ef\u3002

    \u300c\u94fe\u8868 Linked List\u300d\u662f\u4e00\u79cd\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5143\u7d20\u90fd\u662f\u5355\u72ec\u7684\u5bf9\u8c61\uff0c\u5404\u4e2a\u5143\u7d20\uff08\u4e00\u822c\u79f0\u4e3a\u7ed3\u70b9\uff09\u4e4b\u95f4\u901a\u8fc7\u6307\u9488\u8fde\u63a5\u3002\u7531\u4e8e\u7ed3\u70b9\u4e2d\u8bb0\u5f55\u4e86\u8fde\u63a5\u5173\u7cfb\uff0c\u56e0\u6b64\u94fe\u8868\u7684\u5b58\u50a8\u65b9\u5f0f\u76f8\u6bd4\u4e8e\u6570\u7ec4\u66f4\u52a0\u7075\u6d3b\uff0c\u7cfb\u7edf\u4e0d\u5fc5\u4fdd\u8bc1\u5185\u5b58\u5730\u5740\u7684\u8fde\u7eed\u6027\u3002

    \u94fe\u8868\u7684\u300c\u7ed3\u70b9 Node\u300d\u5305\u542b\u4e24\u9879\u6570\u636e\uff0c\u4e00\u662f\u7ed3\u70b9\u300c\u503c Value\u300d\uff0c\u4e8c\u662f\u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u300c\u6307\u9488 Pointer\u300d\uff08\u6216\u79f0\u300c\u5f15\u7528 Reference\u300d\uff09\u3002

    Fig. \u94fe\u8868\u5b9a\u4e49\u4e0e\u5b58\u50a8\u65b9\u5f0f

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nint val;        // \u7ed3\u70b9\u503c\nListNode next;  // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) { val = x; }  // \u6784\u9020\u51fd\u6570\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct ListNode {\nint val;         // \u7ed3\u70b9\u503c\nListNode *next;  // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) : val(x), next(nullptr) {}  // \u6784\u9020\u51fd\u6570\n};\n
    \"\"\" \u94fe\u8868\u7ed3\u70b9\u7c7b \"\"\" \nclass ListNode:\ndef __init__(self, val: int):\nself.val: int = val                  # \u7ed3\u70b9\u503c\nself.next: Optional[ListNode] = None # \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n
    /* \u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\ntype ListNode struct {\nVal  int       // \u7ed3\u70b9\u503c\nNext *ListNode // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n// NewListNode \u6784\u9020\u51fd\u6570\uff0c\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u94fe\u8868\nfunc NewListNode(val int) *ListNode {\nreturn &ListNode{\nVal:  val,\nNext: nil,\n}\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval;\nnext;\nconstructor(val, next) {\nthis.val = (val === undefined ? 0 : val);       // \u7ed3\u70b9\u503c\nthis.next = (next === undefined ? null : next); // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval: number;\nnext: ListNode | null;\nconstructor(val?: number, next?: ListNode | null) {\nthis.val = val === undefined ? 0 : val;        // \u7ed3\u70b9\u503c\nthis.next = next === undefined ? null : next;  // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct ListNode {\nint val;               // \u7ed3\u70b9\u503c\nstruct ListNode *next; // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n};\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode\n{\nint val;         // \u7ed3\u70b9\u503c\nListNode next;   // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\nListNode(int x) => val = x;  //\u6784\u9020\u51fd\u6570\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar next: ListNode? // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\ninit(x: Int) { // \u6784\u9020\u51fd\u6570\nval = x\n}\n}\n
    // \u94fe\u8868\u7ed3\u70b9\u7c7b\npub fn ListNode(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nval: T = 0, // \u7ed3\u70b9\u503c\nnext: ?*Self = null, // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n// \u6784\u9020\u51fd\u6570\npub fn init(self: *Self, x: i32) void {\nself.val = x;\nself.next = null;\n}\n};\n}\n

    \u5c3e\u7ed3\u70b9\u6307\u5411\u4ec0\u4e48\uff1f \u6211\u4eec\u4e00\u822c\u5c06\u94fe\u8868\u7684\u6700\u540e\u4e00\u4e2a\u7ed3\u70b9\u79f0\u4e3a\u300c\u5c3e\u7ed3\u70b9\u300d\uff0c\u5176\u6307\u5411\u7684\u662f\u300c\u7a7a\u300d\uff0c\u5728 Java / C++ / Python \u4e2d\u5206\u522b\u8bb0\u4e3a null / nullptr / None \u3002\u5728\u4e0d\u5f15\u8d77\u6b67\u4e49\u4e0b\uff0c\u672c\u4e66\u90fd\u4f7f\u7528 null \u6765\u8868\u793a\u7a7a\u3002

    \u94fe\u8868\u521d\u59cb\u5316\u65b9\u6cd5\u3002\u5efa\u7acb\u94fe\u8868\u5206\u4e3a\u4e24\u6b65\uff0c\u7b2c\u4e00\u6b65\u662f\u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\u5bf9\u8c61\uff0c\u7b2c\u4e8c\u6b65\u662f\u6784\u5efa\u5f15\u7528\u6307\u5411\u5173\u7cfb\u3002\u5b8c\u6210\u540e\uff0c\u5373\u53ef\u4ee5\u4ece\u94fe\u8868\u7684\u9996\u4e2a\u7ed3\u70b9\uff08\u5373\u5934\u7ed3\u70b9\uff09\u51fa\u53d1\uff0c\u8bbf\u95ee\u5176\u4f59\u6240\u6709\u7684\u7ed3\u70b9\u3002

    Tip

    \u6211\u4eec\u901a\u5e38\u5c06\u5934\u7ed3\u70b9\u5f53\u4f5c\u94fe\u8868\u7684\u4ee3\u79f0\uff0c\u4f8b\u5982\u5934\u7ed3\u70b9 head \u548c\u94fe\u8868 head \u5b9e\u9645\u4e0a\u662f\u540c\u4e49\u7684\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nListNode n0 = new ListNode(1);\nListNode n1 = new ListNode(3);\nListNode n2 = new ListNode(2);\nListNode n3 = new ListNode(5);\nListNode n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.cpp
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nListNode* n0 = new ListNode(1);\nListNode* n1 = new ListNode(3);\nListNode* n2 = new ListNode(2);\nListNode* n3 = new ListNode(5);\nListNode* n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0->next = n1;\nn1->next = n2;\nn2->next = n3;\nn3->next = n4;\n
    linked_list.py
    \"\"\" \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 \"\"\"\n# \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nn0 = ListNode(1)\nn1 = ListNode(3)\nn2 = ListNode(2)\nn3 = ListNode(5)\nn4 = ListNode(4)\n# \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1\nn1.next = n2\nn2.next = n3\nn3.next = n4\n
    linked_list.go
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nn0 := NewListNode(1)\nn1 := NewListNode(3)\nn2 := NewListNode(2)\nn3 := NewListNode(5)\nn4 := NewListNode(4)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.Next = n1\nn1.Next = n2\nn2.Next = n3\nn3.Next = n4\n
    linked_list.js
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nconst n0 = new ListNode(1);\nconst n1 = new ListNode(3);\nconst n2 = new ListNode(2);\nconst n3 = new ListNode(5);\nconst n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.ts
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nconst n0 = new ListNode(1);\nconst n1 = new ListNode(3);\nconst n2 = new ListNode(2);\nconst n3 = new ListNode(5);\nconst n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.c
    \n
    linked_list.cs
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nListNode n0 = new ListNode(1);\nListNode n1 = new ListNode(3);\nListNode n2 = new ListNode(2);\nListNode n3 = new ListNode(5);\nListNode n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.swift
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nlet n0 = ListNode(x: 1)\nlet n1 = ListNode(x: 3)\nlet n2 = ListNode(x: 2)\nlet n3 = ListNode(x: 5)\nlet n4 = ListNode(x: 4)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1\nn1.next = n2\nn2.next = n3\nn3.next = n4\n
    linked_list.zig
    // \u521d\u59cb\u5316\u94fe\u8868\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nvar n0 = inc.ListNode(i32){.val = 1};\nvar n1 = inc.ListNode(i32){.val = 3};\nvar n2 = inc.ListNode(i32){.val = 2};\nvar n3 = inc.ListNode(i32){.val = 5};\nvar n4 = inc.ListNode(i32){.val = 4};\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = &n1;\nn1.next = &n2;\nn2.next = &n3;\nn3.next = &n4;\n
    "},{"location":"chapter_array_and_linkedlist/linked_list/#421","title":"4.2.1. \u00a0 \u94fe\u8868\u4f18\u70b9","text":"

    \u5728\u94fe\u8868\u4e2d\uff0c\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u7684\u64cd\u4f5c\u6548\u7387\u9ad8\u3002\u6bd4\u5982\uff0c\u5982\u679c\u6211\u4eec\u60f3\u5728\u94fe\u8868\u4e2d\u95f4\u7684\u4e24\u4e2a\u7ed3\u70b9 A , B \u4e4b\u95f4\u63d2\u5165\u4e00\u4e2a\u65b0\u7ed3\u70b9 P \uff0c\u6211\u4eec\u53ea\u9700\u8981\u6539\u53d8\u4e24\u4e2a\u7ed3\u70b9\u6307\u9488\u5373\u53ef\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u76f8\u6bd4\u6570\u7ec4\u7684\u63d2\u5165\u64cd\u4f5c\u9ad8\u6548\u5f88\u591a\u3002

    Fig. \u94fe\u8868\u63d2\u5165\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nvoid insert(ListNode n0, ListNode P) {\nListNode n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.cpp
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nvoid insert(ListNode* n0, ListNode* P) {\nListNode* n1 = n0->next;\nP->next = n1;\nn0->next = P;\n}\n
    linked_list.py
    def insert(n0: ListNode, P: ListNode) -> None:\n\"\"\" \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P \"\"\"\nn1 = n0.next\nP.next = n1\nn0.next = P\n
    linked_list.go
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunc insertNode(n0 *ListNode, P *ListNode) {\nn1 := n0.Next\nP.Next = n1\nn0.Next = P\n}\n
    linked_list.js
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunction insert(n0, P) {\nconst n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.ts
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunction insert(n0: ListNode, P: ListNode): void {\nconst n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.c
    [class]{}-[func]{insertNode}\n
    linked_list.cs
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nvoid insert(ListNode n0, ListNode P)\n{\nListNode? n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.swift
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunc insert(n0: ListNode, P: ListNode) {\nlet n1 = n0.next\nP.next = n1\nn0.next = P\n}\n
    linked_list.zig
    // \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P\nfn insert(n0: ?*inc.ListNode(i32), P: ?*inc.ListNode(i32)) void {\nvar n1 = n0.?.next;\nP.?.next = n1;\nn0.?.next = P;\n}\n

    \u5728\u94fe\u8868\u4e2d\u5220\u9664\u7ed3\u70b9\u4e5f\u5f88\u65b9\u4fbf\uff0c\u53ea\u9700\u8981\u6539\u53d8\u4e00\u4e2a\u7ed3\u70b9\u6307\u9488\u5373\u53ef\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u867d\u7136\u5728\u5b8c\u6210\u5220\u9664\u540e\u7ed3\u70b9 P \u4ecd\u7136\u6307\u5411 n1 \uff0c\u4f46\u5b9e\u9645\u4e0a P \u5df2\u7ecf\u4e0d\u5c5e\u4e8e\u6b64\u94fe\u8868\u4e86\uff0c\u56e0\u4e3a\u904d\u5386\u6b64\u94fe\u8868\u662f\u65e0\u6cd5\u8bbf\u95ee\u5230 P \u7684\u3002

    Fig. \u94fe\u8868\u5220\u9664\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nvoid remove(ListNode n0) {\nif (n0.next == null)\nreturn;\n// n0 -> P -> n1\nListNode P = n0.next;\nListNode n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.cpp
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nvoid remove(ListNode* n0) {\nif (n0->next == nullptr)\nreturn;\n// n0 -> P -> n1\nListNode* P = n0->next;\nListNode* n1 = P->next;\nn0->next = n1;\n// \u91ca\u653e\u5185\u5b58\ndelete P;\n}\n
    linked_list.py
    def remove(n0: ListNode) -> None:\n\"\"\" \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 \"\"\"\nif not n0.next:\nreturn\n# n0 -> P -> n1\nP = n0.next\nn1 = P.next\nn0.next = n1\n
    linked_list.go
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc removeNode(n0 *ListNode) {\nif n0.Next == nil {\nreturn\n}\n// n0 -> P -> n1\nP := n0.Next\nn1 := P.Next\nn0.Next = n1\n}\n
    linked_list.js
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction remove(n0) {\nif (!n0.next)\nreturn;\n// n0 -> P -> n1\nconst P = n0.next;\nconst n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.ts
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction remove(n0: ListNode): void {\nif (!n0.next) {\nreturn;\n}\n// n0 -> P -> n1\nconst P = n0.next;\nconst n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.c
    [class]{}-[func]{removeNode}\n
    linked_list.cs
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nvoid remove(ListNode n0)\n{\nif (n0.next == null)\nreturn;\n// n0 -> P -> n1\nListNode P = n0.next;\nListNode? n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.swift
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc remove(n0: ListNode) {\nif n0.next == nil {\nreturn\n}\n// n0 -> P -> n1\nlet P = n0.next\nlet n1 = P?.next\nn0.next = n1\nP?.next = nil\n}\n
    linked_list.zig
    // \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9\nfn remove(n0: ?*inc.ListNode(i32)) void {\nif (n0.?.next == null) return;\n// n0 -> P -> n1\nvar P = n0.?.next;\nvar n1 = P.?.next;\nn0.?.next = n1;\n}\n
    "},{"location":"chapter_array_and_linkedlist/linked_list/#422","title":"4.2.2. \u00a0 \u94fe\u8868\u7f3a\u70b9","text":"

    \u94fe\u8868\u8bbf\u95ee\u7ed3\u70b9\u6548\u7387\u4f4e\u3002\u4e0a\u8282\u63d0\u5230\uff0c\u6570\u7ec4\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u4e0b\u8bbf\u95ee\u4efb\u610f\u5143\u7d20\uff0c\u4f46\u94fe\u8868\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee\u4efb\u610f\u7ed3\u70b9\u3002\u8fd9\u662f\u56e0\u4e3a\u8ba1\u7b97\u673a\u9700\u8981\u4ece\u5934\u7ed3\u70b9\u51fa\u53d1\uff0c\u4e00\u4e2a\u4e00\u4e2a\u5730\u5411\u540e\u904d\u5386\u5230\u76ee\u6807\u7ed3\u70b9\u3002\u4f8b\u5982\uff0c\u5018\u82e5\u60f3\u8981\u8bbf\u95ee\u94fe\u8868\u7d22\u5f15\u4e3a index \uff08\u5373\u7b2c index + 1 \u4e2a\uff09\u7684\u7ed3\u70b9\uff0c\u90a3\u4e48\u9700\u8981 index \u6b21\u8bbf\u95ee\u64cd\u4f5c\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nListNode access(ListNode head, int index) {\nfor (int i = 0; i < index; i++) {\nif (head == null)\nreturn null;\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.cpp
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nListNode* access(ListNode* head, int index) {\nfor (int i = 0; i < index; i++) {\nif (head == nullptr)\nreturn nullptr;\nhead = head->next;\n}\nreturn head;\n}\n
    linked_list.py
    def access(head: ListNode, index: int) -> Optional[ListNode]:\n\"\"\" \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 \"\"\"\nfor _ in range(index):\nif not head:\nreturn None\nhead = head.next\nreturn head\n
    linked_list.go
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunc access(head *ListNode, index int) *ListNode {\nfor i := 0; i < index; i++ {\nif head == nil {\nreturn nil\n}\nhead = head.Next\n}\nreturn head\n}\n
    linked_list.js
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunction access(head, index) {\nfor (let i = 0; i < index; i++) {\nif (!head) {\nreturn null;\n}\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.ts
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunction access(head: ListNode | null, index: number): ListNode | null {\nfor (let i = 0; i < index; i++) {\nif (!head) {\nreturn null;\n}\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.c
    [class]{}-[func]{access}\n
    linked_list.cs
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nListNode? access(ListNode head, int index)\n{\nfor (int i = 0; i < index; i++)\n{\nif (head == null)\nreturn null;\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.swift
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunc access(head: ListNode, index: Int) -> ListNode? {\nvar head: ListNode? = head\nfor _ in 0 ..< index {\nif head == nil {\nreturn nil\n}\nhead = head?.next\n}\nreturn head\n}\n
    linked_list.zig
    // \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9\nfn access(node: ?*inc.ListNode(i32), index: i32) ?*inc.ListNode(i32) {\nvar head = node;\nvar i: i32 = 0;\nwhile (i < index) : (i += 1) {\nhead = head.?.next;\nif (head == null) return null;\n}\nreturn head;\n}\n

    \u94fe\u8868\u7684\u5185\u5b58\u5360\u7528\u591a\u3002\u94fe\u8868\u4ee5\u7ed3\u70b9\u4e3a\u5355\u4f4d\uff0c\u6bcf\u4e2a\u7ed3\u70b9\u9664\u4e86\u4fdd\u5b58\u503c\u5916\uff0c\u8fd8\u9700\u989d\u5916\u4fdd\u5b58\u6307\u9488\uff08\u5f15\u7528\uff09\u3002\u8fd9\u610f\u5473\u7740\u540c\u6837\u6570\u636e\u91cf\u4e0b\uff0c\u94fe\u8868\u6bd4\u6570\u7ec4\u9700\u8981\u5360\u7528\u66f4\u591a\u5185\u5b58\u7a7a\u95f4\u3002

    "},{"location":"chapter_array_and_linkedlist/linked_list/#423","title":"4.2.3. \u00a0 \u94fe\u8868\u5e38\u7528\u64cd\u4f5c","text":"

    \u904d\u5386\u94fe\u8868\u67e5\u627e\u3002\u904d\u5386\u94fe\u8868\uff0c\u67e5\u627e\u94fe\u8868\u5185\u503c\u4e3a target \u7684\u7ed3\u70b9\uff0c\u8f93\u51fa\u7ed3\u70b9\u5728\u94fe\u8868\u4e2d\u7684\u7d22\u5f15\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nint find(ListNode head, int target) {\nint index = 0;\nwhile (head != null) {\nif (head.val == target)\nreturn index;\nhead = head.next;\nindex++;\n}\nreturn -1;\n}\n
    linked_list.cpp
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nint find(ListNode* head, int target) {\nint index = 0;\nwhile (head != nullptr) {\nif (head->val == target)\nreturn index;\nhead = head->next;\nindex++;\n}\nreturn -1;\n}\n
    linked_list.py
    def find(head: ListNode, target: int) -> int:\n\"\"\" \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 \"\"\"\nindex = 0\nwhile head:\nif head.val == target:\nreturn index\nhead = head.next\nindex += 1\nreturn -1\n
    linked_list.go
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc findNode(head *ListNode, target int) int {\nindex := 0\nfor head != nil {\nif head.Val == target {\nreturn index\n}\nhead = head.Next\nindex++\n}\nreturn -1\n}\n
    linked_list.js
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction find(head, target) {\nlet index = 0;\nwhile (head !== null) {\nif (head.val === target) {\nreturn index;\n}\nhead = head.next;\nindex += 1;\n}\nreturn -1;\n}\n
    linked_list.ts
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction find(head: ListNode | null, target: number): number {\nlet index = 0;\nwhile (head !== null) {\nif (head.val === target) {\nreturn index;\n}\nhead = head.next;\nindex += 1;\n}\nreturn -1;\n}\n
    linked_list.c
    [class]{}-[func]{findNode}\n
    linked_list.cs
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nint find(ListNode head, int target)\n{\nint index = 0;\nwhile (head != null)\n{\nif (head.val == target)\nreturn index;\nhead = head.next;\nindex++;\n}\nreturn -1;\n}\n
    linked_list.swift
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc find(head: ListNode, target: Int) -> Int {\nvar head: ListNode? = head\nvar index = 0\nwhile head != nil {\nif head?.val == target {\nreturn index\n}\nhead = head?.next\nindex += 1\n}\nreturn -1\n}\n
    linked_list.zig
    // \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9\nfn find(node: ?*inc.ListNode(i32), target: i32) i32 {\nvar head = node;\nvar index: i32 = 0;\nwhile (head != null) {\nif (head.?.val == target) return index;\nhead = head.?.next;\nindex += 1;\n}\nreturn -1;\n}\n
    "},{"location":"chapter_array_and_linkedlist/linked_list/#424","title":"4.2.4. \u00a0 \u5e38\u89c1\u94fe\u8868\u7c7b\u578b","text":"

    \u5355\u5411\u94fe\u8868\u3002\u5373\u4e0a\u8ff0\u4ecb\u7ecd\u7684\u666e\u901a\u94fe\u8868\u3002\u5355\u5411\u94fe\u8868\u7684\u7ed3\u70b9\u6709\u300c\u503c\u300d\u548c\u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u300c\u6307\u9488\uff08\u5f15\u7528\uff09\u300d\u4e24\u9879\u6570\u636e\u3002\u6211\u4eec\u5c06\u9996\u4e2a\u7ed3\u70b9\u79f0\u4e3a\u5934\u7ed3\u70b9\uff0c\u5c3e\u7ed3\u70b9\u6307\u5411 null \u3002

    \u73af\u5f62\u94fe\u8868\u3002\u5982\u679c\u6211\u4eec\u4ee4\u5355\u5411\u94fe\u8868\u7684\u5c3e\u7ed3\u70b9\u6307\u5411\u5934\u7ed3\u70b9\uff08\u5373\u9996\u5c3e\u76f8\u63a5\uff09\uff0c\u5219\u5f97\u5230\u4e00\u4e2a\u73af\u5f62\u94fe\u8868\u3002\u5728\u73af\u5f62\u94fe\u8868\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u4efb\u610f\u7ed3\u70b9\u770b\u4f5c\u662f\u5934\u7ed3\u70b9\u3002

    \u53cc\u5411\u94fe\u8868\u3002\u5355\u5411\u94fe\u8868\u4ec5\u8bb0\u5f55\u4e86\u4e00\u4e2a\u65b9\u5411\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\uff0c\u5728\u53cc\u5411\u94fe\u8868\u7684\u7ed3\u70b9\u5b9a\u4e49\u4e2d\uff0c\u540c\u65f6\u6709\u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\uff08\u540e\u7ee7\u7ed3\u70b9\uff09\u548c\u4e0a\u4e00\u7ed3\u70b9\uff08\u524d\u9a71\u7ed3\u70b9\uff09\u7684\u300c\u6307\u9488\uff08\u5f15\u7528\uff09\u300d\u3002\u53cc\u5411\u94fe\u8868\u76f8\u5bf9\u4e8e\u5355\u5411\u94fe\u8868\u66f4\u52a0\u7075\u6d3b\uff0c\u5373\u53ef\u4ee5\u671d\u4e24\u4e2a\u65b9\u5411\u904d\u5386\u94fe\u8868\uff0c\u4f46\u4e5f\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nint val;        // \u7ed3\u70b9\u503c\nListNode next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) { val = x; }  // \u6784\u9020\u51fd\u6570\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct ListNode {\nint val;         // \u7ed3\u70b9\u503c\nListNode *next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode *prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) : val(x), next(nullptr), prev(nullptr) {}  // \u6784\u9020\u51fd\u6570\n};\n
    \"\"\" \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b \"\"\" \nclass ListNode:\ndef __init__(self, val: int):\nself.val: int = val                   # \u7ed3\u70b9\u503c\nself.next: Optional[ListNode] = None  # \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nself.prev: Optional[ListNode] = None  # \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\ntype DoublyListNode struct {\nVal  int             // \u7ed3\u70b9\u503c\nNext *DoublyListNode // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nPrev *DoublyListNode // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n// NewDoublyListNode \u521d\u59cb\u5316\nfunc NewDoublyListNode(val int) *DoublyListNode {\nreturn &DoublyListNode{\nVal:  val,\nNext: nil,\nPrev: nil,\n}\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval;\nnext;\nprev;\nconstructor(val, next) {\nthis.val = val  ===  undefined ? 0 : val;        // \u7ed3\u70b9\u503c\nthis.next = next  ===  undefined ? null : next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nthis.prev = prev  ===  undefined ? null : prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval: number;\nnext: ListNode | null;\nprev: ListNode | null;\nconstructor(val?: number, next?: ListNode | null, prev?: ListNode | null) {\nthis.val = val  ===  undefined ? 0 : val;        // \u7ed3\u70b9\u503c\nthis.next = next  ===  undefined ? null : next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nthis.prev = prev  ===  undefined ? null : prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n}\n
    \n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nint val;        // \u7ed3\u70b9\u503c\nListNode next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) => val = x;  // \u6784\u9020\u51fd\u6570\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar next: ListNode? // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nvar prev: ListNode? // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\ninit(x: Int) { // \u6784\u9020\u51fd\u6570\nval = x\n}\n}\n
    // \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b\npub fn ListNode(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nval: T = 0, // \u7ed3\u70b9\u503c\nnext: ?*Self = null, // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nprev: ?*Self = null, // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n// \u6784\u9020\u51fd\u6570\npub fn init(self: *Self, x: i32) void {\nself.val = x;\nself.next = null;\nself.prev = null;\n}\n};\n}\n

    Fig. \u5e38\u89c1\u94fe\u8868\u79cd\u7c7b

    "},{"location":"chapter_array_and_linkedlist/list/","title":"4.3. \u00a0 \u5217\u8868","text":"

    \u7531\u4e8e\u957f\u5ea6\u4e0d\u53ef\u53d8\uff0c\u6570\u7ec4\u7684\u5b9e\u7528\u6027\u5927\u5927\u964d\u4f4e\u3002\u5728\u5f88\u591a\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e8b\u5148\u5e76\u4e0d\u77e5\u9053\u4f1a\u8f93\u5165\u591a\u5c11\u6570\u636e\uff0c\u8fd9\u5c31\u4e3a\u6570\u7ec4\u957f\u5ea6\u7684\u9009\u62e9\u5e26\u6765\u4e86\u5f88\u5927\u56f0\u96be\u3002\u957f\u5ea6\u9009\u5c0f\u4e86\uff0c\u9700\u8981\u5728\u6dfb\u52a0\u6570\u636e\u4e2d\u9891\u7e41\u5730\u6269\u5bb9\u6570\u7ec4\uff1b\u957f\u5ea6\u9009\u5927\u4e86\uff0c\u53c8\u9020\u6210\u5185\u5b58\u7a7a\u95f4\u7684\u6d6a\u8d39\u3002

    \u4e3a\u4e86\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u8bde\u751f\u4e86\u4e00\u79cd\u88ab\u79f0\u4e3a\u300c\u5217\u8868 List\u300d\u7684\u6570\u636e\u7ed3\u6784\u3002\u5217\u8868\u53ef\u4ee5\u88ab\u7406\u89e3\u4e3a\u957f\u5ea6\u53ef\u53d8\u7684\u6570\u7ec4\uff0c\u56e0\u6b64\u4e5f\u5e38\u88ab\u79f0\u4e3a\u300c\u52a8\u6001\u6570\u7ec4 Dynamic Array\u300d\u3002\u5217\u8868\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\uff0c\u7ee7\u627f\u4e86\u6570\u7ec4\u7684\u4f18\u70b9\uff0c\u540c\u65f6\u8fd8\u53ef\u4ee5\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u5b9e\u65f6\u6269\u5bb9\u3002\u5728\u5217\u8868\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u81ea\u7531\u5730\u6dfb\u52a0\u5143\u7d20\uff0c\u800c\u4e0d\u7528\u62c5\u5fc3\u8d85\u8fc7\u5bb9\u91cf\u9650\u5236\u3002

    "},{"location":"chapter_array_and_linkedlist/list/#431","title":"4.3.1. \u00a0 \u5217\u8868\u5e38\u7528\u64cd\u4f5c","text":"

    \u521d\u59cb\u5316\u5217\u8868\u3002\u6211\u4eec\u901a\u5e38\u4f1a\u4f7f\u7528\u5230\u201c\u65e0\u521d\u59cb\u503c\u201d\u548c\u201c\u6709\u521d\u59cb\u503c\u201d\u7684\u4e24\u79cd\u521d\u59cb\u5316\u65b9\u6cd5\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nList<Integer> list1 = new ArrayList<>();\n// \u6709\u521d\u59cb\u503c\uff08\u6ce8\u610f\u6570\u7ec4\u7684\u5143\u7d20\u7c7b\u578b\u9700\u4e3a int[] \u7684\u5305\u88c5\u7c7b Integer[]\uff09\nInteger[] numbers = new Integer[] { 1, 3, 2, 5, 4 };\nList<Integer> list = new ArrayList<>(Arrays.asList(numbers));\n
    list.cpp
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u9700\u6ce8\u610f\uff0cC++ \u4e2d vector \u5373\u662f\u672c\u6587\u63cf\u8ff0\u7684 list\n// \u65e0\u521d\u59cb\u503c\nvector<int> list1;\n// \u6709\u521d\u59cb\u503c\nvector<int> list = { 1, 3, 2, 5, 4 };\n
    list.py
    \"\"\" \u521d\u59cb\u5316\u5217\u8868 \"\"\"\n# \u65e0\u521d\u59cb\u503c\nlist1: List[int] = []\n# \u6709\u521d\u59cb\u503c\nlist: List[int] = [1, 3, 2, 5, 4]\n
    list_test.go
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nlist1 := []int\n// \u6709\u521d\u59cb\u503c\nlist := []int{1, 3, 2, 5, 4}\n
    list.js
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nconst list1 = [];\n// \u6709\u521d\u59cb\u503c\nconst list = [1, 3, 2, 5, 4];\n
    list.ts
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nconst list1: number[] = [];\n// \u6709\u521d\u59cb\u503c\nconst list: number[] = [1, 3, 2, 5, 4];\n
    list.c
    \n
    list.cs
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nList<int> list1 = new ();\n// \u6709\u521d\u59cb\u503c\nint[] numbers = new int[] { 1, 3, 2, 5, 4 };\nList<int> list = numbers.ToList();\n
    list.swift
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nlet list1: [Int] = []\n// \u6709\u521d\u59cb\u503c\nvar list = [1, 3, 2, 5, 4]\n
    list.zig
    // \u521d\u59cb\u5316\u5217\u8868\nvar list = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer list.deinit();\ntry list.appendSlice(&[_]i32{ 1, 3, 2, 5, 4 });\n

    \u8bbf\u95ee\u4e0e\u66f4\u65b0\u5143\u7d20\u3002\u5217\u8868\u7684\u5e95\u5c42\u6570\u636e\u7ed3\u6784\u662f\u6570\u7ec4\uff0c\u56e0\u6b64\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u5185\u8bbf\u95ee\u4e0e\u66f4\u65b0\u5143\u7d20\uff0c\u6548\u7387\u5f88\u9ad8\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u8bbf\u95ee\u5143\u7d20 */\nint num = list.get(1);  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist.set(1, 0);  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.cpp
    /* \u8bbf\u95ee\u5143\u7d20 */\nint num = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.py
    \"\"\" \u8bbf\u95ee\u5143\u7d20 \"\"\"\nnum: int = list[1]  # \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n\"\"\" \u66f4\u65b0\u5143\u7d20 \"\"\"\nlist[1] = 0    # \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list_test.go
    /* \u8bbf\u95ee\u5143\u7d20 */\nnum := list[1]  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0     // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.js
    /* \u8bbf\u95ee\u5143\u7d20 */\nconst num = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.ts
    /* \u8bbf\u95ee\u5143\u7d20 */\nconst num: number = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.c
    \n
    list.cs
    /* \u8bbf\u95ee\u5143\u7d20 */\nint num = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.swift
    /* \u8bbf\u95ee\u5143\u7d20 */\nlet num = list[1] // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0 // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.zig
    // \u8bbf\u95ee\u5143\u7d20\nvar num = list.items[1]; // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n// \u66f4\u65b0\u5143\u7d20\nlist.items[1] = 0; // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0  \n

    \u5728\u5217\u8868\u4e2d\u6dfb\u52a0\u3001\u63d2\u5165\u3001\u5220\u9664\u5143\u7d20\u3002\u76f8\u5bf9\u4e8e\u6570\u7ec4\uff0c\u5217\u8868\u53ef\u4ee5\u81ea\u7531\u5730\u6dfb\u52a0\u4e0e\u5220\u9664\u5143\u7d20\u3002\u5728\u5217\u8868\u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u4f46\u662f\u63d2\u5165\u4e0e\u5220\u9664\u5143\u7d20\u7684\u6548\u7387\u4ecd\u4e0e\u6570\u7ec4\u4e00\u6837\u4f4e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.clear();\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.add(1);\nlist.add(3);\nlist.add(2);\nlist.add(5);\nlist.add(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.add(3, 6);  // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist.remove(3);  // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.cpp
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.clear();\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.push_back(1);\nlist.push_back(3);\nlist.push_back(2);\nlist.push_back(5);\nlist.push_back(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.insert(list.begin() + 3, 6);  // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist.erase(list.begin() + 3);      // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.py
    \"\"\" \u6e05\u7a7a\u5217\u8868 \"\"\"\nlist.clear()\n\"\"\" \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 \"\"\"\nlist.append(1)\nlist.append(3)\nlist.append(2)\nlist.append(5)\nlist.append(4)\n\"\"\" \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 \"\"\"\nlist.insert(3, 6)  # \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n\"\"\" \u5220\u9664\u5143\u7d20 \"\"\"\nlist.pop(3)        # \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list_test.go
    /* \u6e05\u7a7a\u5217\u8868 */\nlist = nil\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist = append(list, 1)\nlist = append(list, 3)\nlist = append(list, 2)\nlist = append(list, 5)\nlist = append(list, 4)\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist = append(list[:3], append([]int{6}, list[3:]...)...) // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist = append(list[:3], list[4:]...) // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.js
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.length = 0;\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.push(1);\nlist.push(3);\nlist.push(2);\nlist.push(5);\nlist.push(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.splice(3, 0, 6);\n/* \u5220\u9664\u5143\u7d20 */\nlist.splice(3, 1);\n
    list.ts
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.length = 0;\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.push(1);\nlist.push(3);\nlist.push(2);\nlist.push(5);\nlist.push(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.splice(3, 0, 6);\n/* \u5220\u9664\u5143\u7d20 */\nlist.splice(3, 1);\n
    list.c
    \n
    list.cs
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.Clear();\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.Add(1);\nlist.Add(3);\nlist.Add(2);\nlist.Add(5);\nlist.Add(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.Insert(3, 6);\n/* \u5220\u9664\u5143\u7d20 */\nlist.RemoveAt(3);\n
    list.swift
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.removeAll()\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.append(1)\nlist.append(3)\nlist.append(2)\nlist.append(5)\nlist.append(4)\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.insert(6, at: 3) // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist.remove(at: 3) // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.zig
    // \u6e05\u7a7a\u5217\u8868\nlist.clearRetainingCapacity();\n// \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\ntry list.append(1);\ntry list.append(3);\ntry list.append(2);\ntry list.append(5);\ntry list.append(4);\n// \u4e2d\u95f4\u63d2\u5165\u5143\u7d20\ntry list.insert(3, 6); // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n// \u5220\u9664\u5143\u7d20\n_ = list.orderedRemove(3); // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n

    \u904d\u5386\u5217\u8868\u3002\u4e0e\u6570\u7ec4\u4e00\u6837\uff0c\u5217\u8868\u53ef\u4ee5\u4f7f\u7528\u7d22\u5f15\u904d\u5386\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528 for-each \u76f4\u63a5\u904d\u5386\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nint count = 0;\nfor (int i = 0; i < list.size(); i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (int n : list) {\ncount++;\n}\n
    list.cpp
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nint count = 0;\nfor (int i = 0; i < list.size(); i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (int n : list) {\ncount++;\n}\n
    list.py
    \"\"\" \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 \"\"\"\ncount: int = 0\nfor i in range(len(list)):\ncount += 1\n\"\"\" \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 \"\"\"\ncount: int = 0\nfor n in list:\ncount += 1\n
    list_test.go
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\ncount := 0\nfor i := 0; i < len(list); i++ {\ncount++\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0\nfor range list {\ncount++\n}\n
    list.js
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nlet count = 0;\nfor (let i = 0; i < list.length; i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (const n of list) {\ncount++;\n}\n
    list.ts
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nlet count = 0;\nfor (let i = 0; i < list.length; i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (const n of list) {\ncount++;\n}\n
    list.c
    \n
    list.cs
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nint count = 0;\nfor (int i = 0; i < list.Count(); i++)\n{\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nforeach (int n in list)\n{\ncount++;\n}\n
    list.swift
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nvar count = 0\nfor _ in list.indices {\ncount += 1\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0\nfor _ in list {\ncount += 1\n}\n
    list.zig
    // \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868\nvar count: i32 = 0;\nvar i: i32 = 0;\nwhile (i < list.items.len) : (i += 1) {\ncount += 1;\n}\n// \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20\ncount = 0;\nfor (list.items) |_| {\ncount += 1;\n}\n

    \u62fc\u63a5\u4e24\u4e2a\u5217\u8868\u3002\u518d\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\u8868 list1 \uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5176\u4e2d\u4e00\u4e2a\u5217\u8868\u62fc\u63a5\u5230\u53e6\u4e00\u4e2a\u7684\u5c3e\u90e8\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nList<Integer> list1 = new ArrayList<>(Arrays.asList(new Integer[] { 6, 8, 7, 10, 9 }));\nlist.addAll(list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.cpp
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nvector<int> list1 = { 6, 8, 7, 10, 9 };\n// \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\nlist.insert(list.end(), list1.begin(), list1.end());\n
    list.py
    \"\"\" \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 \"\"\"\nlist1: List[int] = [6, 8, 7, 10, 9]\nlist += list1  # \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list_test.go
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nlist1 := []int{6, 8, 7, 10, 9}\nlist = append(list, list1...)  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.js
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nconst list1 = [6, 8, 7, 10, 9];\nlist.push(...list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.ts
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nconst list1: number[] = [6, 8, 7, 10, 9];\nlist.push(...list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.c
    \n
    list.cs
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nList<int> list1 = new() { 6, 8, 7, 10, 9 };\nlist.AddRange(list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.swift
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nlet list1 = [6, 8, 7, 10, 9]\nlist.append(contentsOf: list1) // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.zig
    // \u62fc\u63a5\u4e24\u4e2a\u5217\u8868\nvar list1 = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer list1.deinit();\ntry list1.appendSlice(&[_]i32{ 6, 8, 7, 10, 9 });\ntry list.insertSlice(list.items.len, list1.items); // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n

    \u6392\u5e8f\u5217\u8868\u3002\u6392\u5e8f\u4e5f\u662f\u5e38\u7528\u7684\u65b9\u6cd5\u4e4b\u4e00\uff0c\u5b8c\u6210\u5217\u8868\u6392\u5e8f\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4f7f\u7528\u5728\u6570\u7ec4\u7c7b\u7b97\u6cd5\u9898\u4e2d\u7ecf\u5e38\u8003\u5bdf\u7684\u300c\u4e8c\u5206\u67e5\u627e\u300d\u548c\u300c\u53cc\u6307\u9488\u300d\u7b97\u6cd5\u4e86\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u6392\u5e8f\u5217\u8868 */\nCollections.sort(list);  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.cpp
    /* \u6392\u5e8f\u5217\u8868 */\nsort(list.begin(), list.end());  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.py
    \"\"\" \u6392\u5e8f\u5217\u8868 \"\"\"\nlist.sort()  # \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list_test.go
    /* \u6392\u5e8f\u5217\u8868 */\nsort.Ints(list)  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.js
    /* \u6392\u5e8f\u5217\u8868 */  list.sort((a, b) => a - b);  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.ts
    /* \u6392\u5e8f\u5217\u8868 */\nlist.sort((a, b) => a - b);  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.c
    \n
    list.cs
    /* \u6392\u5e8f\u5217\u8868 */\nlist.Sort(); // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.swift
    /* \u6392\u5e8f\u5217\u8868 */\nlist.sort() // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.zig
    // \u6392\u5e8f\u5217\u8868\nstd.sort.sort(i32, list.items, {}, comptime std.sort.asc(i32));\n
    "},{"location":"chapter_array_and_linkedlist/list/#432","title":"4.3.2. \u00a0 \u5217\u8868\u7b80\u6613\u5b9e\u73b0 *","text":"

    \u4e3a\u4e86\u5e2e\u52a9\u52a0\u6df1\u5bf9\u5217\u8868\u7684\u7406\u89e3\uff0c\u6211\u4eec\u5728\u6b64\u63d0\u4f9b\u4e00\u4e2a\u5217\u8868\u7684\u7b80\u6613\u7248\u672c\u7684\u5b9e\u73b0\u3002\u9700\u8981\u5173\u6ce8\u4e09\u4e2a\u6838\u5fc3\u70b9\uff1a

    • \u521d\u59cb\u5bb9\u91cf\uff1a\u9009\u53d6\u4e00\u4e2a\u5408\u7406\u7684\u6570\u7ec4\u7684\u521d\u59cb\u5bb9\u91cf initialCapacity \u3002\u5728\u672c\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u9009\u62e9 10 \u4f5c\u4e3a\u521d\u59cb\u5bb9\u91cf\u3002
    • \u6570\u91cf\u8bb0\u5f55\uff1a\u9700\u8981\u58f0\u660e\u4e00\u4e2a\u53d8\u91cf size \uff0c\u7528\u6765\u8bb0\u5f55\u5217\u8868\u5f53\u524d\u6709\u591a\u5c11\u4e2a\u5143\u7d20\uff0c\u5e76\u968f\u7740\u5143\u7d20\u63d2\u5165\u4e0e\u5220\u9664\u5b9e\u65f6\u66f4\u65b0\u3002\u6839\u636e\u6b64\u53d8\u91cf\uff0c\u53ef\u4ee5\u5b9a\u4f4d\u5217\u8868\u7684\u5c3e\u90e8\uff0c\u4ee5\u53ca\u5224\u65ad\u662f\u5426\u9700\u8981\u6269\u5bb9\u3002
    • \u6269\u5bb9\u673a\u5236\uff1a\u63d2\u5165\u5143\u7d20\u6709\u53ef\u80fd\u5bfc\u81f4\u8d85\u51fa\u5217\u8868\u5bb9\u91cf\uff0c\u6b64\u65f6\u9700\u8981\u6269\u5bb9\u5217\u8868\uff0c\u65b9\u6cd5\u662f\u5efa\u7acb\u4e00\u4e2a\u66f4\u5927\u7684\u6570\u7ec4\u6765\u66ff\u6362\u5f53\u524d\u6570\u7ec4\u3002\u9700\u8981\u7ed9\u5b9a\u4e00\u4e2a\u6269\u5bb9\u500d\u6570 extendRatio \uff0c\u5728\u672c\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u89c4\u5b9a\u6bcf\u6b21\u5c06\u6570\u7ec4\u6269\u5bb9\u81f3\u4e4b\u524d\u7684 2 \u500d\u3002

    \u672c\u793a\u4f8b\u662f\u4e3a\u4e86\u5e2e\u52a9\u8bfb\u8005\u5bf9\u5982\u4f55\u5b9e\u73b0\u5217\u8868\u4ea7\u751f\u76f4\u89c2\u7684\u8ba4\u8bc6\u3002\u5b9e\u9645\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u5217\u8868\u7684\u5b9e\u73b0\u8fdc\u6bd4\u4ee5\u4e0b\u4ee3\u7801\u590d\u6742\u4e14\u6807\u51c6\uff0c\u611f\u5174\u8da3\u7684\u8bfb\u8005\u53ef\u4ee5\u67e5\u9605\u6e90\u7801\u5b66\u4e60\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_list.java
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate int[] nums;           // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate int capacity = 10;    // \u5217\u8868\u5bb9\u91cf\nprivate int size = 0;         // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate int extendRatio = 2;  // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\npublic MyList() {\nnums = new int[capacity];\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\npublic int size() {\nreturn size;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\npublic int capacity() {\nreturn capacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\npublic int get(int index) {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\npublic void set(int index, int num) {\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\nnums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\npublic void add(int num) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size == capacity())\nextendCapacity();\nnums[size] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nsize++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\npublic void insert(int index, int num) {\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size == capacity())\nextendCapacity();\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int j = size - 1; j >= index; j--) {\nnums[j + 1] = nums[j];\n}\nnums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nsize++;\n}\n/* \u5220\u9664\u5143\u7d20 */\npublic int remove(int index) {\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\nint num = nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int j = index; j < size - 1; j++) {\nnums[j] = nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nsize--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\npublic void extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nnums = Arrays.copyOf(nums, capacity() * extendRatio);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\ncapacity = nums.length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\npublic int[] toArray() {\nint size = size();\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] nums = new int[size];\nfor (int i = 0; i < size; i++) {\nnums[i] = get(i);\n}\nreturn nums;\n}\n}\n
    my_list.cpp
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate:\nint* nums;                // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nint numsCapacity = 10;    // \u5217\u8868\u5bb9\u91cf\nint numsSize = 0;         // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nint extendRatio = 2;      // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nMyList() {\nnums = new int[numsCapacity];\n}\n/* \u6790\u6784\u65b9\u6cd5 */\n~MyList() {\ndelete[] nums;\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\nint size() {\nreturn numsSize;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\nint capacity() {\nreturn numsCapacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nint get(int index) {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nvoid set(int index, int num) {\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\nnums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nvoid add(int num) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size() == capacity())\nextendCapacity();\nnums[size()] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nvoid insert(int index, int num) {\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size() == capacity())\nextendCapacity();\n// \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int j = size() - 1; j >= index; j--) {\nnums[j + 1] = nums[j];\n}\nnums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u5220\u9664\u5143\u7d20 */\nint remove(int index) {\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\nint num = nums[index];\n// \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int j = index; j < size() - 1; j++) {\nnums[j] = nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\nvoid extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size * extendRatio \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nint newCapacity = capacity() * extendRatio;\nint* tmp = nums;\nnums = new int[newCapacity];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < size(); i++) {\nnums[i] = tmp[i];\n}\n// \u91ca\u653e\u5185\u5b58\ndelete[] tmp;\nnumsCapacity = newCapacity;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a Vector \u7528\u4e8e\u6253\u5370 */\nvector<int> toVector() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvector<int> vec(size());\nfor (int i = 0; i < size(); i++) {\nvec[i] = nums[i];\n}\nreturn vec;\n}\n};\n
    my_list.py
    class MyList:\n\"\"\" \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__capacity: int = 10                       # \u5217\u8868\u5bb9\u91cf\nself.__nums: List[int] = [0] * self.__capacity  # \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nself.__size: int = 0                            # \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nself.__extend_ratio: int = 2                    # \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09 \"\"\"\nreturn self.__size\ndef capacity(self) -> int:\n\"\"\" \u83b7\u53d6\u5217\u8868\u5bb9\u91cf \"\"\"\nreturn self.__capacity\ndef get(self, index: int) -> int:\n\"\"\" \u8bbf\u95ee\u5143\u7d20 \"\"\"\n# \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\nreturn self.__nums[index]\ndef set(self, num: int, index: int) -> None:\n\"\"\" \u66f4\u65b0\u5143\u7d20 \"\"\"\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\nself.__nums[index] = num\ndef add(self, num: int) -> None:\n\"\"\" \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 \"\"\"\n# \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif self.size() == self.capacity():\nself.extend_capacity()\nself.__nums[self.__size] = num\nself.__size += 1\ndef insert(self, num: int, index: int) -> None:\n\"\"\" \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 \"\"\"\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\n# \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif self.__size == self.capacity():\nself.extend_capacity()\n# \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor j in range(self.__size - 1, index - 1, -1):\nself.__nums[j + 1] = self.__nums[j]\nself.__nums[index] = num\n# \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.__size += 1\ndef remove(self, index: int) -> int:\n\"\"\" \u5220\u9664\u5143\u7d20 \"\"\"\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\nnum = self.__nums[index]\n# \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor j in range(index, self.__size - 1):\nself.__nums[j] = self.__nums[j + 1]\n# \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.__size -= 1\n# \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num\ndef extend_capacity(self) -> None:\n\"\"\" \u5217\u8868\u6269\u5bb9 \"\"\"\n# \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a self.__size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nself.__nums = self.__nums + [0] * self.capacity() * (self.__extend_ratio - 1)\n# \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nself.__capacity = len(self.__nums)\ndef to_array(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u6709\u6548\u957f\u5ea6\u7684\u5217\u8868 \"\"\"\nreturn self.__nums[:self.__size]\n
    my_list.go
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\ntype myList struct {\nnumsCapacity int\nnums         []int\nnumsSize     int\nextendRatio  int\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nfunc newMyList() *myList {\nreturn &myList{\nnumsCapacity: 10,              // \u5217\u8868\u5bb9\u91cf\nnums:         make([]int, 10), // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nnumsSize:     0,               // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nextendRatio:  2,               // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n}\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09 */\nfunc (l *myList) size() int {\nreturn l.numsSize\n}\n/*  \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\nfunc (l *myList) capacity() int {\nreturn l.numsCapacity\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nfunc (l *myList) get(index int) int {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nreturn l.nums[index]\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nfunc (l *myList) set(num, index int) {\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nl.nums[index] = num\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nfunc (l *myList) add(num int) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif l.numsSize == l.numsCapacity {\nl.extendCapacity()\n}\nl.nums[l.numsSize] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nl.numsSize++\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nfunc (l *myList) insert(num, index int) {\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif l.numsSize == l.numsCapacity {\nl.extendCapacity()\n}\n// \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor j := l.numsSize - 1; j >= index; j-- {\nl.nums[j+1] = l.nums[j]\n}\nl.nums[index] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nl.numsSize++\n}\n/* \u5220\u9664\u5143\u7d20 */\nfunc (l *myList) remove(index int) int {\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nnum := l.nums[index]\n// \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor j := index; j < l.numsSize-1; j++ {\nl.nums[j] = l.nums[j+1]\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nl.numsSize--\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num\n}\n/* \u5217\u8868\u6269\u5bb9 */\nfunc (l *myList) extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a self.__size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nl.nums = append(l.nums, make([]int, l.numsCapacity*(l.extendRatio-1))...)\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nl.numsCapacity = len(l.nums)\n}\n/* \u8fd4\u56de\u6709\u6548\u957f\u5ea6\u7684\u5217\u8868 */\nfunc (l *myList) toArray() []int {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nreturn l.nums[:l.numsSize]\n}\n
    my_list.js
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\n#nums = new Array(); // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\n#capacity = 10; // \u5217\u8868\u5bb9\u91cf\n#size = 0; // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\n#extendRatio = 2; // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor() {\nthis.#nums = new Array(this.#capacity);\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\nsize() {\nreturn this.#size;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\ncapacity() {\nreturn this.#capacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nget(index) {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nreturn this.#nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nset(index, num) {\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nthis.#nums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nadd(num) {\n// \u5982\u679c\u957f\u5ea6\u7b49\u4e8e\u5bb9\u91cf\uff0c\u5219\u9700\u8981\u6269\u5bb9\nif (this.#size === this.#capacity) {\nthis.extendCapacity();\n}\n// \u5c06\u65b0\u5143\u7d20\u6dfb\u52a0\u5230\u5217\u8868\u5c3e\u90e8\nthis.#nums[this.#size] = num;\nthis.#size++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\ninsert(index, num) {\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (this.#size === this.#capacity) {\nthis.extendCapacity();\n}\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let j = this.#size - 1; j >= index; j--) {\nthis.#nums[j + 1] = this.#nums[j];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis.#nums[index] = num;\nthis.#size++;\n}\n/* \u5220\u9664\u5143\u7d20 */\nremove(index) {\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nlet num = this.#nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let j = index; j < this.#size - 1; j++) {\nthis.#nums[j] = this.#nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis.#size--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\nextendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nthis.#nums = this.#nums.concat(\nnew Array(this.capacity() * (this.#extendRatio - 1))\n);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nthis.#capacity = this.#nums.length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\ntoArray() {\nlet size = this.size();\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst nums = new Array(size);\nfor (let i = 0; i < size; i++) {\nnums[i] = this.get(i);\n}\nreturn nums;\n}\n}\n
    my_list.ts
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate nums: Array<number>; // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate _capacity: number = 10; // \u5217\u8868\u5bb9\u91cf\nprivate _size: number = 0; // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate extendRatio: number = 2; // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor() {\nthis.nums = new Array(this._capacity);\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\npublic size(): number {\nreturn this._size;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\npublic capacity(): number {\nreturn this._capacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\npublic get(index: number): number {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nreturn this.nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\npublic set(index: number, num: number): void {\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nthis.nums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\npublic add(num: number): void {\n// \u5982\u679c\u957f\u5ea6\u7b49\u4e8e\u5bb9\u91cf\uff0c\u5219\u9700\u8981\u6269\u5bb9\nif (this._size === this._capacity)\nthis.extendCapacity();\n// \u5c06\u65b0\u5143\u7d20\u6dfb\u52a0\u5230\u5217\u8868\u5c3e\u90e8\nthis.nums[this._size] = num;\nthis._size++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\npublic insert(index: number, num: number): void {\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (this._size === this._capacity) {\nthis.extendCapacity();\n}\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let j = this._size - 1; j >= index; j--) {\nthis.nums[j + 1] = this.nums[j];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis.nums[index] = num;\nthis._size++;\n}\n/* \u5220\u9664\u5143\u7d20 */\npublic remove(index: number): number {\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nlet num = this.nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let j = index; j < this._size - 1; j++) {\nthis.nums[j] = this.nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis._size--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\npublic extendCapacity(): void {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nthis.nums = this.nums.concat(\nnew Array(this.capacity() * (this.extendRatio - 1))\n);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nthis._capacity = this.nums.length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\npublic toArray(): number[] {\nlet size = this.size();\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst nums = new Array(size);\nfor (let i = 0; i < size; i++) {\nnums[i] = this.get(i);\n}\nreturn nums;\n}\n}\n
    my_list.c
    [class]{myList}-[func]{}\n
    my_list.cs
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList\n{\nprivate int[] nums;           // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate int numsCapacity = 10;    // \u5217\u8868\u5bb9\u91cf\nprivate int numsSize = 0;         // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate int extendRatio = 2;  // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\npublic MyList()\n{\nnums = new int[numsCapacity];\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\npublic int size()\n{\nreturn numsSize;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\npublic int capacity()\n{\nreturn numsCapacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\npublic int get(int index)\n{\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\npublic void set(int index, int num)\n{\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\nnums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\npublic void add(int num)\n{\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (numsSize == numsCapacity)\nextendCapacity();\nnums[numsSize] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\npublic void insert(int index, int num)\n{\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (numsSize == numsCapacity)\nextendCapacity();\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int j = numsSize - 1; j >= index; j--)\n{\nnums[j + 1] = nums[j];\n}\nnums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u5220\u9664\u5143\u7d20 */\npublic int remove(int index)\n{\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\nint num = nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int j = index; j < numsSize - 1; j++)\n{\nnums[j] = nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\npublic void extendCapacity()\n{\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a numsCapacity * extendRatio \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nSystem.Array.Resize(ref nums, numsCapacity * extendRatio);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nnumsCapacity = nums.Length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\npublic int[] toArray()\n{\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] nums = new int[numsSize];\nfor (int i = 0; i < numsSize; i++)\n{\nnums[i] = get(i);\n}\nreturn nums;\n}\n}\n
    my_list.swift
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate var nums: [Int] // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate var _capacity = 10 // \u5217\u8868\u5bb9\u91cf\nprivate var _size = 0 // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate let extendRatio = 2 // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\ninit() {\nnums = Array(repeating: 0, count: _capacity)\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\nfunc size() -> Int {\n_size\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\nfunc capacity() -> Int {\n_capacity\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nfunc get(index: Int) -> Int {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u9519\u8bef\uff0c\u4e0b\u540c\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nreturn nums[index]\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nfunc set(index: Int, num: Int) {\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nnums[index] = num\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nfunc add(num: Int) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif _size == _capacity {\nextendCapacity()\n}\nnums[_size] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\n_size += 1\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nfunc insert(index: Int, num: Int) {\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif _size == _capacity {\nextendCapacity()\n}\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor j in sequence(first: _size - 1, next: { $0 >= index + 1 ? $0 - 1 : nil }) {\nnums[j + 1] = nums[j]\n}\nnums[index] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\n_size += 1\n}\n/* \u5220\u9664\u5143\u7d20 */\n@discardableResult\nfunc remove(index: Int) -> Int {\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nlet num = nums[index]\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor j in index ..< (_size - 1) {\nnums[j] = nums[j + 1]\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\n_size -= 1\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num\n}\n/* \u5217\u8868\u6269\u5bb9 */\nfunc extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nnums = nums + Array(repeating: 0, count: _capacity * (extendRatio - 1))\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\n_capacity = nums.count\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\nfunc toArray() -> [Int] {\nvar nums = Array(repeating: 0, count: _size)\nfor i in 0 ..< _size {\nnums[i] = get(index: i)\n}\nreturn nums\n}\n}\n
    my_list.zig
    // \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0\nfn MyList(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nnums: []T = undefined,                        // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nnumsCapacity: usize = 10,                     // \u5217\u8868\u5bb9\u91cf\nnumSize: usize = 0,                           // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nextendRatio: usize = 2,                       // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined, // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u5217\u8868\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.nums = try self.mem_allocator.alloc(T, self.numsCapacity);\nstd.mem.set(T, self.nums, @as(T, 0));\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\npub fn size(self: *Self) usize {\nreturn self.numSize;\n}\n// \u83b7\u53d6\u5217\u8868\u5bb9\u91cf\npub fn capacity(self: *Self) usize {\nreturn self.numsCapacity;\n}\n// \u8bbf\u95ee\u5143\u7d20\npub fn get(self: *Self, index: usize) T {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn self.nums[index];\n}  // \u66f4\u65b0\u5143\u7d20\npub fn set(self: *Self, index: usize, num: T) void {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\nself.nums[index] = num;\n}  // \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\npub fn add(self: *Self, num: T) !void {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (self.size() == self.capacity()) try self.extendCapacity();\nself.nums[self.size()] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.numSize += 1;\n}  // \u4e2d\u95f4\u63d2\u5165\u5143\u7d20\npub fn insert(self: *Self, index: usize, num: T) !void {\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (self.size() == self.capacity()) try self.extendCapacity();\n// \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nvar j = self.size() - 1;\nwhile (j >= index) : (j -= 1) {\nself.nums[j + 1] = self.nums[j];\n}\nself.nums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.numSize += 1;\n}\n// \u5220\u9664\u5143\u7d20\npub fn remove(self: *Self, index: usize) T {\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\nvar num = self.nums[index];\n// \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nvar j = index;\nwhile (j < self.size() - 1) : (j += 1) {\nself.nums[j] = self.nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.numSize -= 1;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n// \u5217\u8868\u6269\u5bb9\npub fn extendCapacity(self: *Self) !void {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size * extendRatio \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nvar newCapacity = self.capacity() * self.extendRatio;\nvar extend = try self.mem_allocator.alloc(T, newCapacity);\nstd.mem.set(T, extend, @as(T, 0));\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nstd.mem.copy(T, extend, self.nums);\nself.nums = extend;\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nself.numsCapacity = newCapacity;\n}\n// \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar nums = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, nums, @as(T, 0));\nfor (nums) |*num, i| {\nnum.* = self.get(i);\n}\nreturn nums;\n}\n};\n}\n
    "},{"location":"chapter_array_and_linkedlist/summary/","title":"4.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u6570\u7ec4\u548c\u94fe\u8868\u662f\u4e24\u79cd\u57fa\u672c\u6570\u636e\u7ed3\u6784\uff0c\u4ee3\u8868\u4e86\u6570\u636e\u5728\u8ba1\u7b97\u673a\u5185\u5b58\u4e2d\u7684\u4e24\u79cd\u5b58\u50a8\u65b9\u5f0f\uff0c\u5373\u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8\u548c\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8\u3002\u4e24\u8005\u7684\u4f18\u70b9\u4e0e\u7f3a\u70b9\u5448\u73b0\u51fa\u6b64\u6d88\u5f7c\u957f\u7684\u5173\u7cfb\u3002
    • \u6570\u7ec4\u652f\u6301\u968f\u673a\u8bbf\u95ee\u3001\u5185\u5b58\u7a7a\u95f4\u5360\u7528\u5c0f\uff1b\u4f46\u63d2\u5165\u4e0e\u5220\u9664\u5143\u7d20\u6548\u7387\u4f4e\uff0c\u4e14\u521d\u59cb\u5316\u540e\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002
    • \u94fe\u8868\u53ef\u901a\u8fc7\u66f4\u6539\u6307\u9488\u5b9e\u73b0\u9ad8\u6548\u7684\u7ed3\u70b9\u63d2\u5165\u4e0e\u5220\u9664\uff0c\u5e76\u4e14\u53ef\u4ee5\u7075\u6d3b\u5730\u4fee\u6539\u957f\u5ea6\uff1b\u4f46\u7ed3\u70b9\u8bbf\u95ee\u6548\u7387\u4f4e\u3001\u5360\u7528\u5185\u5b58\u591a\u3002\u5e38\u89c1\u7684\u94fe\u8868\u7c7b\u578b\u6709\u5355\u5411\u94fe\u8868\u3001\u5faa\u73af\u94fe\u8868\u3001\u53cc\u5411\u94fe\u8868\u3002
    • \u5217\u8868\u53c8\u79f0\u52a8\u6001\u6570\u7ec4\uff0c\u662f\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u4e00\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4fdd\u5b58\u4e86\u6570\u7ec4\u7684\u4f18\u52bf\uff0c\u4e14\u53ef\u4ee5\u7075\u6d3b\u6539\u53d8\u957f\u5ea6\u3002\u5217\u8868\u7684\u51fa\u73b0\u5927\u5927\u63d0\u5347\u4e86\u6570\u7ec4\u7684\u5b9e\u7528\u6027\uff0c\u4f46\u526f\u4f5c\u7528\u662f\u4f1a\u9020\u6210\u90e8\u5206\u5185\u5b58\u7a7a\u95f4\u6d6a\u8d39\u3002
    • \u4e0b\u8868\u603b\u7ed3\u5bf9\u6bd4\u4e86\u6570\u7ec4\u4e0e\u94fe\u8868\u7684\u5404\u9879\u7279\u6027\u3002
    \u6570\u7ec4 \u94fe\u8868 \u5b58\u50a8\u65b9\u5f0f \u8fde\u7eed\u5185\u5b58\u7a7a\u95f4 \u79bb\u6563\u5185\u5b58\u7a7a\u95f4 \u6570\u636e\u7ed3\u6784\u957f\u5ea6 \u957f\u5ea6\u4e0d\u53ef\u53d8 \u957f\u5ea6\u53ef\u53d8 \u5185\u5b58\u4f7f\u7528\u7387 \u5360\u7528\u5185\u5b58\u5c11\u3001\u7f13\u5b58\u5c40\u90e8\u6027\u597d \u5360\u7528\u5185\u5b58\u591a \u4f18\u52bf\u64cd\u4f5c \u968f\u673a\u8bbf\u95ee \u63d2\u5165\u3001\u5220\u9664

    \u7f13\u5b58\u5c40\u90e8\u6027\u7684\u7b80\u5355\u89e3\u91ca

    \u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u6570\u636e\u8bfb\u5199\u901f\u5ea6\u6392\u5e8f\u662f\u201c\u786c\u76d8 < \u5185\u5b58 < CPU \u7f13\u5b58\u201d\u3002\u5f53\u6211\u4eec\u8bbf\u95ee\u6570\u7ec4\u5143\u7d20\u65f6\uff0c\u8ba1\u7b97\u673a\u4e0d\u4ec5\u4f1a\u52a0\u8f7d\u5b83\uff0c\u8fd8\u4f1a\u7f13\u5b58\u5176\u5468\u56f4\u7684\u5176\u5b83\u6570\u636e\uff0c\u4ece\u800c\u501f\u52a9\u9ad8\u901f\u7f13\u5b58\u6765\u63d0\u5347\u540e\u7eed\u64cd\u4f5c\u7684\u6267\u884c\u901f\u5ea6\u3002\u94fe\u8868\u5219\u4e0d\u7136\uff0c\u8ba1\u7b97\u673a\u53ea\u80fd\u6328\u4e2a\u5730\u7f13\u5b58\u5404\u4e2a\u7ed3\u70b9\uff0c\u8fd9\u6837\u7684\u591a\u6b21\u201c\u642c\u8fd0\u201d\u964d\u4f4e\u4e86\u6574\u4f53\u6548\u7387\u3002

    • \u4e0b\u8868\u5bf9\u6bd4\u4e86\u6570\u7ec4\u4e0e\u94fe\u8868\u7684\u5404\u79cd\u64cd\u4f5c\u6548\u7387\u3002
    \u64cd\u4f5c \u6570\u7ec4 \u94fe\u8868 \u8bbf\u95ee\u5143\u7d20 \\(O(1)\\) \\(O(N)\\) \u6dfb\u52a0\u5143\u7d20 \\(O(N)\\) \\(O(1)\\) \u5220\u9664\u5143\u7d20 \\(O(N)\\) \\(O(1)\\)"},{"location":"chapter_computational_complexity/performance_evaluation/","title":"2.1. \u00a0 \u7b97\u6cd5\u6548\u7387\u8bc4\u4f30","text":""},{"location":"chapter_computational_complexity/performance_evaluation/#211","title":"2.1.1. \u00a0 \u7b97\u6cd5\u8bc4\u4ef7\u7ef4\u5ea6","text":"

    \u5728\u5f00\u59cb\u5b66\u4e60\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u8981\u60f3\u6e05\u695a\u7b97\u6cd5\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u4ec0\u4e48\uff0c\u6216\u8005\u8bf4\uff0c\u5982\u4f55\u6765\u8bc4\u5224\u7b97\u6cd5\u7684\u597d\u4e0e\u574f\u3002\u6574\u4f53\u4e0a\u770b\uff0c\u6211\u4eec\u8bbe\u8ba1\u7b97\u6cd5\u65f6\u8ffd\u6c42\u4e24\u4e2a\u5c42\u9762\u7684\u76ee\u6807\u3002

    1. \u627e\u5230\u95ee\u9898\u89e3\u6cd5\u3002\u7b97\u6cd5\u9700\u8981\u80fd\u591f\u5728\u89c4\u5b9a\u7684\u8f93\u5165\u8303\u56f4\u4e0b\uff0c\u53ef\u9760\u5730\u6c42\u5f97\u95ee\u9898\u7684\u6b63\u786e\u89e3\u3002
    2. \u5bfb\u6c42\u6700\u4f18\u89e3\u6cd5\u3002\u540c\u4e00\u4e2a\u95ee\u9898\u53ef\u80fd\u5b58\u5728\u591a\u79cd\u89e3\u6cd5\uff0c\u800c\u6211\u4eec\u5e0c\u671b\u7b97\u6cd5\u6548\u7387\u5c3d\u53ef\u80fd\u7684\u9ad8\u3002

    \u6362\u8a00\u4e4b\uff0c\u5728\u53ef\u4ee5\u89e3\u51b3\u95ee\u9898\u7684\u524d\u63d0\u4e0b\uff0c\u7b97\u6cd5\u6548\u7387\u5219\u662f\u4e3b\u8981\u8bc4\u4ef7\u7ef4\u5ea6\uff0c\u5305\u62ec\uff1a

    • \u65f6\u95f4\u6548\u7387\uff0c\u5373\u7b97\u6cd5\u7684\u8fd0\u884c\u901f\u5ea6\u7684\u5feb\u6162\u3002
    • \u7a7a\u95f4\u6548\u7387\uff0c\u5373\u7b97\u6cd5\u5360\u7528\u7684\u5185\u5b58\u7a7a\u95f4\u5927\u5c0f\u3002

    \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u8ffd\u6c42\u201c\u8fd0\u884c\u901f\u5ea6\u5feb\u3001\u5360\u7528\u5185\u5b58\u5c11\u201d\uff0c\u800c\u5982\u4f55\u53bb\u8bc4\u4ef7\u7b97\u6cd5\u6548\u7387\u5219\u662f\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u53ea\u6709\u77e5\u9053\u5982\u4f55\u8bc4\u4ef7\u7b97\u6cd5\uff0c\u624d\u80fd\u53bb\u505a\u7b97\u6cd5\u4e4b\u95f4\u7684\u5bf9\u6bd4\u5206\u6790\uff0c\u4ee5\u53ca\u4f18\u5316\u7b97\u6cd5\u8bbe\u8ba1\u3002

    "},{"location":"chapter_computational_complexity/performance_evaluation/#212","title":"2.1.2. \u00a0 \u6548\u7387\u8bc4\u4f30\u65b9\u6cd5","text":""},{"location":"chapter_computational_complexity/performance_evaluation/#_1","title":"\u5b9e\u9645\u6d4b\u8bd5","text":"

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u7b97\u6cd5 A \u548c \u7b97\u6cd5 B \uff0c\u90fd\u80fd\u591f\u89e3\u51b3\u540c\u4e00\u95ee\u9898\uff0c\u73b0\u5728\u9700\u8981\u5bf9\u6bd4\u4e24\u4e2a\u7b97\u6cd5\u4e4b\u95f4\u7684\u6548\u7387\u3002\u6211\u4eec\u80fd\u591f\u60f3\u5230\u7684\u6700\u76f4\u63a5\u7684\u65b9\u5f0f\uff0c\u5c31\u662f\u627e\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u628a\u4e24\u4e2a\u7b97\u6cd5\u90fd\u5b8c\u6574\u8dd1\u4e00\u904d\uff0c\u5e76\u76d1\u63a7\u8bb0\u5f55\u8fd0\u884c\u65f6\u95f4\u548c\u5185\u5b58\u5360\u7528\u60c5\u51b5\u3002\u8fd9\u79cd\u8bc4\u4f30\u65b9\u5f0f\u80fd\u591f\u53cd\u6620\u771f\u5b9e\u60c5\u51b5\uff0c\u4f46\u662f\u4e5f\u5b58\u5728\u5f88\u5927\u7684\u786c\u4f24\u3002

    \u96be\u4ee5\u6392\u9664\u6d4b\u8bd5\u73af\u5883\u7684\u5e72\u6270\u56e0\u7d20\u3002\u786c\u4ef6\u914d\u7f6e\u4f1a\u5f71\u54cd\u5230\u7b97\u6cd5\u7684\u6027\u80fd\u8868\u73b0\u3002\u4f8b\u5982\uff0c\u5728\u67d0\u53f0\u8ba1\u7b97\u673a\u4e2d\uff0c\u7b97\u6cd5 A \u6bd4\u7b97\u6cd5 B \u8fd0\u884c\u65f6\u95f4\u66f4\u77ed\uff1b\u4f46\u6362\u5230\u53e6\u4e00\u53f0\u914d\u7f6e\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u4e2d\uff0c\u53ef\u80fd\u4f1a\u5f97\u5230\u76f8\u53cd\u7684\u6d4b\u8bd5\u7ed3\u679c\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u9700\u8981\u5728\u5404\u79cd\u673a\u5668\u4e0a\u5c55\u5f00\u6d4b\u8bd5\uff0c\u800c\u8fd9\u662f\u4e0d\u73b0\u5b9e\u7684\u3002

    \u5c55\u5f00\u5b8c\u6574\u6d4b\u8bd5\u975e\u5e38\u8017\u8d39\u8d44\u6e90\u3002\u968f\u7740\u8f93\u5165\u6570\u636e\u91cf\u7684\u5927\u5c0f\u53d8\u5316\uff0c\u7b97\u6cd5\u4f1a\u5448\u73b0\u51fa\u4e0d\u540c\u7684\u6548\u7387\u8868\u73b0\u3002\u6bd4\u5982\uff0c\u6709\u53ef\u80fd\u8f93\u5165\u6570\u636e\u91cf\u8f83\u5c0f\u65f6\uff0c\u7b97\u6cd5 A \u8fd0\u884c\u65f6\u95f4\u77ed\u4e8e\u7b97\u6cd5 B \uff0c\u800c\u5728\u8f93\u5165\u6570\u636e\u91cf\u8f83\u5927\u65f6\uff0c\u6d4b\u8bd5\u7ed3\u679c\u622a\u7136\u76f8\u53cd\u3002\u56e0\u6b64\uff0c\u82e5\u60f3\u8981\u8fbe\u5230\u5177\u6709\u8bf4\u670d\u529b\u7684\u5bf9\u6bd4\u7ed3\u679c\uff0c\u90a3\u4e48\u9700\u8981\u8f93\u5165\u5404\u79cd\u4f53\u91cf\u6570\u636e\uff0c\u8fd9\u6837\u7684\u6d4b\u8bd5\u9700\u8981\u5360\u7528\u5927\u91cf\u8ba1\u7b97\u8d44\u6e90\u3002

    "},{"location":"chapter_computational_complexity/performance_evaluation/#_2","title":"\u7406\u8bba\u4f30\u7b97","text":"

    \u65e2\u7136\u5b9e\u9645\u6d4b\u8bd5\u5177\u6709\u5f88\u5927\u7684\u5c40\u9650\u6027\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u5426\u53ef\u4ee5\u4ec5\u901a\u8fc7\u4e00\u4e9b\u8ba1\u7b97\uff0c\u5c31\u83b7\u77e5\u7b97\u6cd5\u7684\u6548\u7387\u6c34\u5e73\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6211\u4eec\u5c06\u6b64\u4f30\u7b97\u65b9\u6cd5\u79f0\u4e3a\u300c\u590d\u6742\u5ea6\u5206\u6790 Complexity Analysis\u300d\u6216\u300c\u6e10\u8fd1\u590d\u6742\u5ea6\u5206\u6790 Asymptotic Complexity Analysis\u300d\u3002

    \u590d\u6742\u5ea6\u5206\u6790\u8bc4\u4f30\u7684\u662f\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u968f\u7740\u8f93\u5165\u6570\u636e\u91cf\u589e\u591a\u65f6\u7684\u589e\u957f\u8d8b\u52bf\u3002\u8fd9\u53e5\u8bdd\u6709\u4e9b\u62d7\u53e3\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5176\u5206\u4e3a\u4e09\u4e2a\u91cd\u70b9\u6765\u7406\u89e3\uff1a

    • \u201c\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u201d\u53ef\u5206\u4e3a\u201c\u8fd0\u884c\u65f6\u95f4\u201d\u548c\u201c\u5360\u7528\u7a7a\u95f4\u201d\uff0c\u8fdb\u800c\u53ef\u5c06\u590d\u6742\u5ea6\u5206\u4e3a\u300c\u65f6\u95f4\u590d\u6742\u5ea6 Time Complexity\u300d\u548c\u300c\u7a7a\u95f4\u590d\u6742\u5ea6 Space Complexity\u300d\u3002
    • \u201c\u968f\u7740\u8f93\u5165\u6570\u636e\u91cf\u589e\u591a\u65f6\u201d\u4ee3\u8868\u590d\u6742\u5ea6\u4e0e\u8f93\u5165\u6570\u636e\u91cf\u6709\u5173\uff0c\u53cd\u6620\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u4e0e\u8f93\u5165\u6570\u636e\u91cf\u4e4b\u95f4\u7684\u5173\u7cfb\uff1b
    • \u201c\u589e\u957f\u8d8b\u52bf\u201d\u8868\u793a\u590d\u6742\u5ea6\u5206\u6790\u4e0d\u5173\u5fc3\u7b97\u6cd5\u5177\u4f53\u4f7f\u7528\u4e86\u591a\u5c11\u65f6\u95f4\u6216\u5360\u7528\u4e86\u591a\u5c11\u7a7a\u95f4\uff0c\u800c\u662f\u7ed9\u51fa\u4e00\u79cd\u201c\u8d8b\u52bf\u6027\u5206\u6790\u201d\uff1b

    \u590d\u6742\u5ea6\u5206\u6790\u514b\u670d\u4e86\u5b9e\u9645\u6d4b\u8bd5\u65b9\u6cd5\u7684\u5f0a\u7aef\u3002\u4e00\u662f\u72ec\u7acb\u4e8e\u6d4b\u8bd5\u73af\u5883\uff0c\u5206\u6790\u7ed3\u679c\u9002\u7528\u4e8e\u6240\u6709\u8fd0\u884c\u5e73\u53f0\u3002\u4e8c\u662f\u53ef\u4ee5\u4f53\u73b0\u4e0d\u540c\u6570\u636e\u91cf\u4e0b\u7684\u7b97\u6cd5\u6548\u7387\uff0c\u5c24\u5176\u662f\u53ef\u4ee5\u53cd\u6620\u5927\u6570\u636e\u91cf\u4e0b\u7684\u7b97\u6cd5\u6027\u80fd\u3002

    \u5982\u679c\u611f\u89c9\u5bf9\u590d\u6742\u5ea6\u5206\u6790\u7684\u6982\u5ff5\u4e00\u77e5\u534a\u89e3\uff0c\u65e0\u9700\u62c5\u5fc3\uff0c\u540e\u7eed\u7ae0\u8282\u4f1a\u5c55\u5f00\u4ecb\u7ecd\u3002

    "},{"location":"chapter_computational_complexity/performance_evaluation/#213","title":"2.1.3. \u00a0 \u590d\u6742\u5ea6\u5206\u6790\u91cd\u8981\u6027","text":"

    \u590d\u6742\u5ea6\u5206\u6790\u7ed9\u51fa\u4e00\u628a\u8bc4\u4ef7\u7b97\u6cd5\u6548\u7387\u7684\u201c\u6807\u5c3a\u201d\uff0c\u544a\u8bc9\u6211\u4eec\u6267\u884c\u67d0\u4e2a\u7b97\u6cd5\u9700\u8981\u591a\u5c11\u65f6\u95f4\u548c\u7a7a\u95f4\u8d44\u6e90\uff0c\u4e5f\u8ba9\u6211\u4eec\u53ef\u4ee5\u5f00\u5c55\u4e0d\u540c\u7b97\u6cd5\u4e4b\u95f4\u7684\u6548\u7387\u5bf9\u6bd4\u3002

    \u590d\u6742\u5ea6\u662f\u4e2a\u6570\u5b66\u6982\u5ff5\uff0c\u5bf9\u4e8e\u521d\u5b66\u8005\u53ef\u80fd\u6bd4\u8f83\u62bd\u8c61\uff0c\u5b66\u4e60\u96be\u5ea6\u76f8\u5bf9\u8f83\u9ad8\u3002\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u51fa\u53d1\uff0c\u5176\u5e76\u4e0d\u9002\u5408\u4f5c\u4e3a\u7b2c\u4e00\u7ae0\u5185\u5bb9\u3002\u4f46\u662f\uff0c\u5f53\u6211\u4eec\u8ba8\u8bba\u67d0\u4e2a\u6570\u636e\u7ed3\u6784\u6216\u8005\u7b97\u6cd5\u7684\u7279\u70b9\u65f6\uff0c\u96be\u4ee5\u907f\u514d\u9700\u8981\u5206\u6790\u5b83\u7684\u8fd0\u884c\u901f\u5ea6\u548c\u7a7a\u95f4\u4f7f\u7528\u60c5\u51b5\u3002\u56e0\u6b64\uff0c\u5728\u5c55\u5f00\u5b66\u4e60\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e4b\u524d\uff0c\u5efa\u8bae\u8bfb\u8005\u5148\u5bf9\u590d\u6742\u5ea6\u5efa\u7acb\u8d77\u521d\u6b65\u7684\u4e86\u89e3\uff0c\u5e76\u4e14\u80fd\u591f\u5b8c\u6210\u7b80\u5355\u6848\u4f8b\u7684\u590d\u6742\u5ea6\u5206\u6790\u3002

    "},{"location":"chapter_computational_complexity/space_complexity/","title":"2.3. \u00a0 \u7a7a\u95f4\u590d\u6742\u5ea6","text":"

    \u300c\u7a7a\u95f4\u590d\u6742\u5ea6 Space Complexity\u300d\u7edf\u8ba1 \u7b97\u6cd5\u4f7f\u7528\u5185\u5b58\u7a7a\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf\u3002\u8fd9\u4e2a\u6982\u5ff5\u4e0e\u65f6\u95f4\u590d\u6742\u5ea6\u5f88\u7c7b\u4f3c\u3002

    "},{"location":"chapter_computational_complexity/space_complexity/#231","title":"2.3.1. \u00a0 \u7b97\u6cd5\u76f8\u5173\u7a7a\u95f4","text":"

    \u7b97\u6cd5\u8fd0\u884c\u4e2d\uff0c\u4f7f\u7528\u7684\u5185\u5b58\u7a7a\u95f4\u4e3b\u8981\u6709\u4ee5\u4e0b\u51e0\u79cd\uff1a

    • \u300c\u8f93\u5165\u7a7a\u95f4\u300d\u7528\u4e8e\u5b58\u50a8\u7b97\u6cd5\u7684\u8f93\u5165\u6570\u636e\uff1b
    • \u300c\u6682\u5b58\u7a7a\u95f4\u300d\u7528\u4e8e\u5b58\u50a8\u7b97\u6cd5\u8fd0\u884c\u4e2d\u7684\u53d8\u91cf\u3001\u5bf9\u8c61\u3001\u51fd\u6570\u4e0a\u4e0b\u6587\u7b49\u6570\u636e\uff1b
    • \u300c\u8f93\u51fa\u7a7a\u95f4\u300d\u7528\u4e8e\u5b58\u50a8\u7b97\u6cd5\u7684\u8f93\u51fa\u6570\u636e\uff1b

    Tip

    \u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u7edf\u8ba1\u8303\u56f4\u662f\u300c\u6682\u5b58\u7a7a\u95f4\u300d+\u300c\u8f93\u51fa\u7a7a\u95f4\u300d\u3002

    \u6682\u5b58\u7a7a\u95f4\u53ef\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a

    • \u300c\u6682\u5b58\u6570\u636e\u300d\u7528\u4e8e\u4fdd\u5b58\u7b97\u6cd5\u8fd0\u884c\u4e2d\u7684\u5404\u79cd \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61 \u7b49\u3002
    • \u300c\u6808\u5e27\u7a7a\u95f4\u300d\u7528\u4e8e\u4fdd\u5b58\u8c03\u7528\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u6570\u636e\u3002\u7cfb\u7edf\u6bcf\u6b21\u8c03\u7528\u51fd\u6570\u90fd\u4f1a\u5728\u6808\u7684\u9876\u90e8\u521b\u5efa\u4e00\u4e2a\u6808\u5e27\uff0c\u51fd\u6570\u8fd4\u56de\u65f6\uff0c\u6808\u5e27\u7a7a\u95f4\u4f1a\u88ab\u91ca\u653e\u3002
    • \u300c\u6307\u4ee4\u7a7a\u95f4\u300d\u7528\u4e8e\u4fdd\u5b58\u7f16\u8bd1\u540e\u7684\u7a0b\u5e8f\u6307\u4ee4\uff0c\u5728\u5b9e\u9645\u7edf\u8ba1\u4e2d\u4e00\u822c\u5ffd\u7565\u4e0d\u8ba1\u3002

    Fig. \u7b97\u6cd5\u4f7f\u7528\u7684\u76f8\u5173\u7a7a\u95f4

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u7c7b */\nclass Node {\nint val;\nNode next;\nNode(int x) { val = x; }\n}\n/* \u51fd\u6570 */\nint function() {\n// do something...\nreturn 0;\n}\nint algorithm(int n) {        // \u8f93\u5165\u6570\u636e\nfinal int a = 0;          // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nint b = 0;                // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nNode node = new Node(0);  // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nint c = function();       // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7ed3\u6784\u4f53 */\nstruct Node {\nint val;\nNode *next;\nNode(int x) : val(x), next(nullptr) {}\n};\n/* \u51fd\u6570 */\nint func() {\n// do something...\nreturn 0;\n}\nint algorithm(int n) {        // \u8f93\u5165\u6570\u636e\nconst int a = 0;          // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nint b = 0;                // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nNode* node = new Node(0); // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nint c = func();           // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    \"\"\" \u7c7b \"\"\"\nclass Node:\ndef __init__(self, x: int):\nself.val: int = x                 # \u7ed3\u70b9\u503c\nself.next: Optional[Node] = None  # \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n\"\"\" \u51fd\u6570 \"\"\"\ndef function() -> int:\n# do something...\nreturn 0\ndef algorithm(n) -> int:  # \u8f93\u5165\u6570\u636e\nb: int = 0            # \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nnode = Node(0)        # \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nc: int = function()   # \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c      # \u8f93\u51fa\u6570\u636e\n
    /* \u7ed3\u6784\u4f53 */\ntype node struct {\nval  int\nnext *node\n}\n/* \u521b\u5efa node \u7ed3\u6784\u4f53  */\nfunc newNode(val int) *node {\nreturn &node{val: val}\n}\n/* \u51fd\u6570 */\nfunc function() int {\n// do something...\nreturn 0\n}\nfunc algorithm(n int) int { // \u8f93\u5165\u6570\u636e\nconst a = 0             // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nb := 0                  // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nnewNode(0)              // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nc := function()         // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c        // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7c7b */\nclass Node {\nval;\nnext;\nconstructor(val) {\nthis.val = val === undefined ? 0 : val; // \u7ed3\u70b9\u503c\nthis.next = null;                       // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n/* \u51fd\u6570 */\nfunction constFunc() {\n// do something\nreturn 0;\n}\nfunction algorithm(n) {       // \u8f93\u5165\u6570\u636e\nconst a = 0;              // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nconst b = 0;              // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nconst node = new Node(0); // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nconst c = constFunc();    // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7c7b */\nclass Node {\nval: number;\nnext: Node | null;\nconstructor(val?: number) {\nthis.val = val === undefined ? 0 : val; // \u7ed3\u70b9\u503c\nthis.next = null;                       // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n/* \u51fd\u6570 */\nfunction constFunc(): number {\n// do something\nreturn 0;\n}\nfunction algorithm(n: number): number { // \u8f93\u5165\u6570\u636e\nconst a = 0;                        // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nconst b = 0;                        // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nconst node = new Node(0);           // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nconst c = constFunc();              // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;                   // \u8f93\u51fa\u6570\u636e\n}\n
    \n
    /* \u7c7b */\nclass Node\n{\nint val;\nNode next;\nNode(int x) { val = x; }\n}\n/* \u51fd\u6570 */\nint function()\n{\n// do something...\nreturn 0;\n}\nint algorithm(int n)          // \u8f93\u5165\u6570\u636e\n{\nint a = 0;                // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nint b = 0;                // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nNode node = new Node(0);  // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nint c = function();       // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7c7b */\nclass Node {\nvar val: Int\nvar next: Node?\ninit(x: Int) {\nval = x\n}\n}\n/* \u51fd\u6570 */\nfunc function() -> Int {\n// do something...\nreturn 0\n}\nfunc algorithm(n: Int) -> Int { // \u8f93\u5165\u6570\u636e\nlet a = 0 // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nvar b = 0 // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nlet node = Node(x: 0) // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nlet c = function() // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c // \u8f93\u51fa\u6570\u636e\n}\n
    \n
    "},{"location":"chapter_computational_complexity/space_complexity/#232","title":"2.3.2. \u00a0 \u63a8\u7b97\u65b9\u6cd5","text":"

    \u7a7a\u95f4\u590d\u6742\u5ea6\u7684\u63a8\u7b97\u65b9\u6cd5\u548c\u65f6\u95f4\u590d\u6742\u5ea6\u603b\u4f53\u7c7b\u4f3c\uff0c\u53ea\u662f\u4ece\u7edf\u8ba1\u201c\u8ba1\u7b97\u64cd\u4f5c\u6570\u91cf\u201d\u53d8\u4e3a\u7edf\u8ba1\u201c\u4f7f\u7528\u7a7a\u95f4\u5927\u5c0f\u201d\u3002\u4e0e\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u540c\u7684\u662f\uff0c\u6211\u4eec\u4e00\u822c\u53ea\u5173\u6ce8\u300c\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u300d\u3002\u8fd9\u662f\u56e0\u4e3a\u5185\u5b58\u7a7a\u95f4\u662f\u4e00\u4e2a\u786c\u6027\u8981\u6c42\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u5728\u6240\u6709\u8f93\u5165\u6570\u636e\u4e0b\u90fd\u6709\u8db3\u591f\u7684\u5185\u5b58\u7a7a\u95f4\u9884\u7559\u3002

    \u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u4e2d\u7684\u201c\u6700\u5dee\u201d\u6709\u4e24\u5c42\u542b\u4e49\uff0c\u5206\u522b\u4e3a\u8f93\u5165\u6570\u636e\u7684\u6700\u5dee\u5206\u5e03\u3001\u7b97\u6cd5\u8fd0\u884c\u4e2d\u7684\u6700\u5dee\u65f6\u95f4\u70b9\u3002

    • \u4ee5\u6700\u5dee\u8f93\u5165\u6570\u636e\u4e3a\u51c6\u3002\u5f53 \\(n < 10\\) \u65f6\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff1b\u4f46\u662f\u5f53 \\(n > 10\\) \u65f6\uff0c\u521d\u59cb\u5316\u7684\u6570\u7ec4 nums \u4f7f\u7528 \\(O(n)\\) \u7a7a\u95f4\uff1b\u56e0\u6b64\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff1b
    • \u4ee5\u7b97\u6cd5\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u5cf0\u503c\u5185\u5b58\u4e3a\u51c6\u3002\u7a0b\u5e8f\u5728\u6267\u884c\u6700\u540e\u4e00\u884c\u4e4b\u524d\uff0c\u4f7f\u7528 \\(O(1)\\) \u7a7a\u95f4\uff1b\u5f53\u521d\u59cb\u5316\u6570\u7ec4 nums \u65f6\uff0c\u7a0b\u5e8f\u4f7f\u7528 \\(O(n)\\) \u7a7a\u95f4\uff1b\u56e0\u6b64\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff1b
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    void algorithm(int n) {\nint a = 0;                   // O(1)\nint[] b = new int[10000];    // O(1)\nif (n > 10)\nint[] nums = new int[n]; // O(n)\n}\n
    void algorithm(int n) {\nint a = 0;               // O(1)\nvector<int> b(10000);    // O(1)\nif (n > 10)\nvector<int> nums(n); // O(n)\n}\n
    def algorithm(n: int) -> None:\na: int = 0                     # O(1)\nb: List[int] = [0] * 10000     # O(1)\nif n > 10:\nnums: List[int] = [0] * n  # O(n)\n
    func algorithm(n int) {\na := 0                      // O(1)\nb := make([]int, 10000)     // O(1)\nvar nums []int\nif n > 10 {\nnums := make([]int, n)  // O(n)\n}\nfmt.Println(a, b, nums)\n}\n
    function algorithm(n) {\nconst a = 0;                   // O(1)\nconst b = new Array(10000);    // O(1)\nif (n > 10) {\nconst nums = new Array(n); // O(n)\n}\n}\n
    function algorithm(n: number): void {\nconst a = 0;                   // O(1)\nconst b = new Array(10000);    // O(1)\nif (n > 10) {\nconst nums = new Array(n); // O(n)\n}\n}\n
    \n
    void algorithm(int n)\n{\nint a = 0;                   // O(1)\nint[] b = new int[10000];    // O(1)\nif (n > 10)\n{\nint[] nums = new int[n]; // O(n)\n}\n}\n
    func algorithm(n: Int) {\nlet a = 0 // O(1)\nlet b = Array(repeating: 0, count: 10000) // O(1)\nif n > 10 {\nlet nums = Array(repeating: 0, count: n) // O(n)\n}\n}\n
    \n

    \u5728\u9012\u5f52\u51fd\u6570\u4e2d\uff0c\u9700\u8981\u6ce8\u610f\u7edf\u8ba1\u6808\u5e27\u7a7a\u95f4\u3002\u4f8b\u5982\u51fd\u6570 loop()\uff0c\u5728\u5faa\u73af\u4e2d\u8c03\u7528\u4e86 \\(n\\) \u6b21 function() \uff0c\u6bcf\u8f6e\u4e2d\u7684 function() \u90fd\u8fd4\u56de\u5e76\u91ca\u653e\u4e86\u6808\u5e27\u7a7a\u95f4\uff0c\u56e0\u6b64\u7a7a\u95f4\u590d\u6742\u5ea6\u4ecd\u4e3a \\(O(1)\\) \u3002\u800c\u9012\u5f52\u51fd\u6570 recur() \u5728\u8fd0\u884c\u4e2d\u4f1a\u540c\u65f6\u5b58\u5728 \\(n\\) \u4e2a\u672a\u8fd4\u56de\u7684 recur() \uff0c\u4ece\u800c\u4f7f\u7528 \\(O(n)\\) \u7684\u6808\u5e27\u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    int function() {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nvoid loop(int n) {\nfor (int i = 0; i < n; i++) {\nfunction();\n}\n}\n/* \u9012\u5f52 O(n) */\nvoid recur(int n) {\nif (n == 1) return;\nreturn recur(n - 1);\n}\n
    int func() {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nvoid loop(int n) {\nfor (int i = 0; i < n; i++) {\nfunc();\n}\n}\n/* \u9012\u5f52 O(n) */\nvoid recur(int n) {\nif (n == 1) return;\nreturn recur(n - 1);\n}\n
    def function() -> int:\n# do something\nreturn 0\n\"\"\" \u5faa\u73af O(1) \"\"\"\ndef loop(n: int) -> None:\nfor _ in range(n):\nfunction()\n\"\"\" \u9012\u5f52 O(n) \"\"\"\ndef recur(n: int) -> int:\nif n == 1: return\nreturn recur(n - 1)\n
    func function() int {\n// do something\nreturn 0\n}\n/* \u5faa\u73af O(1) */\nfunc loop(n int) {\nfor i := 0; i < n; i++ {\nfunction()\n}\n}\n/* \u9012\u5f52 O(n) */\nfunc recur(n int) {\nif n == 1 {\nreturn\n}\nrecur(n - 1)\n}\n
    function constFunc() {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nfunction loop(n) {\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n/* \u9012\u5f52 O(n) */\nfunction recur(n) {\nif (n === 1) return;\nreturn recur(n - 1);\n}\n
    function constFunc(): number {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nfunction loop(n: number): void {\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n/* \u9012\u5f52 O(n) */\nfunction recur(n: number): void {\nif (n === 1) return;\nreturn recur(n - 1);\n}\n
    \n
    int function()\n{\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nvoid loop(int n)\n{\nfor (int i = 0; i < n; i++)\n{\nfunction();\n}\n}\n/* \u9012\u5f52 O(n) */\nint recur(int n)\n{\nif (n == 1) return 1;\nreturn recur(n - 1);\n}\n
    @discardableResult\nfunc function() -> Int {\n// do something\nreturn 0\n}\n/* \u5faa\u73af O(1) */\nfunc loop(n: Int) {\nfor _ in 0 ..< n {\nfunction()\n}\n}\n/* \u9012\u5f52 O(n) */\nfunc recur(n: Int) {\nif n == 1 {\nreturn\n}\nrecur(n: n - 1)\n}\n
    \n
    "},{"location":"chapter_computational_complexity/space_complexity/#233","title":"2.3.3. \u00a0 \u5e38\u89c1\u7c7b\u578b","text":"

    \u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u5e38\u89c1\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u7c7b\u578b\u6709\uff08\u4ece\u4f4e\u5230\u9ad8\u6392\u5217\uff09

    \\[ \\begin{aligned} O(1) < O(\\log n) < O(n) < O(n^2) < O(2^n) \\newline \\text{\u5e38\u6570\u9636} < \\text{\u5bf9\u6570\u9636} < \\text{\u7ebf\u6027\u9636} < \\text{\u5e73\u65b9\u9636} < \\text{\u6307\u6570\u9636} \\end{aligned} \\]

    Fig. \u7a7a\u95f4\u590d\u6742\u5ea6\u7684\u5e38\u89c1\u7c7b\u578b

    Tip

    \u90e8\u5206\u793a\u4f8b\u4ee3\u7801\u9700\u8981\u4e00\u4e9b\u524d\u7f6e\u77e5\u8bc6\uff0c\u5305\u62ec\u6570\u7ec4\u3001\u94fe\u8868\u3001\u4e8c\u53c9\u6811\u3001\u9012\u5f52\u7b97\u6cd5\u7b49\u3002\u5982\u679c\u9047\u5230\u770b\u4e0d\u61c2\u7684\u5730\u65b9\u65e0\u9700\u62c5\u5fc3\uff0c\u53ef\u4ee5\u5728\u5b66\u4e60\u5b8c\u540e\u9762\u7ae0\u8282\u540e\u518d\u6765\u590d\u4e60\uff0c\u73b0\u9636\u6bb5\u5148\u805a\u7126\u5728\u7406\u89e3\u7a7a\u95f4\u590d\u6742\u5ea6\u542b\u4e49\u548c\u63a8\u7b97\u65b9\u6cd5\u4e0a\u3002

    "},{"location":"chapter_computational_complexity/space_complexity/#o1","title":"\u5e38\u6570\u9636 \\(O(1)\\)","text":"

    \u5e38\u6570\u9636\u5e38\u89c1\u4e8e\u6570\u91cf\u4e0e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\u7684\u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u5faa\u73af\u4e2d\u521d\u59cb\u5316\u53d8\u91cf\u6216\u8c03\u7528\u51fd\u6570\u800c\u5360\u7528\u7684\u5185\u5b58\uff0c\u5728\u8fdb\u5165\u4e0b\u4e00\u5faa\u73af\u540e\u5c31\u4f1a\u88ab\u91ca\u653e\uff0c\u5373\u4e0d\u4f1a\u7d2f\u79ef\u5360\u7528\u7a7a\u95f4\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4ecd\u4e3a \\(O(1)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u5e38\u6570\u9636 */\nvoid constant(int n) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nfinal int a = 0;\nint b = 0;\nint[] nums = new int[10000];\nListNode node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nint c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nfunction();\n}\n}\n
    space_complexity.cpp
    /* \u5e38\u6570\u9636 */\nvoid constant(int n) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst int a = 0;\nint b = 0;\nvector<int> nums(10000);\nListNode node(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nint c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nfunc();\n}\n}\n
    space_complexity.py
    def constant(n: int) -> None:\n\"\"\" \u5e38\u6570\u9636 \"\"\"\n# \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\na: int = 0\nnums: List[int] = [0] * 10000\nnode = ListNode(0)\n# \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in range(n):\nc: int = 0\n# \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in range(n):\nfunction()\n
    space_complexity.go
    /* \u5e38\u6570\u9636 */\nfunc spaceConstant(n int) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a = 0\nb := 0\nnums := make([]int, 10000)\nListNode := newNode(0)\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nvar c int\nfor i := 0; i < n; i++ {\nc = 0\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor i := 0; i < n; i++ {\nfunction()\n}\nfmt.Println(a, b, nums, c, ListNode)\n}\n
    space_complexity.js
    /* \u5e38\u6570\u9636 */\nfunction constant(n) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a = 0;\nconst b = 0;\nconst nums = new Array(10000);\nconst node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconst c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n
    space_complexity.ts
    /* \u5e38\u6570\u9636 */\nfunction constant(n: number): void {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a = 0;\nconst b = 0;\nconst nums = new Array(10000);\nconst node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconst c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n
    space_complexity.c
    [class]{}-[func]{spaceConstant}\n
    space_complexity.cs
    /* \u5e38\u6570\u9636 */\nvoid constant(int n)\n{\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nint a = 0;\nint b = 0;\nint[] nums = new int[10000];\nListNode node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++)\n{\nint c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++)\n{\nfunction();\n}\n}\n
    space_complexity.swift
    /* \u5e38\u6570\u9636 */\nfunc constant(n: Int) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nlet a = 0\nvar b = 0\nlet nums = Array(repeating: 0, count: 10000)\nlet node = ListNode(x: 0)\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in 0 ..< n {\nlet c = 0\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in 0 ..< n {\nfunction()\n}\n}\n
    space_complexity.zig
    // \u5e38\u6570\u9636\nfn constant(n: i32) void {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a: i32 = 0;\nvar b: i32 = 0;\nvar nums = [_]i32{0}**10000;\nvar node = inc.ListNode(i32){.val = 0};\nvar i: i32 = 0;\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nwhile (i < n) : (i += 1) {\nvar c: i32 = 0;\n_ = c;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\ni = 0;\nwhile (i < n) : (i += 1) {\n_ = function();\n}\n_ = a;\n_ = b;\n_ = nums;\n_ = node;\n}\n
    "},{"location":"chapter_computational_complexity/space_complexity/#on","title":"\u7ebf\u6027\u9636 \\(O(n)\\)","text":"

    \u7ebf\u6027\u9636\u5e38\u89c1\u4e8e\u5143\u7d20\u6570\u91cf\u4e0e \\(n\\) \u6210\u6b63\u6bd4\u7684\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\u7b49\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u7ebf\u6027\u9636 */\nvoid linear(int n) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nint[] nums = new int[n];\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nList<ListNode> nodes = new ArrayList<>();\nfor (int i = 0; i < n; i++) {\nnodes.add(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nMap<Integer, String> map = new HashMap<>();\nfor (int i = 0; i < n; i++) {\nmap.put(i, String.valueOf(i));\n}\n}\n
    space_complexity.cpp
    /* \u7ebf\u6027\u9636 */\nvoid linear(int n) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nvector<int> nums(n);\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvector<ListNode> nodes;\nfor (int i = 0; i < n; i++) {\nnodes.push_back(ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nunordered_map<int, string> map;\nfor (int i = 0; i < n; i++) {\nmap[i] = to_string(i);\n}\n}\n
    space_complexity.py
    def linear(n: int) -> None:\n\"\"\" \u7ebf\u6027\u9636 \"\"\"\n# \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nnums: List[int] = [0] * n\n# \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nmapp: Dict = {}\nfor i in range(n):\nmapp[i] = str(i)\n
    space_complexity.go
    /* \u7ebf\u6027\u9636 */\nfunc spaceLinear(n int) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\n_ = make([]int, n)\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvar nodes []*node\nfor i := 0; i < n; i++ {\nnodes = append(nodes, newNode(i))\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nm := make(map[int]string, n)\nfor i := 0; i < n; i++ {\nm[i] = strconv.Itoa(i)\n}\n}\n
    space_complexity.js
    /* \u7ebf\u6027\u9636 */\nfunction linear(n) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nconst nums = new Array(n);\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst nodes = [];\nfor (let i = 0; i < n; i++) {\nnodes.push(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst map = new Map();\nfor (let i = 0; i < n; i++) {\nmap.set(i, i.toString());\n}\n}\n
    space_complexity.ts
    /* \u7ebf\u6027\u9636 */\nfunction linear(n: number): void {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nconst nums = new Array(n);\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst nodes: ListNode[] = [];\nfor (let i = 0; i < n; i++) {\nnodes.push(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst map = new Map();\nfor (let i = 0; i < n; i++) {\nmap.set(i, i.toString());\n}\n}\n
    space_complexity.c
    [class]{}-[func]{spaceLinear}\n
    space_complexity.cs
    /* \u7ebf\u6027\u9636 */\nvoid linear(int n)\n{\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nint[] nums = new int[n];\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nList<ListNode> nodes = new();\nfor (int i = 0; i < n; i++)\n{\nnodes.Add(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nDictionary<int, String> map = new();\nfor (int i = 0; i < n; i++)\n{\nmap.Add(i, i.ToString());\n}\n}\n
    space_complexity.swift
    /* \u7ebf\u6027\u9636 */\nfunc linear(n: Int) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nlet nums = Array(repeating: 0, count: n)\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nlet nodes = (0 ..< n).map { ListNode(x: $0) }\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nlet map = Dictionary(uniqueKeysWithValues: (0 ..< n).map { ($0, \"\\($0)\") })\n}\n
    space_complexity.zig
    // \u7ebf\u6027\u9636\nfn linear(comptime n: i32) !void {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nvar nums = [_]i32{0}**n;\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvar nodes = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer nodes.deinit();\nvar i: i32 = 0;\nwhile (i < n) : (i += 1) {\ntry nodes.append(i);\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvar map = std.AutoArrayHashMap(i32, []const u8).init(std.heap.page_allocator);\ndefer map.deinit();\nvar j: i32 = 0;\nwhile (j < n) : (j += 1) {\nconst string = try std.fmt.allocPrint(std.heap.page_allocator, \"{d}\", .{j});\ndefer std.heap.page_allocator.free(string);\ntry map.put(i, string);\n}\n_ = nums;\n}\n

    \u4ee5\u4e0b\u9012\u5f52\u51fd\u6570\u4f1a\u540c\u65f6\u5b58\u5728 \\(n\\) \u4e2a\u672a\u8fd4\u56de\u7684 algorithm() \u51fd\u6570\uff0c\u4f7f\u7528 \\(O(n)\\) \u5927\u5c0f\u7684\u6808\u5e27\u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nvoid linearRecur(int n) {\nSystem.out.println(\"\u9012\u5f52 n = \" + n);\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.cpp
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nvoid linearRecur(int n) {\ncout << \"\u9012\u5f52 n = \" << n << endl;\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.py
    def linear_recur(n: int) -> None:\n\"\"\" \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 \"\"\"\nprint(\"\u9012\u5f52 n =\", n)\nif n == 1: return\nlinear_recur(n - 1)\n
    space_complexity.go
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc spaceLinearRecur(n int) {\nfmt.Println(\"\u9012\u5f52 n =\", n)\nif n == 1 {\nreturn\n}\nspaceLinearRecur(n - 1)\n}\n
    space_complexity.js
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction linearRecur(n) {\nconsole.log(`\u9012\u5f52 n = ${n}`);\nif (n === 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.ts
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction linearRecur(n: number): void {\nconsole.log(`\u9012\u5f52 n = ${n}`);\nif (n === 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.c
    [class]{}-[func]{spaceLinearRecur}\n
    space_complexity.cs
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nvoid linearRecur(int n)\n{\nConsole.WriteLine(\"\u9012\u5f52 n = \" + n);\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.swift
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc linearRecur(n: Int) {\nprint(\"\u9012\u5f52 n = \\(n)\")\nif n == 1 {\nreturn\n}\nlinearRecur(n: n - 1)\n}\n
    space_complexity.zig
    // \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn linearRecur(comptime n: i32) void {\nstd.debug.print(\"\u9012\u5f52 n = {}\\n\", .{n});\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n

    Fig. \u9012\u5f52\u51fd\u6570\u4ea7\u751f\u7684\u7ebf\u6027\u9636\u7a7a\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/space_complexity/#on2","title":"\u5e73\u65b9\u9636 \\(O(n^2)\\)","text":"

    \u5e73\u65b9\u9636\u5e38\u89c1\u4e8e\u5143\u7d20\u6570\u91cf\u4e0e \\(n\\) \u6210\u5e73\u65b9\u5173\u7cfb\u7684\u77e9\u9635\u3001\u56fe\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u5e73\u65b9\u9636 */\nvoid quadratic(int n) {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nint[][] numMatrix = new int[n][n];\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nList<List<Integer>> numList = new ArrayList<>();\nfor (int i = 0; i < n; i++) {\nList<Integer> tmp = new ArrayList<>();\nfor (int j = 0; j < n; j++) {\ntmp.add(0);\n}\nnumList.add(tmp);\n}\n}\n
    space_complexity.cpp
    /* \u5e73\u65b9\u9636 */\nvoid quadratic(int n) {\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nvector<vector<int>> numMatrix;\nfor (int i = 0; i < n; i++) {\nvector<int> tmp;\nfor (int j = 0; j < n; j++) {\ntmp.push_back(0);\n}\nnumMatrix.push_back(tmp);\n}\n}\n
    space_complexity.py
    def quadratic(n: int) -> None:\n\"\"\" \u5e73\u65b9\u9636 \"\"\"\n# \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nnum_matrix: List[List[int]] = [[0] * n for _ in range(n)]\n
    space_complexity.go
    /* \u5e73\u65b9\u9636 */\nfunc spaceQuadratic(n int) {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nnumMatrix := make([][]int, n)\nfor i := 0; i < n; i++ {\nnumMatrix[i] = make([]int, n)\n}\n}\n
    space_complexity.js
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n) {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numMatrix = Array(n).fill(null).map(() => Array(n).fill(null));\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numList = [];\nfor (let i = 0; i < n; i++) {\nconst tmp = [];\nfor (let j = 0; j < n; j++) {\ntmp.push(0);\n}\nnumList.push(tmp);\n}\n}\n
    space_complexity.ts
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n: number): void {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numMatrix = Array(n)\n.fill(null)\n.map(() => Array(n).fill(null));\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numList = [];\nfor (let i = 0; i < n; i++) {\nconst tmp = [];\nfor (let j = 0; j < n; j++) {\ntmp.push(0);\n}\nnumList.push(tmp);\n}\n}\n
    space_complexity.c
    [class]{}-[func]{spaceQuadratic}\n
    space_complexity.cs
    /* \u5e73\u65b9\u9636 */\nvoid quadratic(int n)\n{\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nint[,] numMatrix = new int[n, n];\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nList<List<int>> numList = new();\nfor (int i = 0; i < n; i++)\n{\nList<int> tmp = new();\nfor (int j = 0; j < n; j++)\n{\ntmp.Add(0);\n}\nnumList.Add(tmp);\n}\n}\n
    space_complexity.swift
    /* \u5e73\u65b9\u9636 */\nfunc quadratic(n: Int) {\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nlet numList = Array(repeating: Array(repeating: 0, count: n), count: n)\n}\n
    space_complexity.zig
    // \u5e73\u65b9\u9636\nfn quadratic(n: i32) !void {\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nvar nodes = std.ArrayList(std.ArrayList(i32)).init(std.heap.page_allocator);\ndefer nodes.deinit();\nvar i: i32 = 0;\nwhile (i < n) : (i += 1) {\nvar tmp = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer tmp.deinit();\nvar j: i32 = 0;\nwhile (j < n) : (j += 1) {\ntry tmp.append(0);\n}\ntry nodes.append(tmp);\n}\n}\n

    \u5728\u4ee5\u4e0b\u9012\u5f52\u51fd\u6570\u4e2d\uff0c\u540c\u65f6\u5b58\u5728 \\(n\\) \u4e2a\u672a\u8fd4\u56de\u7684 algorithm() \uff0c\u5e76\u4e14\u6bcf\u4e2a\u51fd\u6570\u4e2d\u90fd\u521d\u59cb\u5316\u4e86\u4e00\u4e2a\u6570\u7ec4\uff0c\u957f\u5ea6\u5206\u522b\u4e3a \\(n, n-1, n-2, ..., 2, 1\\) \uff0c\u5e73\u5747\u957f\u5ea6\u4e3a \\(\\frac{n}{2}\\) \uff0c\u56e0\u6b64\u603b\u4f53\u4f7f\u7528 \\(O(n^2)\\) \u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint quadraticRecur(int n) {\nif (n <= 0) return 0;\n// \u6570\u7ec4 nums \u957f\u5ea6\u4e3a n, n-1, ..., 2, 1\nint[] nums = new int[n];\nSystem.out.println(\"\u9012\u5f52 n = \" + n + \" \u4e2d\u7684 nums \u957f\u5ea6 = \" + nums.length);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.cpp
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint quadraticRecur(int n) {\nif (n <= 0) return 0;\nvector<int> nums(n);\ncout << \"\u9012\u5f52 n = \" << n << \" \u4e2d\u7684 nums \u957f\u5ea6 = \" << nums.size() << endl;\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.py
    def quadratic_recur(n: int) -> int:\n\"\"\" \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 \"\"\"\nif n <= 0: return 0\n# \u6570\u7ec4 nums \u957f\u5ea6\u4e3a n, n-1, ..., 2, 1\nnums: List[int] = [0] * n\nreturn quadratic_recur(n - 1)\n
    space_complexity.go
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc spaceQuadraticRecur(n int) int {\nif n <= 0 {\nreturn 0\n}\nnums := make([]int, n)\nfmt.Printf(\"\u9012\u5f52 n = %d \u4e2d\u7684 nums \u957f\u5ea6 = %d \\n\", n, len(nums))\nreturn spaceQuadraticRecur(n - 1)\n}\n
    space_complexity.js
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction quadraticRecur(n) {\nif (n <= 0) return 0;\nconst nums = new Array(n);\nconsole.log(`\u9012\u5f52 n = ${n} \u4e2d\u7684 nums \u957f\u5ea6 = ${nums.length}`);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.ts
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction quadraticRecur(n: number): number {\nif (n <= 0) return 0;\nconst nums = new Array(n);\nconsole.log(`\u9012\u5f52 n = ${n} \u4e2d\u7684 nums \u957f\u5ea6 = ${nums.length}`);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.c
    [class]{}-[func]{spaceQuadraticRecur}\n
    space_complexity.cs
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint quadraticRecur(int n)\n{\nif (n <= 0) return 0;\nint[] nums = new int[n];\nConsole.WriteLine(\"\u9012\u5f52 n = \" + n + \" \u4e2d\u7684 nums \u957f\u5ea6 = \" + nums.Length);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.swift
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\n@discardableResult\nfunc quadraticRecur(n: Int) -> Int {\nif n <= 0 {\nreturn 0\n}\n// \u6570\u7ec4 nums \u957f\u5ea6\u4e3a n, n-1, ..., 2, 1\nlet nums = Array(repeating: 0, count: n)\nprint(\"\u9012\u5f52 n = \\(n) \u4e2d\u7684 nums \u957f\u5ea6 = \\(nums.count)\")\nreturn quadraticRecur(n: n - 1)\n}\n
    space_complexity.zig
    // \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn quadraticRecur(comptime n: i32) i32 {\nif (n <= 0) return 0;\nvar nums = [_]i32{0}**n;\nstd.debug.print(\"\u9012\u5f52 n = {} \u4e2d\u7684 nums \u957f\u5ea6 = {}\\n\", .{n, nums.len});\nreturn quadraticRecur(n - 1);\n}\n

    Fig. \u9012\u5f52\u51fd\u6570\u4ea7\u751f\u7684\u5e73\u65b9\u9636\u7a7a\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/space_complexity/#o2n","title":"\u6307\u6570\u9636 \\(O(2^n)\\)","text":"

    \u6307\u6570\u9636\u5e38\u89c1\u4e8e\u4e8c\u53c9\u6811\u3002\u9ad8\u5ea6\u4e3a \\(n\\) \u7684\u300c\u6ee1\u4e8c\u53c9\u6811\u300d\u7684\u7ed3\u70b9\u6570\u91cf\u4e3a \\(2^n - 1\\) \uff0c\u4f7f\u7528 \\(O(2^n)\\) \u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nTreeNode buildTree(int n) {\nif (n == 0) return null;\nTreeNode root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.cpp
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nTreeNode* buildTree(int n) {\nif (n == 0) return nullptr;\nTreeNode* root = new TreeNode(0);\nroot->left = buildTree(n - 1);\nroot->right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.py
    def build_tree(n: int) -> Optional[TreeNode]:\n\"\"\" \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 \"\"\"\nif n == 0: return None\nroot = TreeNode(0)\nroot.left = build_tree(n - 1)\nroot.right = build_tree(n - 1)\nreturn root\n
    space_complexity.go
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunc buildTree(n int) *treeNode {\nif n == 0 {\nreturn nil\n}\nroot := newTreeNode(0)\nroot.left = buildTree(n - 1)\nroot.right = buildTree(n - 1)\nreturn root\n}\n
    space_complexity.js
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunction buildTree(n) {\nif (n === 0) return null;\nconst root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.ts
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunction buildTree(n: number): TreeNode | null {\nif (n === 0) return null;\nconst root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.c
    [class]{}-[func]{buildTree}\n
    space_complexity.cs
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nTreeNode? buildTree(int n)\n{\nif (n == 0) return null;\nTreeNode root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.swift
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunc buildTree(n: Int) -> TreeNode? {\nif n == 0 {\nreturn nil\n}\nlet root = TreeNode(x: 0)\nroot.left = buildTree(n: n - 1)\nroot.right = buildTree(n: n - 1)\nreturn root\n}\n
    space_complexity.zig
    // \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09\nfn buildTree(mem_allocator: std.mem.Allocator, n: i32) !?*inc.TreeNode(i32) {\nif (n == 0) return null;\nconst root = try mem_allocator.create(inc.TreeNode(i32));\nroot.init(0);\nroot.left = try buildTree(mem_allocator, n - 1);\nroot.right = try buildTree(mem_allocator, n - 1);\nreturn root;\n}\n

    Fig. \u6ee1\u4e8c\u53c9\u6811\u4ea7\u751f\u7684\u6307\u6570\u9636\u7a7a\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/space_complexity/#olog-n","title":"\u5bf9\u6570\u9636 \\(O(\\log n)\\)","text":"

    \u5bf9\u6570\u9636\u5e38\u89c1\u4e8e\u5206\u6cbb\u7b97\u6cd5\u3001\u6570\u636e\u7c7b\u578b\u8f6c\u6362\u7b49\u3002

    \u4f8b\u5982\u300c\u5f52\u5e76\u6392\u5e8f\u300d\uff0c\u957f\u5ea6\u4e3a \\(n\\) \u7684\u6570\u7ec4\u53ef\u4ee5\u5f62\u6210\u9ad8\u5ea6\u4e3a \\(\\log n\\) \u7684\u9012\u5f52\u6811\uff0c\u56e0\u6b64\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \u3002

    \u518d\u4f8b\u5982\u300c\u6570\u5b57\u8f6c\u5316\u4e3a\u5b57\u7b26\u4e32\u300d\uff0c\u8f93\u5165\u4efb\u610f\u6b63\u6574\u6570 \\(n\\) \uff0c\u5b83\u7684\u4f4d\u6570\u4e3a \\(\\log_{10} n\\) \uff0c\u5373\u5bf9\u5e94\u5b57\u7b26\u4e32\u957f\u5ea6\u4e3a \\(\\log_{10} n\\) \uff0c\u56e0\u6b64\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log_{10} n) = O(\\log n)\\) \u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/","title":"2.4. \u00a0 \u6743\u8861\u65f6\u95f4\u4e0e\u7a7a\u95f4","text":"

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u7a7a\u95f4\u590d\u6742\u5ea6\u90fd\u80fd\u591f\u8fbe\u5230\u6700\u4f18\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u540c\u65f6\u4f18\u5316\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u7a7a\u95f4\u590d\u6742\u5ea6\u662f\u975e\u5e38\u56f0\u96be\u7684\u3002

    \u964d\u4f4e\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u5f80\u5f80\u662f\u4ee5\u63d0\u5347\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a\u4ee3\u4ef7\u7684\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002\u6211\u4eec\u628a\u727a\u7272\u5185\u5b58\u7a7a\u95f4\u6765\u63d0\u5347\u7b97\u6cd5\u8fd0\u884c\u901f\u5ea6\u7684\u601d\u8def\u79f0\u4e3a\u300c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u300d\uff1b\u53cd\u4e4b\uff0c\u79f0\u4e4b\u4e3a\u300c\u4ee5\u65f6\u95f4\u6362\u7a7a\u95f4\u300d\u3002\u9009\u62e9\u54ea\u79cd\u601d\u8def\u53d6\u51b3\u4e8e\u6211\u4eec\u66f4\u770b\u91cd\u54ea\u4e2a\u65b9\u9762\u3002

    \u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u65f6\u95f4\u90fd\u662f\u6bd4\u7a7a\u95f4\u66f4\u5b9d\u8d35\u7684\uff0c\u53ea\u8981\u7a7a\u95f4\u590d\u6742\u5ea6\u4e0d\u8981\u592a\u79bb\u8c31\u3001\u80fd\u63a5\u53d7\u5c31\u884c\uff0c\u56e0\u6b64\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u6700\u4e3a\u5e38\u7528\u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/#241","title":"2.4.1. \u00a0 \u793a\u4f8b\u9898\u76ee *","text":"

    \u4ee5 LeetCode \u5168\u7ad9\u7b2c\u4e00\u9898 \u4e24\u6570\u4e4b\u548c \u4e3a\u4f8b\u3002

    \u4e24\u6570\u4e4b\u548c

    \u7ed9\u5b9a\u4e00\u4e2a\u6574\u6570\u6570\u7ec4 nums \u548c\u4e00\u4e2a\u6574\u6570\u76ee\u6807\u503c target \uff0c\u8bf7\u4f60\u5728\u8be5\u6570\u7ec4\u4e2d\u627e\u51fa\u201c\u548c\u201d\u4e3a\u76ee\u6807\u503c target \u7684\u90a3\u4e24\u4e2a\u6574\u6570\uff0c\u5e76\u8fd4\u56de\u5b83\u4eec\u7684\u6570\u7ec4\u4e0b\u6807\u3002

    \u4f60\u53ef\u4ee5\u5047\u8bbe\u6bcf\u79cd\u8f93\u5165\u53ea\u4f1a\u5bf9\u5e94\u4e00\u4e2a\u7b54\u6848\u3002\u4f46\u662f\uff0c\u6570\u7ec4\u4e2d\u540c\u4e00\u4e2a\u5143\u7d20\u5728\u7b54\u6848\u91cc\u4e0d\u80fd\u91cd\u590d\u51fa\u73b0\u3002

    \u4f60\u53ef\u4ee5\u6309\u4efb\u610f\u987a\u5e8f\u8fd4\u56de\u7b54\u6848\u3002

    \u300c\u66b4\u529b\u679a\u4e3e\u300d\u548c\u300c\u8f85\u52a9\u54c8\u5e0c\u8868\u300d\u5206\u522b\u5bf9\u5e94 \u7a7a\u95f4\u6700\u4f18 \u548c \u65f6\u95f4\u6700\u4f18 \u7684\u4e24\u79cd\u89e3\u6cd5\u3002\u672c\u7740\u65f6\u95f4\u6bd4\u7a7a\u95f4\u66f4\u5b9d\u8d35\u7684\u539f\u5219\uff0c\u540e\u8005\u662f\u672c\u9898\u7684\u6700\u4f73\u89e3\u6cd5\u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/#_1","title":"\u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e","text":"

    \u8003\u8651\u76f4\u63a5\u904d\u5386\u6240\u6709\u6240\u6709\u53ef\u80fd\u6027\u3002\u901a\u8fc7\u5f00\u542f\u4e00\u4e2a\u4e24\u5c42\u5faa\u73af\uff0c\u5224\u65ad\u4e24\u4e2a\u6574\u6570\u7684\u548c\u662f\u5426\u4e3a target \uff0c\u82e5\u662f\u5219\u8fd4\u56de\u5b83\u4fe9\u7684\u7d22\u5f15\uff08\u5373\u4e0b\u6807\uff09\u5373\u53ef\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig leetcode_two_sum.java
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nint[] twoSumBruteForce(int[] nums, int target) {\nint size = nums.length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (int i = 0; i < size - 1; i++) {\nfor (int j = i + 1; j < size; j++) {\nif (nums[i] + nums[j] == target)\nreturn new int[] { i, j };\n}\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.cpp
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nvector<int> twoSumBruteForce(vector<int>& nums, int target) {\nint size = nums.size();\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (int i = 0; i < size - 1; i++) {\nfor (int j = i + 1; j < size; j++) {\nif (nums[i] + nums[j] == target)\nreturn { i, j };\n}\n}\nreturn {};\n}\n
    leetcode_two_sum.py
    def two_sum_brute_force(nums: List[int], target: int) -> List[int]:\n\"\"\" \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e \"\"\"\n# \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor i in range(len(nums) - 1):\nfor j in range(i + 1, len(nums)):\nif nums[i] + nums[j] == target:\nreturn [i, j]\nreturn []\n
    leetcode_two_sum.go
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunc twoSumBruteForce(nums []int, target int) []int {\nsize := len(nums)\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor i := 0; i < size-1; i++ {\nfor j := i + 1; i < size; j++ {\nif nums[i]+nums[j] == target {\nreturn []int{i, j}\n}\n}\n}\nreturn nil\n}\n
    leetcode_two_sum.js
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunction twoSumBruteForce(nums, target) {\nconst n = nums.length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (let i = 0; i < n; i++) {\nfor (let j = i + 1; j < n; j++) {\nif (nums[i] + nums[j] === target) {\nreturn [i, j];\n}\n}\n}\nreturn [];\n}\n
    leetcode_two_sum.ts
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunction twoSumBruteForce(nums: number[], target: number): number[] {\nconst n = nums.length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (let i = 0; i < n; i++) {\nfor (let j = i + 1; j < n; j++) {\nif (nums[i] + nums[j] === target) {\nreturn [i, j];\n}\n}\n}\nreturn [];\n};\n
    leetcode_two_sum.c
    [class]{}-[func]{twoSumBruteForce}\n
    leetcode_two_sum.cs
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nint[] twoSumBruteForce(int[] nums, int target)\n{\nint size = nums.Length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (int i = 0; i < size - 1; i++)\n{\nfor (int j = i + 1; j < size; j++)\n{\nif (nums[i] + nums[j] == target)\nreturn new int[] { i, j };\n}\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.swift
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunc twoSumBruteForce(nums: [Int], target: Int) -> [Int] {\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor i in nums.indices.dropLast() {\nfor j in nums.indices.dropFirst(i + 1) {\nif nums[i] + nums[j] == target {\nreturn [i, j]\n}\n}\n}\nreturn [0]\n}\n
    leetcode_two_sum.zig
    // \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e\nfn twoSumBruteForce(nums: []i32, target: i32) ?[2]i32 {\nvar size: usize = nums.len;\nvar i: usize = 0;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nwhile (i < size - 1) : (i += 1) {\nvar j = i + 1;\nwhile (j < size) : (j += 1) {\nif (nums[i] + nums[j] == target) {\nreturn [_]i32{@intCast(i32, i), @intCast(i32, j)};\n}\n}\n}\nreturn null;\n}\n

    \u8be5\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\) \uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u5c5e\u4e8e\u65f6\u95f4\u6362\u7a7a\u95f4\u3002\u672c\u65b9\u6cd5\u65f6\u95f4\u590d\u6742\u5ea6\u8f83\u9ad8\uff0c\u5728\u5927\u6570\u636e\u91cf\u4e0b\u975e\u5e38\u8017\u65f6\u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/#_2","title":"\u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868","text":"

    \u8003\u8651\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868\uff0ckey \u4e3a\u6570\u7ec4\u5143\u7d20\u3001value \u4e3a\u5143\u7d20\u7d22\u5f15\u3002\u5faa\u73af\u904d\u5386\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e2a\u5143\u7d20 num \uff0c\u5e76\u6267\u884c\uff1a

    1. \u5224\u65ad\u6570\u5b57 target - num \u662f\u5426\u5728\u54c8\u5e0c\u8868\u4e2d\uff0c\u82e5\u662f\u5219\u76f4\u63a5\u8fd4\u56de\u8be5\u4e24\u4e2a\u5143\u7d20\u7684\u7d22\u5f15\uff1b
    2. \u5c06\u5143\u7d20 num \u548c\u5176\u7d22\u5f15\u6dfb\u52a0\u8fdb\u54c8\u5e0c\u8868\uff1b
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig leetcode_two_sum.java
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nint[] twoSumHashTable(int[] nums, int target) {\nint size = nums.length;\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nMap<Integer, Integer> dic = new HashMap<>();\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (int i = 0; i < size; i++) {\nif (dic.containsKey(target - nums[i])) {\nreturn new int[] { dic.get(target - nums[i]), i };\n}\ndic.put(nums[i], i);\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.cpp
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nvector<int> twoSumHashTable(vector<int>& nums, int target) {\nint size = nums.size();\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nunordered_map<int, int> dic;\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (int i = 0; i < size; i++) {\nif (dic.find(target - nums[i]) != dic.end()) {\nreturn { dic[target - nums[i]], i };\n}\ndic.emplace(nums[i], i);\n}\nreturn {};\n}\n
    leetcode_two_sum.py
    def two_sum_hash_table(nums: List[int], target: int) -> List[int]:\n\"\"\" \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 \"\"\"\n# \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\ndic = {}\n# \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor i in range(len(nums)):\nif target - nums[i] in dic:\nreturn [dic[target - nums[i]], i]\ndic[nums[i]] = i\nreturn []\n
    leetcode_two_sum.go
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunc twoSumHashTable(nums []int, target int) []int {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nhashTable := map[int]int{}\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor idx, val := range nums {\nif preIdx, ok := hashTable[target-val]; ok {\nreturn []int{preIdx, idx}\n}\nhashTable[val] = idx\n}\nreturn nil\n}\n
    leetcode_two_sum.js
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunction twoSumHashTable(nums, target) {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nlet m = {};\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (let i = 0; i < nums.length; i++) {\nif (m[nums[i]] !== undefined) {\nreturn [m[nums[i]], i];\n} else {\nm[target - nums[i]] = i;\n}\n}\nreturn [];\n}\n
    leetcode_two_sum.ts
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunction twoSumHashTable(nums: number[], target: number): number[] {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nlet m: Map<number, number> = new Map();\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (let i = 0; i < nums.length; i++) {\nlet index = m.get(nums[i]);\nif (index !== undefined) {\nreturn [index, i];\n} else {\nm.set(target - nums[i], i);\n}\n}\nreturn [];\n};\n
    leetcode_two_sum.c
    [class]{}-[func]{twoSumHashTable}\n
    leetcode_two_sum.cs
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nint[] twoSumHashTable(int[] nums, int target)\n{\nint size = nums.Length;\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nDictionary<int, int> dic = new();\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (int i = 0; i < size; i++)\n{\nif (dic.ContainsKey(target - nums[i]))\n{\nreturn new int[] { dic[target - nums[i]], i };\n}\ndic.Add(nums[i], i);\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.swift
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunc twoSumHashTable(nums: [Int], target: Int) -> [Int] {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nvar dic: [Int: Int] = [:]\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor i in nums.indices {\nif let j = dic[target - nums[i]] {\nreturn [j, i]\n}\ndic[nums[i]] = i\n}\nreturn [0]\n}\n
    leetcode_two_sum.zig
    // \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868\nfn twoSumHashTable(nums: []i32, target: i32) !?[2]i32 {\nvar size: usize = nums.len;\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nvar dic = std.AutoHashMap(i32, i32).init(std.heap.page_allocator);\ndefer dic.deinit();\nvar i: usize = 0;\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nwhile (i < size) : (i += 1) {\nif (dic.contains(target - nums[i])) {\nreturn [_]i32{dic.get(target - nums[i]).?, @intCast(i32, i)};\n}\ntry dic.put(nums[i], @intCast(i32, i));\n}\nreturn null;\n}\n

    \u8be5\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \uff0c\u4f53\u73b0\u7a7a\u95f4\u6362\u65f6\u95f4\u3002\u672c\u65b9\u6cd5\u867d\u7136\u5f15\u5165\u4e86\u989d\u5916\u7a7a\u95f4\u4f7f\u7528\uff0c\u4f46\u65f6\u95f4\u548c\u7a7a\u95f4\u4f7f\u7528\u6574\u4f53\u66f4\u52a0\u5747\u8861\uff0c\u56e0\u6b64\u4e3a\u672c\u9898\u6700\u4f18\u89e3\u6cd5\u3002

    "},{"location":"chapter_computational_complexity/summary/","title":"2.5. \u00a0 \u5c0f\u7ed3","text":""},{"location":"chapter_computational_complexity/summary/#_1","title":"\u7b97\u6cd5\u6548\u7387\u8bc4\u4f30","text":"
    • \u300c\u65f6\u95f4\u6548\u7387\u300d\u548c\u300c\u7a7a\u95f4\u6548\u7387\u300d\u662f\u7b97\u6cd5\u6027\u80fd\u7684\u4e24\u4e2a\u91cd\u8981\u7684\u8bc4\u4ef7\u7ef4\u5ea6\u3002
    • \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u300c\u5b9e\u9645\u6d4b\u8bd5\u300d\u6765\u8bc4\u4f30\u7b97\u6cd5\u6548\u7387\uff0c\u4f46\u96be\u4ee5\u6392\u9664\u6d4b\u8bd5\u73af\u5883\u7684\u5e72\u6270\uff0c\u5e76\u4e14\u975e\u5e38\u8017\u8d39\u8ba1\u7b97\u8d44\u6e90\u3002
    • \u300c\u590d\u6742\u5ea6\u5206\u6790\u300d\u514b\u670d\u4e86\u5b9e\u9645\u6d4b\u8bd5\u7684\u5f0a\u7aef\uff0c\u5206\u6790\u7ed3\u679c\u9002\u7528\u4e8e\u6240\u6709\u8fd0\u884c\u5e73\u53f0\uff0c\u5e76\u4e14\u53ef\u4ee5\u4f53\u73b0\u4e0d\u540c\u6570\u636e\u5927\u5c0f\u4e0b\u7684\u7b97\u6cd5\u6548\u7387\u3002
    "},{"location":"chapter_computational_complexity/summary/#_2","title":"\u65f6\u95f4\u590d\u6742\u5ea6","text":"
    • \u300c\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u7edf\u8ba1\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf\uff0c\u53ef\u4ee5\u6709\u6548\u8bc4\u4f30\u7b97\u6cd5\u6548\u7387\uff0c\u4f46\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u53ef\u80fd\u5931\u6548\uff0c\u6bd4\u5982\u5728\u8f93\u5165\u6570\u636e\u91cf\u8f83\u5c0f\u6216\u65f6\u95f4\u590d\u6742\u5ea6\u76f8\u540c\u65f6\uff0c\u65e0\u6cd5\u7cbe\u786e\u5bf9\u6bd4\u7b97\u6cd5\u6548\u7387\u7684\u4f18\u52a3\u6027\u3002
    • \u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u4f7f\u7528\u5927 \\(O\\) \u7b26\u53f7\u8868\u793a\uff0c\u5373\u51fd\u6570\u6e10\u8fd1\u4e0a\u754c\uff0c\u5176\u53cd\u6620\u5f53 \\(n\\) \u8d8b\u4e8e\u6b63\u65e0\u7a77\u65f6\uff0c\\(T(n)\\) \u5904\u4e8e\u4f55\u79cd\u589e\u957f\u7ea7\u522b\u3002
    • \u63a8\u7b97\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u4e3a\u4e24\u6b65\uff0c\u9996\u5148\u7edf\u8ba1\u8ba1\u7b97\u64cd\u4f5c\u6570\u91cf\uff0c\u518d\u5224\u65ad\u6e10\u8fd1\u4e0a\u754c\u3002
    • \u5e38\u89c1\u65f6\u95f4\u590d\u6742\u5ea6\u4ece\u5c0f\u5230\u5927\u6392\u5217\u6709 \\(O(1)\\) , \\(O(\\log n)\\) , \\(O(n)\\) , \\(O(n \\log n)\\) , \\(O(n^2)\\) , \\(O(2^n)\\) , \\(O(n!)\\) \u3002
    • \u67d0\u4e9b\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u662f\u6052\u5b9a\u7684\uff0c\u800c\u662f\u4e0e\u8f93\u5165\u6570\u636e\u7684\u5206\u5e03\u6709\u5173\u3002\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u4e3a\u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u548c\u300c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u300d\uff0c\u540e\u8005\u51e0\u4e4e\u4e0d\u7528\uff0c\u56e0\u4e3a\u8f93\u5165\u6570\u636e\u9700\u8981\u6ee1\u8db3\u82db\u523b\u7684\u6761\u4ef6\u624d\u80fd\u8fbe\u5230\u6700\u4f73\u60c5\u51b5\u3002
    • \u300c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u53ef\u4ee5\u53cd\u6620\u5728\u968f\u673a\u6570\u636e\u8f93\u5165\u4e0b\u7684\u7b97\u6cd5\u6548\u7387\uff0c\u6700\u8d34\u5408\u5b9e\u9645\u4f7f\u7528\u60c5\u51b5\u4e0b\u7684\u7b97\u6cd5\u6027\u80fd\u3002\u8ba1\u7b97\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u9700\u8981\u7edf\u8ba1\u8f93\u5165\u6570\u636e\u7684\u5206\u5e03\uff0c\u4ee5\u53ca\u7efc\u5408\u540e\u7684\u6570\u5b66\u671f\u671b\u3002
    "},{"location":"chapter_computational_complexity/summary/#_3","title":"\u7a7a\u95f4\u590d\u6742\u5ea6","text":"
    • \u4e0e\u65f6\u95f4\u590d\u6742\u5ea6\u7684\u5b9a\u4e49\u7c7b\u4f3c\uff0c\u300c\u7a7a\u95f4\u590d\u6742\u5ea6\u300d\u7edf\u8ba1\u7b97\u6cd5\u5360\u7528\u7a7a\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf\u3002

    • \u7b97\u6cd5\u8fd0\u884c\u4e2d\u76f8\u5173\u5185\u5b58\u7a7a\u95f4\u53ef\u5206\u4e3a\u8f93\u5165\u7a7a\u95f4\u3001\u6682\u5b58\u7a7a\u95f4\u3001\u8f93\u51fa\u7a7a\u95f4\u3002\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u8f93\u5165\u7a7a\u95f4\u4e0d\u8ba1\u5165\u7a7a\u95f4\u590d\u6742\u5ea6\u8ba1\u7b97\u3002\u6682\u5b58\u7a7a\u95f4\u53ef\u5206\u4e3a\u6307\u4ee4\u7a7a\u95f4\u3001\u6570\u636e\u7a7a\u95f4\u3001\u6808\u5e27\u7a7a\u95f4\uff0c\u5176\u4e2d\u6808\u5e27\u7a7a\u95f4\u4e00\u822c\u5728\u9012\u5f52\u51fd\u6570\u4e2d\u624d\u4f1a\u5f71\u54cd\u5230\u7a7a\u95f4\u590d\u6742\u5ea6\u3002

    • \u6211\u4eec\u4e00\u822c\u53ea\u5173\u5fc3\u300c\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u300d\uff0c\u5373\u7edf\u8ba1\u7b97\u6cd5\u5728\u300c\u6700\u5dee\u8f93\u5165\u6570\u636e\u300d\u548c\u300c\u6700\u5dee\u8fd0\u884c\u65f6\u95f4\u70b9\u300d\u4e0b\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u3002
    • \u5e38\u89c1\u7a7a\u95f4\u590d\u6742\u5ea6\u4ece\u5c0f\u5230\u5927\u6392\u5217\u6709 \\(O(1)\\) , \\(O(\\log n)\\) , \\(O(n)\\) , \\(O(n^2)\\) , \\(O(2^n)\\) \u3002
    "},{"location":"chapter_computational_complexity/time_complexity/","title":"2.2. \u00a0 \u65f6\u95f4\u590d\u6742\u5ea6","text":""},{"location":"chapter_computational_complexity/time_complexity/#221","title":"2.2.1. \u00a0 \u7edf\u8ba1\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4","text":"

    \u8fd0\u884c\u65f6\u95f4\u80fd\u591f\u76f4\u89c2\u4e14\u51c6\u786e\u5730\u4f53\u73b0\u51fa\u7b97\u6cd5\u7684\u6548\u7387\u6c34\u5e73\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981 \u51c6\u786e\u9884\u4f30\u4e00\u6bb5\u4ee3\u7801\u7684\u8fd0\u884c\u65f6\u95f4 \uff0c\u8be5\u5982\u4f55\u505a\u5462\uff1f

    1. \u9996\u5148\u9700\u8981 \u786e\u5b9a\u8fd0\u884c\u5e73\u53f0 \uff0c\u5305\u62ec\u786c\u4ef6\u914d\u7f6e\u3001\u7f16\u7a0b\u8bed\u8a00\u3001\u7cfb\u7edf\u73af\u5883\u7b49\uff0c\u8fd9\u4e9b\u90fd\u4f1a\u5f71\u54cd\u5230\u4ee3\u7801\u7684\u8fd0\u884c\u6548\u7387\u3002
    2. \u8bc4\u4f30 \u5404\u79cd\u8ba1\u7b97\u64cd\u4f5c\u7684\u6240\u9700\u8fd0\u884c\u65f6\u95f4 \uff0c\u4f8b\u5982\u52a0\u6cd5\u64cd\u4f5c + \u9700\u8981 1 ns \uff0c\u4e58\u6cd5\u64cd\u4f5c * \u9700\u8981 10 ns \uff0c\u6253\u5370\u64cd\u4f5c\u9700\u8981 5 ns \u7b49\u3002
    3. \u6839\u636e\u4ee3\u7801 \u7edf\u8ba1\u6240\u6709\u8ba1\u7b97\u64cd\u4f5c\u7684\u6570\u91cf \uff0c\u5e76\u5c06\u6240\u6709\u64cd\u4f5c\u7684\u6267\u884c\u65f6\u95f4\u6c42\u548c\uff0c\u5373\u53ef\u5f97\u5230\u8fd0\u884c\u65f6\u95f4\u3002

    \u4f8b\u5982\u4ee5\u4e0b\u4ee3\u7801\uff0c\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u6839\u636e\u4ee5\u4e0a\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5f97\u5230\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u4e3a \\(6n + 12\\) ns \u3002

    \\[ 1 + 1 + 10 + (1 + 5) \\times n = 6n + 12 \\] JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n) {\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {  // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nSystem.out.println(0);     // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n) {\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {  // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\ncout << 0 << endl;         // 5 ns\n}\n}\n
    # \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\ndef algorithm(n: int) -> None:\na = 2      # 1 ns\na = a + 1  # 1 ns\na = a * 2  # 10 ns\n# \u5faa\u73af n \u6b21\nfor _ in range(n):  # 1 ns\nprint(0)        # 5 ns\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunc algorithm(n int) {\na := 2      // 1 ns\na = a + 1   // 1 ns\na = a * 2   // 10 ns\n// \u5faa\u73af n \u6b21\nfor i := 0; i < n; i++ {    // 1 ns\nfmt.Println(a)          // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunction algorithm(n) {\nvar a = 2; // 1 ns\na = a + 1; // 1 ns\na = a * 2; // 10 ns\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++) { // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nconsole.log(0); // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunction algorithm(n: number): void {\nvar a: number = 2; // 1 ns\na = a + 1; // 1 ns\na = a * 2; // 10 ns\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++) { // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nconsole.log(0); // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n) {\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {   // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nprintf(\"%d\", 0);            // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n)\n{\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++)\n{  // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nConsole.WriteLine(0);     // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunc algorithm(n: Int) {\nvar a = 2 // 1 ns\na = a + 1 // 1 ns\na = a * 2 // 10 ns\n// \u5faa\u73af n \u6b21\nfor _ in 0 ..< n { // 1 ns\nprint(0) // 5 ns\n}\n}\n
    \n

    \u4f46\u5b9e\u9645\u4e0a\uff0c \u7edf\u8ba1\u7b97\u6cd5\u7684\u8fd0\u884c\u65f6\u95f4\u65e2\u4e0d\u5408\u7406\u4e5f\u4e0d\u73b0\u5b9e\u3002\u9996\u5148\uff0c\u6211\u4eec\u4e0d\u5e0c\u671b\u9884\u4f30\u65f6\u95f4\u548c\u8fd0\u884c\u5e73\u53f0\u7ed1\u5b9a\uff0c\u6bd5\u7adf\u7b97\u6cd5\u9700\u8981\u8dd1\u5728\u5404\u5f0f\u5404\u6837\u7684\u5e73\u53f0\u4e4b\u4e0a\u3002\u5176\u6b21\uff0c\u6211\u4eec\u5f88\u96be\u83b7\u77e5\u6bcf\u4e00\u79cd\u64cd\u4f5c\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u8fd9\u4e3a\u9884\u4f30\u8fc7\u7a0b\u5e26\u6765\u4e86\u6781\u5927\u7684\u96be\u5ea6\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#222","title":"2.2.2. \u00a0 \u7edf\u8ba1\u65f6\u95f4\u589e\u957f\u8d8b\u52bf","text":"

    \u300c\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u6790\u300d\u91c7\u53d6\u4e86\u4e0d\u540c\u7684\u505a\u6cd5\uff0c\u5176\u7edf\u8ba1\u7684\u4e0d\u662f\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\uff0c\u800c\u662f \u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf \u3002

    \u201c\u65f6\u95f4\u589e\u957f\u8d8b\u52bf\u201d\u8fd9\u4e2a\u6982\u5ff5\u6bd4\u8f83\u62bd\u8c61\uff0c\u6211\u4eec\u501f\u52a9\u4e00\u4e2a\u4f8b\u5b50\u6765\u7406\u89e3\u3002\u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u7ed9\u5b9a\u4e09\u4e2a\u7b97\u6cd5 A , B , C \u3002

    • \u7b97\u6cd5 A \u53ea\u6709 \\(1\\) \u4e2a\u6253\u5370\u64cd\u4f5c\uff0c\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u4e0d\u968f\u7740 \\(n\\) \u589e\u5927\u800c\u589e\u957f\u3002\u6211\u4eec\u79f0\u6b64\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a\u300c\u5e38\u6570\u9636\u300d\u3002
    • \u7b97\u6cd5 B \u4e2d\u7684\u6253\u5370\u64cd\u4f5c\u9700\u8981\u5faa\u73af \\(n\\) \u6b21\uff0c\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u968f\u7740 \\(n\\) \u589e\u5927\u6210\u7ebf\u6027\u589e\u957f\u3002\u6b64\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u88ab\u79f0\u4e3a\u300c\u7ebf\u6027\u9636\u300d\u3002
    • \u7b97\u6cd5 C \u4e2d\u7684\u6253\u5370\u64cd\u4f5c\u9700\u8981\u5faa\u73af \\(1000000\\) \u6b21\uff0c\u4f46\u8fd0\u884c\u65f6\u95f4\u4ecd\u4e0e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\u3002\u56e0\u6b64 C \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u548c A \u76f8\u540c\uff0c\u4ecd\u4e3a\u300c\u5e38\u6570\u9636\u300d\u3002
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n) {\nSystem.out.println(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n) {\nfor (int i = 0; i < n; i++) {\nSystem.out.println(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n) {\nfor (int i = 0; i < 1000000; i++) {\nSystem.out.println(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n) {\ncout << 0 << endl;\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n) {\nfor (int i = 0; i < n; i++) {\ncout << 0 << endl;\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n) {\nfor (int i = 0; i < 1000000; i++) {\ncout << 0 << endl;\n}\n}\n
    # \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\ndef algorithm_A(n: int) -> None:\nprint(0)\n# \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\ndef algorithm_B(n: int) -> None:\nfor _ in range(n):\nprint(0)\n# \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\ndef algorithm_C(n: int) -> None:\nfor _ in range(1000000):\nprint(0)\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithm_A(n int) {\nfmt.Println(0)\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunc algorithm_B(n int) {\nfor i := 0; i < n; i++ {\nfmt.Println(0)\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithm_C(n int) {\nfor i := 0; i < 1000000; i++ {\nfmt.Println(0)\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_A(n) {\nconsole.log(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunction algorithm_B(n) {\nfor (let i = 0; i < n; i++) {\nconsole.log(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_C(n) {\nfor (let i = 0; i < 1000000; i++) {\nconsole.log(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_A(n: number): void {\nconsole.log(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunction algorithm_B(n: number): void {\nfor (let i = 0; i < n; i++) {\nconsole.log(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_C(n: number): void {\nfor (let i = 0; i < 1000000; i++) {\nconsole.log(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n) {\nprintf(\"%d\", 0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n) {\nfor (int i = 0; i < n; i++) {\nprintf(\"%d\", 0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n) {\nfor (int i = 0; i < 1000000; i++) {\nprintf(\"%d\", 0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n)\n{\nConsole.WriteLine(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n)\n{\nfor (int i = 0; i < n; i++)\n{\nConsole.WriteLine(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n)\n{\nfor (int i = 0; i < 1000000; i++)\n{\nConsole.WriteLine(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithmA(n: Int) {\nprint(0)\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunc algorithmB(n: Int) {\nfor _ in 0 ..< n {\nprint(0)\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithmC(n: Int) {\nfor _ in 0 ..< 1000000 {\nprint(0)\n}\n}\n
    \n

    Fig. \u7b97\u6cd5 A, B, C \u7684\u65f6\u95f4\u589e\u957f\u8d8b\u52bf

    \u76f8\u6bd4\u76f4\u63a5\u7edf\u8ba1\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u6790\u7684\u505a\u6cd5\u6709\u4ec0\u4e48\u597d\u5904\u5462\uff1f\u4ee5\u53ca\u6709\u4ec0\u4e48\u4e0d\u8db3\uff1f

    \u65f6\u95f4\u590d\u6742\u5ea6\u53ef\u4ee5\u6709\u6548\u8bc4\u4f30\u7b97\u6cd5\u6548\u7387\u3002\u7b97\u6cd5 B \u8fd0\u884c\u65f6\u95f4\u7684\u589e\u957f\u662f\u7ebf\u6027\u7684\uff0c\u5728 \\(n > 1\\) \u65f6\u6162\u4e8e\u7b97\u6cd5 A \uff0c\u5728 \\(n > 1000000\\) \u65f6\u6162\u4e8e\u7b97\u6cd5 C \u3002\u5b9e\u8d28\u4e0a\uff0c\u53ea\u8981\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u8db3\u591f\u5927\uff0c\u590d\u6742\u5ea6\u4e3a\u300c\u5e38\u6570\u9636\u300d\u7684\u7b97\u6cd5\u4e00\u5b9a\u4f18\u4e8e\u300c\u7ebf\u6027\u9636\u300d\u7684\u7b97\u6cd5\uff0c\u8fd9\u4e5f\u6b63\u662f\u65f6\u95f4\u589e\u957f\u8d8b\u52bf\u7684\u542b\u4e49\u3002

    \u65f6\u95f4\u590d\u6742\u5ea6\u7684\u63a8\u7b97\u65b9\u6cd5\u66f4\u52a0\u7b80\u4fbf\u3002\u5728\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u6790\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7edf\u8ba1\u300c\u8ba1\u7b97\u64cd\u4f5c\u7684\u8fd0\u884c\u65f6\u95f4\u300d\u7b80\u5316\u4e3a\u7edf\u8ba1\u300c\u8ba1\u7b97\u64cd\u4f5c\u7684\u6570\u91cf\u300d\uff0c\u8fd9\u662f\u56e0\u4e3a\uff0c\u65e0\u8bba\u662f\u8fd0\u884c\u5e73\u53f0\u8fd8\u662f\u8ba1\u7b97\u64cd\u4f5c\u7c7b\u578b\uff0c\u90fd\u4e0e\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u7684\u589e\u957f\u8d8b\u52bf\u65e0\u5173\u3002\u56e0\u800c\uff0c\u6211\u4eec\u53ef\u4ee5\u7b80\u5355\u5730\u5c06\u6240\u6709\u8ba1\u7b97\u64cd\u4f5c\u7684\u6267\u884c\u65f6\u95f4\u7edf\u4e00\u770b\u4f5c\u662f\u76f8\u540c\u7684\u201c\u5355\u4f4d\u65f6\u95f4\u201d\uff0c\u8fd9\u6837\u7684\u7b80\u5316\u505a\u6cd5\u5927\u5927\u964d\u4f4e\u4e86\u4f30\u7b97\u96be\u5ea6\u3002

    \u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u5b58\u5728\u4e00\u5b9a\u7684\u5c40\u9650\u6027\u3002\u6bd4\u5982\uff0c\u867d\u7136\u7b97\u6cd5 A \u548c C \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u76f8\u540c\uff0c\u4f46\u662f\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u95f4\u6709\u975e\u5e38\u5927\u7684\u5dee\u522b\u3002\u518d\u6bd4\u5982\uff0c\u867d\u7136\u7b97\u6cd5 B \u6bd4 C \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8981\u66f4\u9ad8\uff0c\u4f46\u5728\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u6bd4\u8f83\u5c0f\u65f6\uff0c\u7b97\u6cd5 B \u662f\u8981\u660e\u663e\u4f18\u4e8e\u7b97\u6cd5 C \u7684\u3002\u5bf9\u4e8e\u4ee5\u4e0a\u60c5\u51b5\uff0c\u6211\u4eec\u5f88\u96be\u4ec5\u51ed\u65f6\u95f4\u590d\u6742\u5ea6\u6765\u5224\u5b9a\u7b97\u6cd5\u6548\u7387\u9ad8\u4f4e\u3002\u7136\u800c\uff0c\u5373\u4f7f\u5b58\u5728\u8fd9\u4e9b\u95ee\u9898\uff0c\u590d\u6742\u5ea6\u5206\u6790\u4ecd\u7136\u662f\u8bc4\u5224\u7b97\u6cd5\u6548\u7387\u7684\u6700\u6709\u6548\u4e14\u5e38\u7528\u7684\u65b9\u6cd5\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#223","title":"2.2.3. \u00a0 \u51fd\u6570\u6e10\u8fd1\u4e0a\u754c","text":"

    \u8bbe\u7b97\u6cd5\u300c\u8ba1\u7b97\u64cd\u4f5c\u6570\u91cf\u300d\u4e3a \\(T(n)\\) \uff0c\u5176\u662f\u4e00\u4e2a\u5173\u4e8e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u7684\u51fd\u6570\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u7b97\u6cd5\u7684\u64cd\u4f5c\u6570\u91cf\u4e3a

    \\[ T(n) = 3 + 2n \\] JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    void algorithm(int n) {\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) { // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nSystem.out.println(0);    // +1\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) { // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\ncout << 0 << endl;    // +1\n}\n}\n
    def algorithm(n: int) -> None:\na: int = 1  # +1\na = a + 1  # +1\na = a * 2  # +1\n# \u5faa\u73af n \u6b21\nfor i in range(n):  # +1\nprint(0)        # +1\n
    func algorithm(n int) {\na := 1      // +1\na = a + 1   // +1\na = a * 2   // +1\n// \u5faa\u73af n \u6b21\nfor i := 0; i < n; i++ {   // +1\nfmt.Println(a)         // +1\n}\n}\n
    function algorithm(n) {\nvar a = 1; // +1\na += 1; // +1\na *= 2; // +1\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++){ // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nconsole.log(0); // +1\n}\n}\n
    function algorithm(n: number): void{\nvar a: number = 1; // +1\na += 1; // +1\na *= 2; // +1\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++){ // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nconsole.log(0); // +1\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {   // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nprintf(\"%d\", 0);            // +1\n}\n}  
    void algorithm(int n)\n{\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\n{\nConsole.WriteLine(0);   // +1\n}\n}\n
    func algorithm(n: Int) {\nvar a = 1 // +1\na = a + 1 // +1\na = a * 2 // +1\n// \u5faa\u73af n \u6b21\nfor _ in 0 ..< n { // +1\nprint(0) // +1\n}\n}\n
    \n

    \\(T(n)\\) \u662f\u4e2a\u4e00\u6b21\u51fd\u6570\uff0c\u8bf4\u660e\u65f6\u95f4\u589e\u957f\u8d8b\u52bf\u662f\u7ebf\u6027\u7684\uff0c\u56e0\u6b64\u6613\u5f97\u65f6\u95f4\u590d\u6742\u5ea6\u662f\u7ebf\u6027\u9636\u3002

    \u6211\u4eec\u5c06\u7ebf\u6027\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8bb0\u4e3a \\(O(n)\\) \uff0c\u8fd9\u4e2a\u6570\u5b66\u7b26\u53f7\u88ab\u79f0\u4e3a\u300c\u5927 \\(O\\) \u8bb0\u53f7 Big-\\(O\\) Notation\u300d\uff0c\u4ee3\u8868\u51fd\u6570 \\(T(n)\\) \u7684\u300c\u6e10\u8fd1\u4e0a\u754c asymptotic upper bound\u300d\u3002

    \u6211\u4eec\u8981\u63a8\u7b97\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u672c\u8d28\u4e0a\u662f\u5728\u8ba1\u7b97\u300c\u64cd\u4f5c\u6570\u91cf\u51fd\u6570 \\(T(n)\\) \u300d\u7684\u6e10\u8fd1\u4e0a\u754c\u3002\u4e0b\u9762\u6211\u4eec\u5148\u6765\u770b\u770b\u51fd\u6570\u6e10\u8fd1\u4e0a\u754c\u7684\u6570\u5b66\u5b9a\u4e49\u3002

    \u51fd\u6570\u6e10\u8fd1\u4e0a\u754c

    \u82e5\u5b58\u5728\u6b63\u5b9e\u6570 \\(c\\) \u548c\u5b9e\u6570 \\(n_0\\) \uff0c\u4f7f\u5f97\u5bf9\u4e8e\u6240\u6709\u7684 \\(n > n_0\\) \uff0c\u5747\u6709 $$ T(n) \\leq c \\cdot f(n) $$ \u5219\u53ef\u8ba4\u4e3a \\(f(n)\\) \u7ed9\u51fa\u4e86 \\(T(n)\\) \u7684\u4e00\u4e2a\u6e10\u8fd1\u4e0a\u754c\uff0c\u8bb0\u4e3a $$ T(n) = O(f(n)) $$

    Fig. \u51fd\u6570\u7684\u6e10\u8fd1\u4e0a\u754c

    \u672c\u8d28\u4e0a\u770b\uff0c\u8ba1\u7b97\u6e10\u8fd1\u4e0a\u754c\u5c31\u662f\u5728\u627e\u4e00\u4e2a\u51fd\u6570 \\(f(n)\\) \uff0c\u4f7f\u5f97\u5728 \\(n\\) \u8d8b\u5411\u4e8e\u65e0\u7a77\u5927\u65f6\uff0c\\(T(n)\\) \u548c \\(f(n)\\) \u5904\u4e8e\u76f8\u540c\u7684\u589e\u957f\u7ea7\u522b\uff08\u4ec5\u76f8\u5dee\u4e00\u4e2a\u5e38\u6570\u9879 \\(c\\) \u7684\u500d\u6570\uff09\u3002

    Tip

    \u6e10\u8fd1\u4e0a\u754c\u7684\u6570\u5b66\u5473\u513f\u6709\u70b9\u91cd\uff0c\u5982\u679c\u4f60\u611f\u89c9\u6ca1\u6709\u5b8c\u5168\u7406\u89e3\uff0c\u65e0\u9700\u62c5\u5fc3\uff0c\u56e0\u4e3a\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\u6211\u4eec\u53ea\u9700\u8981\u4f1a\u63a8\u7b97\u5373\u53ef\uff0c\u6570\u5b66\u610f\u4e49\u53ef\u4ee5\u6162\u6162\u9886\u609f\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#224","title":"2.2.4. \u00a0 \u63a8\u7b97\u65b9\u6cd5","text":"

    \u63a8\u7b97\u51fa \\(f(n)\\) \u540e\uff0c\u6211\u4eec\u5c31\u5f97\u5230\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(f(n))\\) \u3002\u90a3\u4e48\uff0c\u5982\u4f55\u6765\u786e\u5b9a\u6e10\u8fd1\u4e0a\u754c \\(f(n)\\) \u5462\uff1f\u603b\u4f53\u5206\u4e3a\u4e24\u6b65\uff0c\u9996\u5148\u300c\u7edf\u8ba1\u64cd\u4f5c\u6570\u91cf\u300d\uff0c\u7136\u540e\u300c\u5224\u65ad\u6e10\u8fd1\u4e0a\u754c\u300d\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#1","title":"1) \u7edf\u8ba1\u64cd\u4f5c\u6570\u91cf","text":"

    \u5bf9\u7740\u4ee3\u7801\uff0c\u4ece\u4e0a\u5230\u4e0b\u4e00\u884c\u4e00\u884c\u5730\u8ba1\u6570\u5373\u53ef\u3002\u7136\u800c\uff0c\u7531\u4e8e\u4e0a\u8ff0 \\(c \\cdot f(n)\\) \u4e2d\u7684\u5e38\u6570\u9879 \\(c\\) \u53ef\u4ee5\u53d6\u4efb\u610f\u5927\u5c0f\uff0c\u56e0\u6b64\u64cd\u4f5c\u6570\u91cf \\(T(n)\\) \u4e2d\u7684\u5404\u79cd\u7cfb\u6570\u3001\u5e38\u6570\u9879\u90fd\u53ef\u4ee5\u88ab\u5ffd\u7565\u3002\u6839\u636e\u6b64\u539f\u5219\uff0c\u53ef\u4ee5\u603b\u7ed3\u51fa\u4ee5\u4e0b\u8ba1\u6570\u5077\u61d2\u6280\u5de7\uff1a

    1. \u8df3\u8fc7\u6570\u91cf\u4e0e \\(n\\) \u65e0\u5173\u7684\u64cd\u4f5c\u3002\u56e0\u4e3a\u4ed6\u4eec\u90fd\u662f \\(T(n)\\) \u4e2d\u7684\u5e38\u6570\u9879\uff0c\u5bf9\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u4ea7\u751f\u5f71\u54cd\u3002
    2. \u7701\u7565\u6240\u6709\u7cfb\u6570\u3002\u4f8b\u5982\uff0c\u5faa\u73af \\(2n\\) \u6b21\u3001\\(5n + 1\\) \u6b21\u3001\u2026\u2026\uff0c\u90fd\u53ef\u4ee5\u5316\u7b80\u8bb0\u4e3a \\(n\\) \u6b21\uff0c\u56e0\u4e3a \\(n\\) \u524d\u9762\u7684\u7cfb\u6570\u5bf9\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u4e0d\u4ea7\u751f\u5f71\u54cd\u3002
    3. \u5faa\u73af\u5d4c\u5957\u65f6\u4f7f\u7528\u4e58\u6cd5\u3002\u603b\u64cd\u4f5c\u6570\u91cf\u7b49\u4e8e\u5916\u5c42\u5faa\u73af\u548c\u5185\u5c42\u5faa\u73af\u64cd\u4f5c\u6570\u91cf\u4e4b\u79ef\uff0c\u6bcf\u4e00\u5c42\u5faa\u73af\u4f9d\u7136\u53ef\u4ee5\u5206\u522b\u5957\u7528\u4e0a\u8ff0 1. \u548c 2. \u6280\u5de7\u3002

    \u4ee5\u4e0b\u793a\u4f8b\u5c55\u793a\u4e86\u4f7f\u7528\u4e0a\u8ff0\u6280\u5de7\u524d\u3001\u540e\u7684\u7edf\u8ba1\u7ed3\u679c\u3002

    \\[ \\begin{aligned} T(n) & = 2n(n + 1) + (5n + 1) + 2 & \\text{\u5b8c\u6574\u7edf\u8ba1 (-.-|||)} \\newline & = 2n^2 + 7n + 3 \\newline T(n) & = n^2 + n & \\text{\u5077\u61d2\u7edf\u8ba1 (o.O)} \\end{aligned} \\]

    \u6700\u7ec8\uff0c\u4e24\u8005\u90fd\u80fd\u63a8\u51fa\u76f8\u540c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7ed3\u679c\uff0c\u5373 \\(O(n^2)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    void algorithm(int n) {\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++) {\nSystem.out.println(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++) {\nfor (int j = 0; j < n + 1; j++) {\nSystem.out.println(0);\n}\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++) {\ncout << 0 << endl;\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++) {\nfor (int j = 0; j < n + 1; j++) {\ncout << 0 << endl;\n}\n}\n}\n
    def algorithm(n: int) -> None:\na: int = 1  # +0\uff08\u6280\u5de7 1\uff09\na = a + n   # +0\uff08\u6280\u5de7 1\uff09\n# +n\uff08\u6280\u5de7 2\uff09\nfor i in range(5 * n + 1):\nprint(0)\n# +n*n\uff08\u6280\u5de7 3\uff09\nfor i in range(2 * n):\nfor j in range(n + 1):\nprint(0)\n
    func algorithm(n int) {\na := 1      // +0\uff08\u6280\u5de7 1\uff09\na = a + n  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor i := 0; i < 5 * n + 1; i++ {\nfmt.Println(0)\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor i := 0; i < 2 * n; i++ {\nfor j := 0; j < n + 1; j++ {\nfmt.Println(0)\n}\n}\n}\n
    function algorithm(n) {\nlet a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (let i = 0; i < 5 * n + 1; i++) {\nconsole.log(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (let i = 0; i < 2 * n; i++) {\nfor (let j = 0; j < n + 1; j++) {\nconsole.log(0);\n}\n}\n}\n
    function algorithm(n: number): void {\nlet a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (let i = 0; i < 5 * n + 1; i++) {\nconsole.log(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (let i = 0; i < 2 * n; i++) {\nfor (let j = 0; j < n + 1; j++) {\nconsole.log(0);\n}\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++) {\nprintf(\"%d\", 0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++) {\nfor (int j = 0; j < n + 1; j++) {\nprintf(\"%d\", 0);\n}\n}\n}\n
    void algorithm(int n)\n{\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++)\n{\nConsole.WriteLine(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++)\n{\nfor (int j = 0; j < n + 1; j++)\n{\nConsole.WriteLine(0);\n}\n}\n}\n
    func algorithm(n: Int) {\nvar a = 1 // +0\uff08\u6280\u5de7 1\uff09\na = a + n // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor _ in 0 ..< (5 * n + 1) {\nprint(0)\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor _ in 0 ..< (2 * n) {\nfor _ in 0 ..< (n + 1) {\nprint(0)\n}\n}\n}\n
    \n
    "},{"location":"chapter_computational_complexity/time_complexity/#2","title":"2) \u5224\u65ad\u6e10\u8fd1\u4e0a\u754c","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\u7531\u591a\u9879\u5f0f \\(T(n)\\) \u4e2d\u6700\u9ad8\u9636\u7684\u9879\u6765\u51b3\u5b9a\u3002\u8fd9\u662f\u56e0\u4e3a\u5728 \\(n\\) \u8d8b\u4e8e\u65e0\u7a77\u5927\u65f6\uff0c\u6700\u9ad8\u9636\u7684\u9879\u5c06\u5904\u4e8e\u4e3b\u5bfc\u4f5c\u7528\uff0c\u5176\u5b83\u9879\u7684\u5f71\u54cd\u90fd\u53ef\u4ee5\u88ab\u5ffd\u7565\u3002

    \u4ee5\u4e0b\u8868\u683c\u7ed9\u51fa\u4e86\u4e00\u4e9b\u4f8b\u5b50\uff0c\u5176\u4e2d\u6709\u4e00\u4e9b\u5938\u5f20\u7684\u503c\uff0c\u662f\u60f3\u8981\u5411\u5927\u5bb6\u5f3a\u8c03 \u7cfb\u6570\u65e0\u6cd5\u64bc\u52a8\u9636\u6570 \u8fd9\u4e00\u7ed3\u8bba\u3002\u5728 \\(n\\) \u8d8b\u4e8e\u65e0\u7a77\u5927\u65f6\uff0c\u8fd9\u4e9b\u5e38\u6570\u90fd\u662f\u201c\u6d6e\u4e91\u201d\u3002

    \u64cd\u4f5c\u6570\u91cf \\(T(n)\\) \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(f(n))\\) \\(100000\\) \\(O(1)\\) \\(3n + 2\\) \\(O(n)\\) \\(2n^2 + 3n + 2\\) \\(O(n^2)\\) \\(n^3 + 10000n^2\\) \\(O(n^3)\\) \\(2^n + 10000n^{10000}\\) \\(O(2^n)\\)"},{"location":"chapter_computational_complexity/time_complexity/#225","title":"2.2.5. \u00a0 \u5e38\u89c1\u7c7b\u578b","text":"

    \u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u5e38\u89c1\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7c7b\u578b\u6709\uff08\u4ece\u4f4e\u5230\u9ad8\u6392\u5217\uff09

    \\[ \\begin{aligned} O(1) < O(\\log n) < O(n) < O(n \\log n) < O(n^2) < O(2^n) < O(n!) \\newline \\text{\u5e38\u6570\u9636} < \\text{\u5bf9\u6570\u9636} < \\text{\u7ebf\u6027\u9636} < \\text{\u7ebf\u6027\u5bf9\u6570\u9636} < \\text{\u5e73\u65b9\u9636} < \\text{\u6307\u6570\u9636} < \\text{\u9636\u4e58\u9636} \\end{aligned} \\]

    Fig. \u65f6\u95f4\u590d\u6742\u5ea6\u7684\u5e38\u89c1\u7c7b\u578b

    Tip

    \u90e8\u5206\u793a\u4f8b\u4ee3\u7801\u9700\u8981\u4e00\u4e9b\u524d\u7f6e\u77e5\u8bc6\uff0c\u5305\u62ec\u6570\u7ec4\u3001\u9012\u5f52\u7b97\u6cd5\u7b49\u3002\u5982\u679c\u9047\u5230\u770b\u4e0d\u61c2\u7684\u5730\u65b9\u65e0\u9700\u62c5\u5fc3\uff0c\u53ef\u4ee5\u5728\u5b66\u4e60\u5b8c\u540e\u9762\u7ae0\u8282\u540e\u518d\u6765\u590d\u4e60\uff0c\u73b0\u9636\u6bb5\u5148\u805a\u7126\u5728\u7406\u89e3\u65f6\u95f4\u590d\u6742\u5ea6\u542b\u4e49\u548c\u63a8\u7b97\u65b9\u6cd5\u4e0a\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#o1","title":"\u5e38\u6570\u9636 \\(O(1)\\)","text":"

    \u5e38\u6570\u9636\u7684\u64cd\u4f5c\u6570\u91cf\u4e0e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\uff0c\u5373\u4e0d\u968f\u7740 \\(n\\) \u7684\u53d8\u5316\u800c\u53d8\u5316\u3002

    \u5bf9\u4e8e\u4ee5\u4e0b\u7b97\u6cd5\uff0c\u65e0\u8bba\u64cd\u4f5c\u6570\u91cf size \u6709\u591a\u5927\uff0c\u53ea\u8981\u4e0e\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u5c31\u4ecd\u4e3a \\(O(1)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5e38\u6570\u9636 */\nint constant(int n) {\nint count = 0;\nint size = 100000;\nfor (int i = 0; i < size; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5e38\u6570\u9636 */\nint constant(int n) {\nint count = 0;\nint size = 100000;\nfor (int i = 0; i < size; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.py
    def constant(n: int) -> int:\n\"\"\" \u5e38\u6570\u9636 \"\"\"\ncount: int = 0\nsize: int = 100000\nfor _ in range(size):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u5e38\u6570\u9636 */\nfunc constant(n int) int {\ncount := 0\nsize := 100000\nfor i := 0; i < size; i++ {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5e38\u6570\u9636 */\nfunction constant(n) {\nlet count = 0;\nconst size = 100000;\nfor (let i = 0; i < size; i++) count++;\nreturn count;\n}\n
    time_complexity.ts
    /* \u5e38\u6570\u9636 */\nfunction constant(n: number): number {\nlet count = 0;\nconst size = 100000;\nfor (let i = 0; i < size; i++) count++;\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{constant}\n
    time_complexity.cs
    /* \u5e38\u6570\u9636 */\nint constant(int n)\n{\nint count = 0;\nint size = 100000;\nfor (int i = 0; i < size; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.swift
    /* \u5e38\u6570\u9636 */\nfunc constant(n: Int) -> Int {\nvar count = 0\nlet size = 100_000\nfor _ in 0 ..< size {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5e38\u6570\u9636\nfn constant(n: i32) i32 {\n_ = n;\nvar count: i32 = 0;\nconst size: i32 = 100_000;\nvar i: i32 = 0;\nwhile(i<size) : (i += 1) {\ncount += 1;\n}\nreturn count;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#on","title":"\u7ebf\u6027\u9636 \\(O(n)\\)","text":"

    \u7ebf\u6027\u9636\u7684\u64cd\u4f5c\u6570\u91cf\u76f8\u5bf9\u8f93\u5165\u6570\u636e\u5927\u5c0f\u6210\u7ebf\u6027\u7ea7\u522b\u589e\u957f\u3002\u7ebf\u6027\u9636\u5e38\u51fa\u73b0\u4e8e\u5355\u5c42\u5faa\u73af\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u7ebf\u6027\u9636 */\nint linear(int n) {\nint count = 0;\nfor (int i = 0; i < n; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.cpp
    /* \u7ebf\u6027\u9636 */\nint linear(int n) {\nint count = 0;\nfor (int i = 0; i < n; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.py
    def linear(n: int) -> int:\n\"\"\" \u7ebf\u6027\u9636 \"\"\"\ncount: int = 0\nfor _ in range(n):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u7ebf\u6027\u9636 */\nfunc linear(n int) int {\ncount := 0\nfor i := 0; i < n; i++ {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u7ebf\u6027\u9636 */\nfunction linear(n) {\nlet count = 0;\nfor (let i = 0; i < n; i++) count++;\nreturn count;\n}\n
    time_complexity.ts
    /* \u7ebf\u6027\u9636 */\nfunction linear(n: number): number {\nlet count = 0;\nfor (let i = 0; i < n; i++) count++;\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{linear}\n
    time_complexity.cs
    /* \u7ebf\u6027\u9636 */\nint linear(int n)\n{\nint count = 0;\nfor (int i = 0; i < n; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.swift
    /* \u7ebf\u6027\u9636 */\nfunc linear(n: Int) -> Int {\nvar count = 0\nfor _ in 0 ..< n {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u7ebf\u6027\u9636\nfn linear(n: i32) i32 {\nvar count: i32 = 0;\nvar i: i32 = 0;\nwhile (i < n) : (i += 1) {\ncount += 1;\n}\nreturn count;\n}\n

    \u300c\u904d\u5386\u6570\u7ec4\u300d\u548c\u300c\u904d\u5386\u94fe\u8868\u300d\u7b49\u64cd\u4f5c\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(n)\\) \uff0c\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u7684\u957f\u5ea6\u3002

    Tip

    \u6570\u636e\u5927\u5c0f \\(n\\) \u662f\u6839\u636e\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\u6765\u786e\u5b9a\u7684\u3002\u6bd4\u5982\uff0c\u5728\u4e0a\u8ff0\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u76f4\u63a5\u5c06 \\(n\\) \u770b\u4f5c\u8f93\u5165\u6570\u636e\u5927\u5c0f\uff1b\u4ee5\u4e0b\u904d\u5386\u6570\u7ec4\u793a\u4f8b\u4e2d\uff0c\u6570\u636e\u5927\u5c0f \\(n\\) \u4e3a\u6570\u7ec4\u7684\u957f\u5ea6\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nint arrayTraversal(int[] nums) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (int num : nums) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nint arrayTraversal(vector<int>& nums) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (int num : nums) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.py
    def array_traversal(nums: List[int]) -> int:\n\"\"\" \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09\"\"\"\ncount: int = 0\n# \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor num in nums:\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunc arrayTraversal(nums []int) int {\ncount := 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor range nums {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunction arrayTraversal(nums) {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunction arrayTraversal(nums: number[]): number {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{arrayTraversal}\n
    time_complexity.cs
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nint arrayTraversal(int[] nums)\n{\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nforeach (int num in nums)\n{\ncount++;\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunc arrayTraversal(nums: [Int]) -> Int {\nvar count = 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor _ in nums {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09\nfn arrayTraversal(nums: []i32) i32 {\nvar count: i32 = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (nums) |_| {\ncount += 1;\n}\nreturn count;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#on2","title":"\u5e73\u65b9\u9636 \\(O(n^2)\\)","text":"

    \u5e73\u65b9\u9636\u7684\u64cd\u4f5c\u6570\u91cf\u76f8\u5bf9\u8f93\u5165\u6570\u636e\u5927\u5c0f\u6210\u5e73\u65b9\u7ea7\u522b\u589e\u957f\u3002\u5e73\u65b9\u9636\u5e38\u51fa\u73b0\u4e8e\u5d4c\u5957\u5faa\u73af\uff0c\u5916\u5c42\u5faa\u73af\u548c\u5185\u5c42\u5faa\u73af\u90fd\u4e3a \\(O(n)\\) \uff0c\u603b\u4f53\u4e3a \\(O(n^2)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5e73\u65b9\u9636 */\nint quadratic(int n) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5e73\u65b9\u9636 */\nint quadratic(int n) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.py
    def quadratic(n: int) -> int:\n\"\"\" \u5e73\u65b9\u9636 \"\"\"\ncount: int = 0\n# \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor i in range(n):\nfor j in range(n):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u5e73\u65b9\u9636 */\nfunc quadratic(n int) int {\ncount := 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor i := 0; i < n; i++ {\nfor j := 0; j < n; j++ {\ncount++\n}\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n) {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n: number): number {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{quadratic}\n
    time_complexity.cs
    /* \u5e73\u65b9\u9636 */\nint quadratic(int n)\n{\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (int i = 0; i < n; i++)\n{\nfor (int j = 0; j < n; j++)\n{\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u5e73\u65b9\u9636 */\nfunc quadratic(n: Int) -> Int {\nvar count = 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor _ in 0 ..< n {\nfor _ in 0 ..< n {\ncount += 1\n}\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5e73\u65b9\u9636\nfn quadratic(n: i32) i32 {\nvar count: i32 = 0;\nvar i: i32 = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nwhile (i < n) : (i += 1) {\nvar j: i32 = 0;\nwhile (j < n) : (j += 1) {\ncount += 1;\n}\n}\nreturn count;\n}\n

    Fig. \u5e38\u6570\u9636\u3001\u7ebf\u6027\u9636\u3001\u5e73\u65b9\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    \u4ee5\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u4e3a\u4f8b\uff0c\u5916\u5c42\u5faa\u73af \\(n - 1\\) \u6b21\uff0c\u5185\u5c42\u5faa\u73af \\(n-1, n-2, \\cdots, 2, 1\\) \u6b21\uff0c\u5e73\u5747\u4e3a \\(\\frac{n}{2}\\) \u6b21\uff0c\u56e0\u6b64\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \u3002

    \\[ O((n - 1) \\frac{n}{2}) = O(n^2) \\] JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nint bubbleSort(int[] nums) {\nint count = 0;  // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nint bubbleSort(vector<int>& nums) {\nint count = 0;  // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.size() - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.py
    def bubble_sort(nums: List[int]) -> int:\n\"\"\" \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09\"\"\"\ncount: int = 0  # \u8ba1\u6570\u5668\n# \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in range(len(nums) - 1, 0, -1):\n# \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in range(i):\nif nums[j] > nums[j + 1]:\n# \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\ntmp: int = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\ncount += 3  # \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\nreturn count\n
    time_complexity.go
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunc bubbleSort(nums []int) int {\ncount := 0 // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := len(nums) - 1; i > 0; i-- {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j := 0; j < i; j++ {\nif nums[j] > nums[j+1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\ntmp := nums[j]\nnums[j] = nums[j+1]\nnums[j+1] = tmp\ncount += 3 // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunction bubbleSort(nums) {\nlet count = 0; // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3; // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunction bubbleSort(nums: number[]): number {\nlet count = 0; // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3; // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{bubbleSort}\n
    time_complexity.cs
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nint bubbleSort(int[] nums)\n{\nint count = 0;  // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.Length - 1; i > 0; i--)\n{\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++)\n{\nif (nums[j] > nums[j + 1])\n{\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunc bubbleSort(nums: inout [Int]) -> Int {\nvar count = 0 // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in sequence(first: nums.count - 1, next: { $0 > 0 + 1 ? $0 - 1 : nil }) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in 0 ..< i {\nif nums[j] > nums[j + 1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\ncount += 3 // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09\nfn bubbleSort(nums: []i32) i32 {\nvar count: i32 = 0;  // \u8ba1\u6570\u5668 \n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nvar i: i32 = @intCast(i32, nums.len ) - 1;\nwhile (i > 0) : (i -= 1) {\nvar j: usize = 0;\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nwhile (j < i) : (j += 1) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nvar tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#o2n","title":"\u6307\u6570\u9636 \\(O(2^n)\\)","text":"

    Note

    \u751f\u7269\u5b66\u79d1\u4e2d\u7684\u201c\u7ec6\u80de\u5206\u88c2\u201d\u5373\u662f\u6307\u6570\u9636\u589e\u957f\uff1a\u521d\u59cb\u72b6\u6001\u4e3a \\(1\\) \u4e2a\u7ec6\u80de\uff0c\u5206\u88c2\u4e00\u8f6e\u540e\u4e3a \\(2\\) \u4e2a\uff0c\u5206\u88c2\u4e24\u8f6e\u540e\u4e3a \\(4\\) \u4e2a\uff0c\u2026\u2026\uff0c\u5206\u88c2 \\(n\\) \u8f6e\u540e\u6709 \\(2^n\\) \u4e2a\u7ec6\u80de\u3002

    \u6307\u6570\u9636\u589e\u957f\u5f97\u975e\u5e38\u5feb\uff0c\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u4e00\u822c\u662f\u4e0d\u80fd\u88ab\u63a5\u53d7\u7684\u3002\u82e5\u4e00\u4e2a\u95ee\u9898\u4f7f\u7528\u300c\u66b4\u529b\u679a\u4e3e\u300d\u6c42\u89e3\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f \\(O(2^n)\\) \uff0c\u90a3\u4e48\u4e00\u822c\u90fd\u9700\u8981\u4f7f\u7528\u300c\u52a8\u6001\u89c4\u5212\u300d\u6216\u300c\u8d2a\u5fc3\u7b97\u6cd5\u300d\u7b49\u7b97\u6cd5\u6765\u6c42\u89e3\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint exponential(int n) {\nint count = 0, base = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.cpp
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint exponential(int n) {\nint count = 0, base = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.py
    def exponential(n: int) -> int:\n\"\"\" \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\"\"\"\ncount: int = 0\nbase: int = 1\n# cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor _ in range(n):\nfor _ in range(base):\ncount += 1\nbase *= 2\n# count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count\n
    time_complexity.go
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09*/\nfunc exponential(n int) int {\ncount, base := 0, 1\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor i := 0; i < n; i++ {\nfor j := 0; j < base; j++ {\ncount++\n}\nbase *= 2\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count\n}\n
    time_complexity.js
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction exponential(n) {\nlet count = 0,\nbase = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.ts
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction exponential(n: number): number {\nlet count = 0,\nbase = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{exponential}\n
    time_complexity.cs
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint exponential(int n)\n{\nint count = 0, bas = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (int i = 0; i < n; i++)\n{\nfor (int j = 0; j < bas; j++)\n{\ncount++;\n}\nbas *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.swift
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunc exponential(n: Int) -> Int {\nvar count = 0\nvar base = 1\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor _ in 0 ..< n {\nfor _ in 0 ..< base {\ncount += 1\n}\nbase *= 2\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count\n}\n
    time_complexity.zig
    // \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\nfn exponential(n: i32) i32 {\nvar count: i32 = 0;\nvar bas: i32 = 1;\nvar i: i32 = 0;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nwhile (i < n) : (i += 1) {\nvar j: i32 = 0;\nwhile (j < bas) : (j += 1) {\ncount += 1;\n}\nbas *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n

    Fig. \u6307\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    \u5728\u5b9e\u9645\u7b97\u6cd5\u4e2d\uff0c\u6307\u6570\u9636\u5e38\u51fa\u73b0\u4e8e\u9012\u5f52\u51fd\u6570\u3002\u4f8b\u5982\u4ee5\u4e0b\u4ee3\u7801\uff0c\u4e0d\u65ad\u5730\u4e00\u5206\u4e3a\u4e8c\uff0c\u5206\u88c2 \\(n\\) \u6b21\u540e\u505c\u6b62\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint expRecur(int n) {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.cpp
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint expRecur(int n) {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.py
    def exp_recur(n: int) -> int:\n\"\"\" \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\"\"\"\nif n == 1: return 1\nreturn exp_recur(n - 1) + exp_recur(n - 1) + 1\n
    time_complexity.go
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09*/\nfunc expRecur(n int) int {\nif n == 1 {\nreturn 1\n}\nreturn expRecur(n-1) + expRecur(n-1) + 1\n}\n
    time_complexity.js
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction expRecur(n) {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.ts
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction expRecur(n: number): number {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.c
    [class]{}-[func]{expRecur}\n
    time_complexity.cs
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint expRecur(int n)\n{\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.swift
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc expRecur(n: Int) -> Int {\nif n == 1 {\nreturn 1\n}\nreturn expRecur(n: n - 1) + expRecur(n: n - 1) + 1\n}\n
    time_complexity.zig
    // \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn expRecur(n: i32) i32 {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#olog-n","title":"\u5bf9\u6570\u9636 \\(O(\\log n)\\)","text":"

    \u5bf9\u6570\u9636\u4e0e\u6307\u6570\u9636\u6b63\u597d\u76f8\u53cd\uff0c\u540e\u8005\u53cd\u6620\u201c\u6bcf\u8f6e\u589e\u52a0\u5230\u4e24\u500d\u7684\u60c5\u51b5\u201d\uff0c\u800c\u524d\u8005\u53cd\u6620\u201c\u6bcf\u8f6e\u7f29\u51cf\u5230\u4e00\u534a\u7684\u60c5\u51b5\u201d\u3002\u5bf9\u6570\u9636\u4ec5\u6b21\u4e8e\u5e38\u6570\u9636\uff0c\u65f6\u95f4\u589e\u957f\u5f97\u5f88\u6162\uff0c\u662f\u7406\u60f3\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u3002

    \u5bf9\u6570\u9636\u5e38\u51fa\u73b0\u4e8e\u300c\u4e8c\u5206\u67e5\u627e\u300d\u548c\u300c\u5206\u6cbb\u7b97\u6cd5\u300d\u4e2d\uff0c\u4f53\u73b0\u201c\u4e00\u5206\u4e3a\u591a\u201d\u3001\u201c\u5316\u7e41\u4e3a\u7b80\u201d\u7684\u7b97\u6cd5\u601d\u60f3\u3002

    \u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u7531\u4e8e\u6bcf\u8f6e\u7f29\u51cf\u5230\u4e00\u534a\uff0c\u56e0\u6b64\u5faa\u73af\u6b21\u6570\u662f \\(\\log_2 n\\) \uff0c\u5373 \\(2^n\\) \u7684\u53cd\u51fd\u6570\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint logarithmic(float n) {\nint count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint logarithmic(float n) {\nint count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.py
    def logarithmic(n: float) -> int:\n\"\"\" \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\"\"\"\ncount: int = 0\nwhile n > 1:\nn = n / 2\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09*/\nfunc logarithmic(n float64) int {\ncount := 0\nfor n > 1 {\nn = n / 2\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction logarithmic(n) {\nlet count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction logarithmic(n: number): number {\nlet count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{logarithmic}\n
    time_complexity.cs
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint logarithmic(float n)\n{\nint count = 0;\nwhile (n > 1)\n{\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunc logarithmic(n: Double) -> Int {\nvar count = 0\nvar n = n\nwhile n > 1 {\nn = n / 2\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\nfn logarithmic(n: f32) i32 {\nvar count: i32 = 0;\nvar n_var = n;\nwhile (n_var > 1)\n{\nn_var = n_var / 2;\ncount +=1;\n}\nreturn count;\n}\n

    Fig. \u5bf9\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    \u4e0e\u6307\u6570\u9636\u7c7b\u4f3c\uff0c\u5bf9\u6570\u9636\u4e5f\u5e38\u51fa\u73b0\u4e8e\u9012\u5f52\u51fd\u6570\u3002\u4ee5\u4e0b\u4ee3\u7801\u5f62\u6210\u4e86\u4e00\u4e2a\u9ad8\u5ea6\u4e3a \\(\\log_2 n\\) \u7684\u9012\u5f52\u6811\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint logRecur(float n) {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.cpp
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint logRecur(float n) {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.py
    def log_recur(n: float) -> int:\n\"\"\" \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\"\"\"\nif n <= 1: return 0\nreturn log_recur(n / 2) + 1\n
    time_complexity.go
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09*/\nfunc logRecur(n float64) int {\nif n <= 1 {\nreturn 0\n}\nreturn logRecur(n/2) + 1\n}\n
    time_complexity.js
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction logRecur(n) {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.ts
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction logRecur(n: number): number {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.c
    [class]{}-[func]{logRecur}\n
    time_complexity.cs
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint logRecur(float n)\n{\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.swift
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc logRecur(n: Double) -> Int {\nif n <= 1 {\nreturn 0\n}\nreturn logRecur(n: n / 2) + 1\n}\n
    time_complexity.zig
    // \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn logRecur(n: f32) i32 {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#on-log-n","title":"\u7ebf\u6027\u5bf9\u6570\u9636 \\(O(n \\log n)\\)","text":"

    \u7ebf\u6027\u5bf9\u6570\u9636\u5e38\u51fa\u73b0\u4e8e\u5d4c\u5957\u5faa\u73af\u4e2d\uff0c\u4e24\u5c42\u5faa\u73af\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u522b\u4e3a \\(O(\\log n)\\) \u548c \\(O(n)\\) \u3002

    \u4e3b\u6d41\u6392\u5e8f\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u662f \\(O(n \\log n )\\) \uff0c\u4f8b\u5982\u5feb\u901f\u6392\u5e8f\u3001\u5f52\u5e76\u6392\u5e8f\u3001\u5806\u6392\u5e8f\u7b49\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nint linearLogRecur(float n) {\nif (n <= 1) return 1;\nint count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (int i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nint linearLogRecur(float n) {\nif (n <= 1) return 1;\nint count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (int i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.py
    def linear_log_recur(n: float) -> int:\n\"\"\" \u7ebf\u6027\u5bf9\u6570\u9636 \"\"\"\nif n <= 1: return 1\ncount: int = linear_log_recur(n // 2) + \\\n                 linear_log_recur(n // 2)\nfor _ in range(n):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunc linearLogRecur(n float64) int {\nif n <= 1 {\nreturn 1\n}\ncount := linearLogRecur(n/2) +\nlinearLogRecur(n/2)\nfor i := 0.0; i < n; i++ {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunction linearLogRecur(n) {\nif (n <= 1) return 1;\nlet count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (let i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunction linearLogRecur(n: number): number {\nif (n <= 1) return 1;\nlet count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (let i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{linearLogRecur}\n
    time_complexity.cs
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nint linearLogRecur(float n)\n{\nif (n <= 1) return 1;\nint count = linearLogRecur(n / 2) +\nlinearLogRecur(n / 2);\nfor (int i = 0; i < n; i++)\n{\ncount++;\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunc linearLogRecur(n: Double) -> Int {\nif n <= 1 {\nreturn 1\n}\nvar count = linearLogRecur(n: n / 2) + linearLogRecur(n: n / 2)\nfor _ in sequence(first: 0, next: { $0 < n - 1 ? $0 + 1 : nil }) {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u7ebf\u6027\u5bf9\u6570\u9636\nfn linearLogRecur(n: f32) i32 {\nif (n <= 1) return 1;\nvar count: i32 = linearLogRecur(n / 2) +\nlinearLogRecur(n / 2);\nvar i: f32 = 0;\nwhile (i < n) : (i += 1) {\ncount += 1;\n}\nreturn count;\n}\n

    Fig. \u7ebf\u6027\u5bf9\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/time_complexity/#on_1","title":"\u9636\u4e58\u9636 \\(O(n!)\\)","text":"

    \u9636\u4e58\u9636\u5bf9\u5e94\u6570\u5b66\u4e0a\u7684\u300c\u5168\u6392\u5217\u300d\u3002\u5373\u7ed9\u5b9a \\(n\\) \u4e2a\u4e92\u4e0d\u91cd\u590d\u7684\u5143\u7d20\uff0c\u6c42\u5176\u6240\u6709\u53ef\u80fd\u7684\u6392\u5217\u65b9\u6848\uff0c\u5219\u65b9\u6848\u6570\u91cf\u4e3a

    \\[ n! = n \\times (n - 1) \\times (n - 2) \\times \\cdots \\times 2 \\times 1 \\]

    \u9636\u4e58\u5e38\u4f7f\u7528\u9012\u5f52\u5b9e\u73b0\u3002\u4f8b\u5982\u4ee5\u4e0b\u4ee3\u7801\uff0c\u7b2c\u4e00\u5c42\u5206\u88c2\u51fa \\(n\\) \u4e2a\uff0c\u7b2c\u4e8c\u5c42\u5206\u88c2\u51fa \\(n - 1\\) \u4e2a\uff0c\u2026\u2026 \uff0c\u76f4\u81f3\u5230\u7b2c \\(n\\) \u5c42\u65f6\u7ec8\u6b62\u5206\u88c2\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint factorialRecur(int n) {\nif (n == 0) return 1;\nint count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (int i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint factorialRecur(int n) {\nif (n == 0) return 1;\nint count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (int i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.py
    def factorial_recur(n: int) -> int:\n\"\"\" \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\"\"\"\nif n == 0: return 1\ncount: int = 0\n# \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor _ in range(n):\ncount += factorial_recur(n - 1)\nreturn count\n
    time_complexity.go
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc factorialRecur(n int) int {\nif n == 0 {\nreturn 1\n}\ncount := 0\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor i := 0; i < n; i++ {\ncount += factorialRecur(n - 1)\n}\nreturn count\n}\n
    time_complexity.js
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction factorialRecur(n) {\nif (n == 0) return 1;\nlet count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (let i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction factorialRecur(n: number): number {\nif (n == 0) return 1;\nlet count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (let i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{factorialRecur}\n
    time_complexity.cs
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint factorialRecur(int n)\n{\nif (n == 0) return 1;\nint count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (int i = 0; i < n; i++)\n{\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc factorialRecur(n: Int) -> Int {\nif n == 0 {\nreturn 1\n}\nvar count = 0\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor _ in 0 ..< n {\ncount += factorialRecur(n: n - 1)\n}\nreturn count\n}\n
    time_complexity.zig
    // \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn factorialRecur(n: i32) i32 {\nif (n == 0) return 1;\nvar count: i32 = 0;\nvar i: i32 = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nwhile (i < n) : (i += 1) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n

    Fig. \u9636\u4e58\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/time_complexity/#226","title":"2.2.6. \u00a0 \u6700\u5dee\u3001\u6700\u4f73\u3001\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6","text":"

    \u67d0\u4e9b\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u662f\u6052\u5b9a\u7684\uff0c\u800c\u662f\u4e0e\u8f93\u5165\u6570\u636e\u7684\u5206\u5e03\u6709\u5173\u3002\u4e3e\u4e00\u4e2a\u4f8b\u5b50\uff0c\u8f93\u5165\u4e00\u4e2a\u957f\u5ea6\u4e3a \\(n\\) \u6570\u7ec4 nums \uff0c\u5176\u4e2d nums \u7531\u4ece \\(1\\) \u81f3 \\(n\\) \u7684\u6570\u5b57\u7ec4\u6210\uff0c\u4f46\u5143\u7d20\u987a\u5e8f\u662f\u968f\u673a\u6253\u4e71\u7684\uff1b\u7b97\u6cd5\u7684\u4efb\u52a1\u662f\u8fd4\u56de\u5143\u7d20 \\(1\\) \u7684\u7d22\u5f15\u3002\u6211\u4eec\u53ef\u4ee5\u5f97\u51fa\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    • \u5f53 nums = [?, ?, ..., 1]\uff0c\u5373\u5f53\u672b\u5c3e\u5143\u7d20\u662f \\(1\\) \u65f6\uff0c\u5219\u9700\u5b8c\u6574\u904d\u5386\u6570\u7ec4\uff0c\u6b64\u65f6\u8fbe\u5230 \u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1b
    • \u5f53 nums = [1, ?, ?, ...] \uff0c\u5373\u5f53\u9996\u4e2a\u6570\u5b57\u4e3a \\(1\\) \u65f6\uff0c\u65e0\u8bba\u6570\u7ec4\u591a\u957f\u90fd\u4e0d\u9700\u8981\u7ee7\u7eed\u904d\u5386\uff0c\u6b64\u65f6\u8fbe\u5230 \u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 \\(\\Omega(1)\\) \uff1b

    \u300c\u51fd\u6570\u6e10\u8fd1\u4e0a\u754c\u300d\u4f7f\u7528\u5927 \\(O\\) \u8bb0\u53f7\u8868\u793a\uff0c\u4ee3\u8868\u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u3002\u4e0e\u4e4b\u5bf9\u5e94\uff0c\u300c\u51fd\u6570\u6e10\u8fd1\u4e0b\u754c\u300d\u7528 \\(\\Omega\\) \u8bb0\u53f7\uff08Omega Notation\uff09\u6765\u8868\u793a\uff0c\u4ee3\u8868\u300c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig worst_best_time_complexity.java
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nint[] randomNumbers(int n) {\nInteger[] nums = new Integer[n];\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (int i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nCollections.shuffle(Arrays.asList(nums));\n// Integer[] -> int[]\nint[] res = new int[n];\nfor (int i = 0; i < n; i++) {\nres[i] = nums[i];\n}\nreturn res;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nint findOne(int[] nums) {\nfor (int i = 0; i < nums.length; i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] == 1)\nreturn i;\n}\nreturn -1;\n}\n
    worst_best_time_complexity.cpp
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nvector<int> randomNumbers(int n) {\nvector<int> nums(n);\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (int i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u4f7f\u7528\u7cfb\u7edf\u65f6\u95f4\u751f\u6210\u968f\u673a\u79cd\u5b50\nunsigned seed = chrono::system_clock::now().time_since_epoch().count();\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nshuffle(nums.begin(), nums.end(), default_random_engine(seed));\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nint findOne(vector<int>& nums) {\nfor (int i = 0; i < nums.size(); i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] == 1)\nreturn i;\n}\nreturn -1;\n}\n
    worst_best_time_complexity.py
    def random_numbers(n: int) -> List[int]:\n\"\"\" \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a: 1, 2, ..., n \uff0c\u987a\u5e8f\u88ab\u6253\u4e71 \"\"\"\n# \u751f\u6210\u6570\u7ec4 nums =: 1, 2, 3, ..., n\nnums: List[int] = [i for i in range(1, n + 1)]\n# \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nrandom.shuffle(nums)\nreturn nums\ndef find_one(nums: List[int]) -> int:\n\"\"\" \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 \"\"\"\nfor i in range(len(nums)):\n# \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n# \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif nums[i] == 1:\nreturn i\nreturn -1\n
    worst_best_time_complexity.go
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunc randomNumbers(n int) []int {\nnums := make([]int, n)\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor i := 0; i < n; i++ {\nnums[i] = i + 1\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nrand.Shuffle(len(nums), func(i, j int) {\nnums[i], nums[j] = nums[j], nums[i]\n})\nreturn nums\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunc findOne(nums []int) int {\nfor i := 0; i < len(nums); i++ {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif nums[i] == 1 {\nreturn i\n}\n}\nreturn -1\n}\n
    worst_best_time_complexity.js
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunction randomNumbers(n) {\nconst nums = Array(n);\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (let i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nfor (let i = 0; i < n; i++) {\nconst r = Math.floor(Math.random() * (i + 1));\nconst temp = nums[i];\nnums[i] = nums[r];\nnums[r] = temp;\n}\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunction findOne(nums) {\nfor (let i = 0; i < nums.length; i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] === 1) {\nreturn i;\n}\n}\nreturn -1;\n}\n
    worst_best_time_complexity.ts
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunction randomNumbers(n: number): number[] {\nconst nums = Array(n);\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (let i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nfor (let i = 0; i < n; i++) {\nconst r = Math.floor(Math.random() * (i + 1));\nconst temp = nums[i];\nnums[i] = nums[r];\nnums[r] = temp;\n}\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunction findOne(nums: number[]): number {\nfor (let i = 0; i < nums.length; i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] === 1) {\nreturn i;\n}\n}\nreturn -1;\n}\n
    worst_best_time_complexity.c
    [class]{}-[func]{randomNumbers}\n[class]{}-[func]{findOne}\n
    worst_best_time_complexity.cs
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nint[] randomNumbers(int n)\n{\nint[] nums = new int[n];\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (int i = 0; i < n; i++)\n{\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nfor (int i = 0; i < nums.Length; i++)\n{\nvar index = new Random().Next(i, nums.Length);\nvar tmp = nums[i];\nvar ran = nums[index];\nnums[i] = ran;\nnums[index] = tmp;\n}\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nint findOne(int[] nums)\n{\nfor (int i = 0; i < nums.Length; i++)\n{\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] == 1)\nreturn i;\n}\nreturn -1;\n}\n
    worst_best_time_complexity.swift
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunc randomNumbers(n: Int) -> [Int] {\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nvar nums = Array(1 ... n)\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nnums.shuffle()\nreturn nums\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunc findOne(nums: [Int]) -> Int {\nfor i in nums.indices {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif nums[i] == 1 {\nreturn i\n}\n}\nreturn -1\n}\n
    worst_best_time_complexity.zig
    // \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71\npub fn randomNumbers(comptime n: usize) [n]i32 {\nvar nums: [n]i32 = undefined;\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (nums) |*num, i| {\nnum.* = @intCast(i32, i) + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nconst rand = std.crypto.random;\nrand.shuffle(i32, &nums);\nreturn nums;\n}\n// \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15\npub fn findOne(nums: []i32) i32 {\nfor (nums) |num, i| {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (num == 1) return @intCast(i32, i);\n}\nreturn -1;\n}\n

    Tip

    \u6211\u4eec\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u5f88\u5c11\u4f7f\u7528\u300c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u300d\uff0c\u56e0\u4e3a\u5f80\u5f80\u53ea\u6709\u5f88\u5c0f\u6982\u7387\u4e0b\u624d\u80fd\u8fbe\u5230\uff0c\u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u8bef\u5bfc\u6027\u3002\u53cd\u4e4b\uff0c\u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u6700\u4e3a\u5b9e\u7528\uff0c\u56e0\u4e3a\u5b83\u7ed9\u51fa\u4e86\u4e00\u4e2a\u201c\u6548\u7387\u5b89\u5168\u503c\u201d\uff0c\u8ba9\u6211\u4eec\u53ef\u4ee5\u653e\u5fc3\u5730\u4f7f\u7528\u7b97\u6cd5\u3002

    \u4ece\u4e0a\u8ff0\u793a\u4f8b\u53ef\u4ee5\u770b\u51fa\uff0c\u6700\u5dee\u6216\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u53ea\u51fa\u73b0\u5728\u201c\u7279\u6b8a\u5206\u5e03\u7684\u6570\u636e\u201d\u4e2d\uff0c\u8fd9\u4e9b\u60c5\u51b5\u7684\u51fa\u73b0\u6982\u7387\u5f80\u5f80\u5f88\u5c0f\uff0c\u56e0\u6b64\u5e76\u4e0d\u80fd\u6700\u771f\u5b9e\u5730\u53cd\u6620\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u3002\u76f8\u5bf9\u5730\uff0c\u300c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u53ef\u4ee5\u4f53\u73b0\u7b97\u6cd5\u5728\u968f\u673a\u8f93\u5165\u6570\u636e\u4e0b\u7684\u8fd0\u884c\u6548\u7387\uff0c\u7528 \\(\\Theta\\) \u8bb0\u53f7\uff08Theta Notation\uff09\u6765\u8868\u793a\u3002

    \u5bf9\u4e8e\u90e8\u5206\u7b97\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u7b80\u5355\u5730\u63a8\u7b97\u51fa\u968f\u673a\u6570\u636e\u5206\u5e03\u4e0b\u7684\u5e73\u5747\u60c5\u51b5\u3002\u6bd4\u5982\u4e0a\u8ff0\u793a\u4f8b\uff0c\u7531\u4e8e\u8f93\u5165\u6570\u7ec4\u662f\u88ab\u6253\u4e71\u7684\uff0c\u56e0\u6b64\u5143\u7d20 \\(1\\) \u51fa\u73b0\u5728\u4efb\u610f\u7d22\u5f15\u7684\u6982\u7387\u90fd\u662f\u76f8\u7b49\u7684\uff0c\u90a3\u4e48\u7b97\u6cd5\u7684\u5e73\u5747\u5faa\u73af\u6b21\u6570\u5219\u662f\u6570\u7ec4\u957f\u5ea6\u7684\u4e00\u534a \\(\\frac{n}{2}\\) \uff0c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(\\Theta(\\frac{n}{2}) = \\Theta(n)\\) \u3002

    \u4f46\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u5c24\u5176\u662f\u8f83\u4e3a\u590d\u6742\u7684\u7b97\u6cd5\uff0c\u8ba1\u7b97\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u6bd4\u8f83\u56f0\u96be\uff0c\u56e0\u4e3a\u5f88\u96be\u7b80\u4fbf\u5730\u5206\u6790\u51fa\u5728\u6570\u636e\u5206\u5e03\u4e0b\u7684\u6574\u4f53\u6570\u5b66\u671f\u671b\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e00\u822c\u4f7f\u7528\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u6765\u4f5c\u4e3a\u7b97\u6cd5\u6548\u7387\u7684\u8bc4\u5224\u6807\u51c6\u3002

    \u4e3a\u4ec0\u4e48\u5f88\u5c11\u770b\u5230 \\(\\Theta\\) \u7b26\u53f7\uff1f

    \u5b9e\u9645\u4e2d\u6211\u4eec\u7ecf\u5e38\u4f7f\u7528\u300c\u5927 \\(O\\) \u7b26\u53f7\u300d\u6765\u8868\u793a\u300c\u5e73\u5747\u590d\u6742\u5ea6\u300d\uff0c\u8fd9\u6837\u4e25\u683c\u610f\u4e49\u4e0a\u6765\u8bf4\u662f\u4e0d\u89c4\u8303\u7684\u3002\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a \\(O\\) \u7b26\u53f7\u5b9e\u5728\u662f\u592a\u6717\u6717\u4e0a\u53e3\u4e86\u3002\u5982\u679c\u5728\u672c\u4e66\u548c\u5176\u4ed6\u8d44\u6599\u4e2d\u770b\u5230\u7c7b\u4f3c \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \u7684\u8868\u8ff0\uff0c\u8bf7\u4f60\u76f4\u63a5\u7406\u89e3\u4e3a \\(\\Theta(n)\\) \u5373\u53ef\u3002

    "},{"location":"chapter_data_structure/classification_of_data_structure/","title":"3.2. \u00a0 \u6570\u636e\u7ed3\u6784\u5206\u7c7b","text":"

    \u6570\u636e\u7ed3\u6784\u4e3b\u8981\u53ef\u6839\u636e\u300c\u903b\u8f91\u7ed3\u6784\u300d\u548c\u300c\u7269\u7406\u7ed3\u6784\u300d\u4e24\u79cd\u89d2\u5ea6\u8fdb\u884c\u5206\u7c7b\u3002

    "},{"location":"chapter_data_structure/classification_of_data_structure/#321","title":"3.2.1. \u00a0 \u903b\u8f91\u7ed3\u6784\uff1a\u7ebf\u6027\u4e0e\u975e\u7ebf\u6027","text":"

    \u300c\u903b\u8f91\u7ed3\u6784\u300d\u53cd\u6620\u4e86\u6570\u636e\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u3002\u6570\u7ec4\u548c\u94fe\u8868\u7684\u6570\u636e\u6309\u7167\u987a\u5e8f\u4f9d\u6b21\u6392\u5217\uff0c\u53cd\u6620\u4e86\u6570\u636e\u95f4\u7684\u7ebf\u6027\u5173\u7cfb\uff1b\u6811\u4ece\u9876\u81f3\u5e95\u6309\u5c42\u7ea7\u6392\u5217\uff0c\u53cd\u6620\u4e86\u7956\u5148\u4e0e\u540e\u4ee3\u4e4b\u95f4\u7684\u6d3e\u751f\u5173\u7cfb\uff1b\u56fe\u7531\u7ed3\u70b9\u548c\u8fb9\u7ec4\u6210\uff0c\u53cd\u6620\u4e86\u590d\u6742\u7f51\u7edc\u5173\u7cfb\u3002

    \u6211\u4eec\u4e00\u822c\u5c06\u903b\u8f91\u7ed3\u6784\u5206\u4e3a\u300c\u7ebf\u6027\u300d\u548c\u300c\u975e\u7ebf\u6027\u300d\u4e24\u79cd\u3002\u201c\u7ebf\u6027\u201d\u8fd9\u4e2a\u6982\u5ff5\u5f88\u76f4\u89c2\uff0c\u5373\u8868\u660e\u6570\u636e\u5728\u903b\u8f91\u5173\u7cfb\u4e0a\u662f\u6392\u6210\u4e00\u6761\u7ebf\u7684\uff1b\u800c\u5982\u679c\u6570\u636e\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u662f\u975e\u7ebf\u6027\u7684\uff08\u4f8b\u5982\u662f\u7f51\u72b6\u6216\u6811\u72b6\u7684\uff09\uff0c\u90a3\u4e48\u5c31\u662f\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\u3002

    • \u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff1a\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\u3001\u54c8\u5e0c\u8868\uff1b
    • \u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff1a\u6811\u3001\u56fe\u3001\u5806\u3001\u54c8\u5e0c\u8868\uff1b

    Fig. \u7ebf\u6027\u4e0e\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784

    "},{"location":"chapter_data_structure/classification_of_data_structure/#322","title":"3.2.2. \u00a0 \u7269\u7406\u7ed3\u6784\uff1a\u8fde\u7eed\u4e0e\u79bb\u6563","text":"

    Note

    \u82e5\u611f\u5230\u9605\u8bfb\u56f0\u96be\uff0c\u5efa\u8bae\u5148\u770b\u5b8c\u4e0b\u4e2a\u7ae0\u8282\u300c\u6570\u7ec4\u4e0e\u94fe\u8868\u300d\uff0c\u518d\u56de\u8fc7\u5934\u6765\u7406\u89e3\u7269\u7406\u7ed3\u6784\u7684\u542b\u4e49\u3002

    \u300c\u7269\u7406\u7ed3\u6784\u300d\u53cd\u6620\u4e86\u6570\u636e\u5728\u8ba1\u7b97\u673a\u5185\u5b58\u4e2d\u7684\u5b58\u50a8\u65b9\u5f0f\u3002\u4ece\u672c\u8d28\u4e0a\u770b\uff0c\u5206\u522b\u662f \u6570\u7ec4\u7684\u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8 \u548c \u94fe\u8868\u7684\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8\u3002\u7269\u7406\u7ed3\u6784\u4ece\u5e95\u5c42\u4e0a\u51b3\u5b9a\u4e86\u6570\u636e\u7684\u8bbf\u95ee\u3001\u66f4\u65b0\u3001\u589e\u5220\u7b49\u64cd\u4f5c\u65b9\u6cd5\uff0c\u5728\u65f6\u95f4\u6548\u7387\u548c\u7a7a\u95f4\u6548\u7387\u65b9\u9762\u5448\u73b0\u51fa\u6b64\u6d88\u5f7c\u957f\u7684\u7279\u6027\u3002

    Fig. \u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8\u4e0e\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8

    \u6240\u6709\u6570\u636e\u7ed3\u6784\u90fd\u662f\u57fa\u4e8e\u6570\u7ec4\u3001\u6216\u94fe\u8868\u3001\u6216\u4e24\u8005\u7ec4\u5408\u5b9e\u73b0\u7684\u3002\u4f8b\u5982\u6808\u548c\u961f\u5217\uff0c\u65e2\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u5b9e\u73b0\u3001\u4e5f\u53ef\u4ee5\u4f7f\u7528\u94fe\u8868\u5b9e\u73b0\uff0c\u800c\u4f8b\u5982\u54c8\u5e0c\u8868\uff0c\u5176\u5b9e\u73b0\u540c\u65f6\u5305\u542b\u4e86\u6570\u7ec4\u548c\u94fe\u8868\u3002

    • \u57fa\u4e8e\u6570\u7ec4\u53ef\u5b9e\u73b0\uff1a\u6808\u3001\u961f\u5217\u3001\u54c8\u5e0c\u8868\u3001\u6811\u3001\u5806\u3001\u56fe\u3001\u77e9\u9635\u3001\u5f20\u91cf\uff08\u7ef4\u5ea6 \\(\\geq 3\\) \u7684\u6570\u7ec4\uff09\u7b49\uff1b
    • \u57fa\u4e8e\u94fe\u8868\u53ef\u5b9e\u73b0\uff1a\u6808\u3001\u961f\u5217\u3001\u54c8\u5e0c\u8868\u3001\u6811\u3001\u5806\u3001\u56fe\u7b49\uff1b

    \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u4e5f\u88ab\u79f0\u4e3a\u300c\u9759\u6001\u6570\u636e\u7ed3\u6784\u300d\uff0c\u8fd9\u610f\u5473\u7740\u8be5\u6570\u636e\u7ed3\u6784\u5728\u5728\u88ab\u521d\u59cb\u5316\u540e\uff0c\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002\u76f8\u53cd\u5730\uff0c\u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u88ab\u79f0\u4e3a\u300c\u52a8\u6001\u6570\u636e\u7ed3\u6784\u300d\uff0c\u8be5\u6570\u636e\u7ed3\u6784\u5728\u88ab\u521d\u59cb\u5316\u540e\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u4fee\u6539\u5176\u957f\u5ea6\u3002

    Tip

    \u6570\u7ec4\u4e0e\u94fe\u8868\u662f\u5176\u4ed6\u6240\u6709\u6570\u636e\u7ed3\u6784\u7684\u201c\u5e95\u5c42\u79ef\u6728\u201d\uff0c\u5efa\u8bae\u8bfb\u8005\u4e00\u5b9a\u8981\u591a\u82b1\u4e9b\u65f6\u95f4\u4e86\u89e3\u3002

    "},{"location":"chapter_data_structure/data_and_memory/","title":"3.1. \u00a0 \u6570\u636e\u4e0e\u5185\u5b58","text":""},{"location":"chapter_data_structure/data_and_memory/#311","title":"3.1.1. \u00a0 \u57fa\u672c\u6570\u636e\u7c7b\u578b","text":"

    \u8c08\u5230\u8ba1\u7b97\u673a\u4e2d\u7684\u6570\u636e\uff0c\u6211\u4eec\u80fd\u591f\u60f3\u5230\u6587\u672c\u3001\u56fe\u7247\u3001\u89c6\u9891\u3001\u8bed\u97f3\u30013D \u6a21\u578b\u7b49\u7b49\uff0c\u8fd9\u4e9b\u6570\u636e\u867d\u7136\u7ec4\u7ec7\u5f62\u5f0f\u4e0d\u540c\uff0c\u4f46\u90fd\u662f\u7531\u5404\u79cd\u57fa\u672c\u6570\u636e\u7c7b\u578b\u6784\u6210\u7684\u3002

    \u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u662f CPU \u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u8fd0\u7b97\u7684\u7c7b\u578b\uff0c\u5728\u7b97\u6cd5\u4e2d\u76f4\u63a5\u88ab\u4f7f\u7528\u3002

    • \u300c\u6574\u6570\u300d\u6839\u636e\u4e0d\u540c\u7684\u957f\u5ea6\u5206\u4e3a byte, short, int, long \uff0c\u6839\u636e\u7b97\u6cd5\u9700\u6c42\u9009\u7528\uff0c\u5373\u5728\u6ee1\u8db3\u53d6\u503c\u8303\u56f4\u7684\u60c5\u51b5\u4e0b\u5c3d\u91cf\u51cf\u5c0f\u5185\u5b58\u7a7a\u95f4\u5360\u7528\uff1b
    • \u300c\u6d6e\u70b9\u6570\u300d\u4ee3\u8868\u5c0f\u6570\uff0c\u6839\u636e\u957f\u5ea6\u5206\u4e3a float, double \uff0c\u540c\u6837\u6839\u636e\u7b97\u6cd5\u7684\u5b9e\u9645\u9700\u6c42\u9009\u7528\uff1b
    • \u300c\u5b57\u7b26\u300d\u5728\u8ba1\u7b97\u673a\u4e2d\u662f\u4ee5\u5b57\u7b26\u96c6\u7684\u5f62\u5f0f\u4fdd\u5b58\u7684\uff0cchar \u7684\u503c\u5b9e\u9645\u4e0a\u662f\u6570\u5b57\uff0c\u4ee3\u8868\u5b57\u7b26\u96c6\u4e2d\u7684\u7f16\u53f7\uff0c\u8ba1\u7b97\u673a\u901a\u8fc7\u5b57\u7b26\u96c6\u67e5\u8868\u6765\u5b8c\u6210\u7f16\u53f7\u5230\u5b57\u7b26\u7684\u8f6c\u6362\u3002\u5360\u7528\u7a7a\u95f4\u901a\u5e38\u4e3a 2 bytes \u6216 1 byte \uff1b
    • \u300c\u5e03\u5c14\u300d\u4ee3\u8868\u903b\u8f91\u4e2d\u7684\u201c\u662f\u201d\u4e0e\u201c\u5426\u201d\uff0c\u5176\u5360\u7528\u7a7a\u95f4\u9700\u6839\u636e\u7f16\u7a0b\u8bed\u8a00\u786e\u5b9a\uff0c\u901a\u5e38\u4e3a 1 byte \u6216 1 bit \uff1b
    \u7c7b\u522b \u7b26\u53f7 \u5360\u7528\u7a7a\u95f4 \u53d6\u503c\u8303\u56f4 \u9ed8\u8ba4\u503c \u6574\u6570 byte 1 byte \\(-2^7\\) ~ \\(2^7 - 1\\) ( \\(-128\\) ~ \\(127\\) ) \\(0\\) short 2 bytes \\(-2^{15}\\) ~ \\(2^{15} - 1\\) \\(0\\) int 4 bytes \\(-2^{31}\\) ~ \\(2^{31} - 1\\) \\(0\\) long 8 bytes \\(-2^{63}\\) ~ \\(2^{63} - 1\\) \\(0\\) \u6d6e\u70b9\u6570 float 4 bytes \\(-3.4 \\times 10^{38}\\) ~ \\(3.4 \\times 10^{38}\\) \\(0.0\\) f double 8 bytes \\(-1.7 \\times 10^{308}\\) ~ \\(1.7 \\times 10^{308}\\) \\(0.0\\) \u5b57\u7b26 char 2 bytes / 1 byte \\(0\\) ~ \\(2^{16} - 1\\) \\(0\\) \u5e03\u5c14 bool 1 byte / 1 bit \\(\\text{true}\\) \u6216 \\(\\text{false}\\) \\(\\text{false}\\)

    Tip

    \u4ee5\u4e0a\u8868\u683c\u4e2d\uff0c\u52a0\u7c97\u9879\u5728\u300c\u7b97\u6cd5\u9898\u300d\u4e2d\u6700\u4e3a\u5e38\u7528\u3002\u6b64\u8868\u683c\u65e0\u9700\u786c\u80cc\uff0c\u5927\u81f4\u7406\u89e3\u5373\u53ef\uff0c\u9700\u8981\u65f6\u53ef\u4ee5\u901a\u8fc7\u67e5\u8868\u6765\u56de\u5fc6\u3002

    "},{"location":"chapter_data_structure/data_and_memory/#_1","title":"\u6574\u6570\u8868\u793a\u65b9\u5f0f","text":"

    \u6574\u6570\u7684\u53d6\u503c\u8303\u56f4\u53d6\u51b3\u4e8e\u53d8\u91cf\u4f7f\u7528\u7684\u5185\u5b58\u957f\u5ea6\uff0c\u5373\u5b57\u8282\uff08\u6216\u6bd4\u7279\uff09\u6570\u3002\u5728\u8ba1\u7b97\u673a\u4e2d\uff0c 1 \u5b57\u8282 (byte) = 8 \u6bd4\u7279 (bit) \uff0c 1 \u6bd4\u7279\u5373 1 \u4e2a\u4e8c\u8fdb\u5236\u4f4d\u3002\u4ee5 int \u7c7b\u578b\u4e3a\u4f8b\uff1a

    1. \u6574\u6570\u7c7b\u578b int \u5360\u7528 4 bytes = 32 bits \uff0c\u56e0\u6b64\u53ef\u4ee5\u8868\u793a \\(2^{32}\\) \u4e2a\u4e0d\u540c\u7684\u6570\u5b57\uff1b
    2. \u5c06\u6700\u9ad8\u4f4d\u770b\u4f5c\u7b26\u53f7\u4f4d\uff0c\\(0\\) \u4ee3\u8868\u6b63\u6570\uff0c\\(1\\) \u4ee3\u8868\u8d1f\u6570\uff0c\u4ece\u800c\u53ef\u4ee5\u8868\u793a \\(2^{31}\\) \u4e2a\u6b63\u6570\u548c \\(2^{31}\\) \u4e2a\u8d1f\u6570\uff1b
    3. \u5f53\u6240\u6709 bits \u4e3a 0 \u65f6\u4ee3\u8868\u6570\u5b57 \\(0\\) \uff0c\u4ece\u96f6\u5f00\u59cb\u589e\u5927\uff0c\u53ef\u5f97\u6700\u5927\u6b63\u6570\u4e3a \\(2^{31} - 1\\) \uff1b
    4. \u5269\u4f59 \\(2^{31}\\) \u4e2a\u6570\u5b57\u5168\u90e8\u7528\u6765\u8868\u793a\u8d1f\u6570\uff0c\u56e0\u6b64\u6700\u5c0f\u8d1f\u6570\u4e3a \\(-2^{31}\\) \uff1b\u5177\u4f53\u7ec6\u8282\u6d89\u53ca\u5230\u5230\u201c\u6e90\u7801\u3001\u53cd\u7801\u3001\u8865\u7801\u201d\u77e5\u8bc6\uff0c\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u67e5\u9605\u5b66\u4e60\uff1b

    \u5176\u5b83\u6574\u6570\u7c7b\u578b byte, short, long \u53d6\u503c\u8303\u56f4\u7684\u8ba1\u7b97\u65b9\u6cd5\u4e0e int \u7c7b\u4f3c\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_data_structure/data_and_memory/#_2","title":"\u6d6e\u70b9\u6570\u8868\u793a\u65b9\u5f0f *","text":"

    Note

    \u5728\u672c\u4e66\u4e2d\uff0c\u6807\u9898\u540e\u7684 * \u7b26\u53f7\u4ee3\u8868\u9009\u8bfb\u7ae0\u8282\uff0c\u5982\u679c\u4f60\u89c9\u5f97\u7406\u89e3\u56f0\u96be\uff0c\u5efa\u8bae\u5148\u8df3\u8fc7\uff0c\u7b49\u5b66\u5b8c\u5fc5\u8bfb\u7ae0\u8282\u540e\u7eed\u518d\u5355\u72ec\u653b\u514b\u3002

    \u7ec6\u5fc3\u7684\u4f60\u53ef\u80fd\u4f1a\u7591\u60d1\uff1a int \u548c float \u957f\u5ea6\u76f8\u540c\uff0c\u90fd\u662f 4 bytes \uff0c\u4f46\u4e3a\u4ec0\u4e48 float \u7684\u53d6\u503c\u8303\u56f4\u8fdc\u5927\u4e8e int \uff1f\u6309\u8bf4 float \u9700\u8981\u8868\u793a\u5c0f\u6570\uff0c\u53d6\u503c\u8303\u56f4\u5e94\u8be5\u53d8\u5c0f\u624d\u5bf9\u3002

    \u5176\u5b9e\uff0c\u8fd9\u662f\u56e0\u4e3a\u6d6e\u70b9\u6570 float \u91c7\u7528\u4e86\u4e0d\u540c\u7684\u8868\u793a\u65b9\u5f0f\u3002IEEE 754 \u6807\u51c6\u89c4\u5b9a\uff0c32-bit \u957f\u5ea6\u7684 float \u7531\u4ee5\u4e0b\u90e8\u5206\u6784\u6210\uff1a

    • \u7b26\u53f7\u4f4d \\(\\mathrm{S}\\) \uff1a\u5360 1 bit \uff1b
    • \u6307\u6570\u4f4d \\(\\mathrm{E}\\) \uff1a\u5360 8 bits \uff1b
    • \u5206\u6570\u4f4d \\(\\mathrm{N}\\) \uff1a\u5360 24 bits \uff0c\u5176\u4e2d 23 \u4f4d\u663e\u5f0f\u5b58\u50a8\uff1b

    \u8bbe 32-bit \u4e8c\u8fdb\u5236\u6570\u7684\u7b2c \\(i\\) \u4f4d\u4e3a \\(b_i\\) \uff0c\u5219 float \u503c\u7684\u8ba1\u7b97\u65b9\u6cd5\u5b9a\u4e49\u4e3a

    \\[ \\text { val } = (-1)^{b_{31}} \\times 2^{\\left(b_{30} b_{29} \\ldots b_{23}\\right)_2-127} \\times\\left(1 . b_{22} b_{21} \\ldots b_0\\right)_2 \\]

    \u8f6c\u5316\u5230\u5341\u8fdb\u5236\u4e0b\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a

    \\[ \\text { val }=(-1)^{\\mathrm{S}} \\times 2^{\\mathrm{E} -127} \\times (1 + \\mathrm{N}) \\]

    \u5176\u4e2d\u5404\u9879\u7684\u53d6\u503c\u8303\u56f4\u4e3a

    \\[ \\begin{aligned} \\mathrm{S} \\in & \\{ 0, 1\\} , \\quad \\mathrm{E} \\in \\{ 1, 2, \\dots, 254 \\} \\newline (1 + \\mathrm{N}) = & (1 + \\sum_{i=1}^{23} b_{23-i} 2^{-i}) \\subset [1, 2 - 2^{-23}] \\end{aligned} \\]

    Fig. IEEE 754 \u6807\u51c6\u4e0b\u7684 float \u8868\u793a\u65b9\u5f0f

    \u4ee5\u4e0a\u56fe\u4e3a\u4f8b\uff0c\\(\\mathrm{S} = 0\\) \uff0c \\(\\mathrm{E} = 124\\) \uff0c\\(\\mathrm{N} = 2^{-2} + 2^{-3} = 0.375\\) \uff0c\u6613\u5f97

    \\[ \\text { val } = (-1)^0 \\times 2^{124 - 127} \\times (1 + 0.375) = 0.171875 \\]

    \u73b0\u5728\u6211\u4eec\u53ef\u4ee5\u56de\u7b54\u5f00\u59cb\u7684\u95ee\u9898\uff1afloat \u7684\u8868\u793a\u65b9\u5f0f\u5305\u542b\u6307\u6570\u4f4d\uff0c\u5bfc\u81f4\u5176\u53d6\u503c\u8303\u56f4\u8fdc\u5927\u4e8e int \u3002\u6839\u636e\u4ee5\u4e0a\u8ba1\u7b97\uff0c float \u53ef\u8868\u793a\u7684\u6700\u5927\u6b63\u6570\u4e3a \\(2^{254 - 127} \\times (2 - 2^{-23}) \\approx 3.4 \\times 10^{38}\\) \uff0c\u5207\u6362\u7b26\u53f7\u4f4d\u4fbf\u53ef\u5f97\u5230\u6700\u5c0f\u8d1f\u6570\u3002

    \u6d6e\u70b9\u6570 float \u867d\u7136\u62d3\u5c55\u4e86\u53d6\u503c\u8303\u56f4\uff0c\u4f46\u526f\u4f5c\u7528\u662f\u727a\u7272\u4e86\u7cbe\u5ea6\u3002\u6574\u6570\u7c7b\u578b int \u5c06\u5168\u90e8 32 \u4f4d\u7528\u4e8e\u8868\u793a\u6570\u5b57\uff0c\u6570\u5b57\u662f\u5747\u5300\u5206\u5e03\u7684\uff1b\u800c\u7531\u4e8e\u6307\u6570\u4f4d\u7684\u5b58\u5728\uff0c\u6d6e\u70b9\u6570 float \u7684\u6570\u503c\u8d8a\u5927\uff0c\u76f8\u90bb\u4e24\u4e2a\u6570\u5b57\u4e4b\u95f4\u7684\u5dee\u503c\u5c31\u4f1a\u8d8b\u5411\u8d8a\u5927\u3002

    \u8fdb\u4e00\u6b65\u5730\uff0c\u6307\u6570\u4f4d \\(E = 0\\) \u548c \\(E = 255\\) \u5177\u6709\u7279\u6b8a\u542b\u4e49\uff0c\u7528\u4e8e\u8868\u793a\u96f6\u3001\u65e0\u7a77\u5927\u3001\\(\\mathrm{NaN}\\) \u7b49\u3002

    \u6307\u6570\u4f4d E \u5206\u6570\u4f4d \\(\\mathrm{N} = 0\\) \u5206\u6570\u4f4d \\(\\mathrm{N} \\ne 0\\) \u8ba1\u7b97\u516c\u5f0f \\(0\\) \\(\\pm 0\\) \u6b21\u6b63\u89c4\u6570 \\((-1)^{\\mathrm{S}} \\times 2^{-126} \\times (0.\\mathrm{N})\\) \\(1, 2, \\dots, 254\\) \u6b63\u89c4\u6570 \u6b63\u89c4\u6570 \\((-1)^{\\mathrm{S}} \\times 2^{(\\mathrm{E} -127)} \\times (1.\\mathrm{N})\\) \\(255\\) \\(\\pm \\infty\\) \\(\\mathrm{NaN}\\)

    \u7279\u522b\u5730\uff0c\u6b21\u6b63\u89c4\u6570\u663e\u8457\u63d0\u5347\u4e86\u5c0f\u6570\u7cbe\u5ea6\uff1a

    • \u6700\u5c0f\u6b63\u6b63\u89c4\u6570\u4e3a \\(2^{-126} \\approx 1.18 \\times 10^{-38}\\) \uff1b
    • \u6700\u5c0f\u6b63\u6b21\u6b63\u89c4\u6570\u4e3a \\(2^{-126} \\times 2^{-23} \\approx 1.4 \\times 10^{-45}\\) \uff1b

    \u53cc\u7cbe\u5ea6 double \u4e5f\u91c7\u7528\u7c7b\u4f3c float \u7684\u8868\u793a\u65b9\u6cd5\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_data_structure/data_and_memory/#_3","title":"\u57fa\u672c\u6570\u636e\u7c7b\u578b\u4e0e\u6570\u636e\u7ed3\u6784\u7684\u5173\u7cfb","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u6570\u636e\u7ed3\u6784\u662f\u5728\u8ba1\u7b97\u673a\u4e2d\u7ec4\u7ec7\u4e0e\u5b58\u50a8\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u5b83\u7684\u4e3b\u8bed\u662f\u201c\u7ed3\u6784\u201d\uff0c\u800c\u4e0d\u662f\u201c\u6570\u636e\u201d\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981\u8868\u793a\u201c\u4e00\u6392\u6570\u5b57\u201d\uff0c\u81ea\u7136\u60f3\u5230\u4f7f\u7528\u300c\u6570\u7ec4\u300d\u6570\u636e\u7ed3\u6784\u3002\u6570\u7ec4\u7684\u5b58\u50a8\u65b9\u5f0f\u53ef\u4ee5\u8868\u793a\u6570\u5b57\u7684\u76f8\u90bb\u5173\u7cfb\u3001\u987a\u5e8f\u5173\u7cfb\uff0c\u4f46\u81f3\u4e8e\u5176\u4e2d\u5b58\u50a8\u7684\u662f\u6574\u6570 int \uff0c\u8fd8\u662f\u5c0f\u6570 float \uff0c\u6216\u662f\u5b57\u7b26 char \uff0c\u5219\u4e0e\u6240\u8c13\u7684\u6570\u636e\u7684\u7ed3\u6784\u65e0\u5173\u4e86\u3002

    \u6362\u8a00\u4e4b\uff0c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u63d0\u4f9b\u4e86\u6570\u636e\u7684\u201c\u5185\u5bb9\u7c7b\u578b\u201d\uff0c\u800c\u6570\u636e\u7ed3\u6784\u63d0\u4f9b\u6570\u636e\u7684\u201c\u7ec4\u7ec7\u65b9\u5f0f\u201d\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint[] numbers = new int[5];\nfloat[] decimals = new float[5];\nchar[] characters = new char[5];\nboolean[] booleans = new boolean[5];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint numbers[5];\nfloat decimals[5];\nchar characters[5];\nbool booleans[5];\n
    \"\"\" Python \u7684 list \u53ef\u4ee5\u81ea\u7531\u5b58\u50a8\u5404\u79cd\u57fa\u672c\u6570\u636e\u7c7b\u578b\u548c\u5bf9\u8c61 \"\"\"\nlist = [0, 0.0, 'a', False]\n
    // \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d\nvar numbers = [5]int{}\nvar decimals = [5]float64{}\nvar characters = [5]byte{}\nvar booleans = [5]bool{}\n
    /* JavaScript \u7684\u6570\u7ec4\u53ef\u4ee5\u81ea\u7531\u5b58\u50a8\u5404\u79cd\u57fa\u672c\u6570\u636e\u7c7b\u578b\u548c\u5bf9\u8c61 */\nconst array = [0, 0.0, 'a', false];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nconst numbers: number[] = [];\nconst characters: string[] = [];\nconst booleans: boolean[] = [];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint numbers[10];\nfloat decimals[10];\nchar characters[10];\nbool booleans[10];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint[] numbers = new int[5];\nfloat[] decimals = new float[5];\nchar[] characters = new char[5];\nbool[] booleans = new bool[5];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nlet numbers = Array(repeating: Int(), count: 5)\nlet decimals = Array(repeating: Double(), count: 5)\nlet characters = Array(repeating: Character(\"a\"), count: 5)\nlet booleans = Array(repeating: Bool(), count: 5)\n
    \n
    "},{"location":"chapter_data_structure/data_and_memory/#312","title":"3.1.2. \u00a0 \u8ba1\u7b97\u673a\u5185\u5b58","text":"

    \u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u5185\u5b58\u548c\u786c\u76d8\u662f\u4e24\u79cd\u4e3b\u8981\u7684\u5b58\u50a8\u786c\u4ef6\u8bbe\u5907\u3002\u300c\u786c\u76d8\u300d\u4e3b\u8981\u7528\u4e8e\u957f\u671f\u5b58\u50a8\u6570\u636e\uff0c\u5bb9\u91cf\u8f83\u5927\uff08\u901a\u5e38\u53ef\u8fbe\u5230 TB \u7ea7\u522b\uff09\u3001\u901f\u5ea6\u8f83\u6162\u3002\u300c\u5185\u5b58\u300d\u7528\u4e8e\u8fd0\u884c\u7a0b\u5e8f\u65f6\u6682\u5b58\u6570\u636e\uff0c\u901f\u5ea6\u8f83\u5feb\uff0c\u4f46\u5bb9\u91cf\u8f83\u5c0f\uff08\u901a\u5e38\u4e3a GB \u7ea7\u522b\uff09\u3002

    \u7b97\u6cd5\u8fd0\u884c\u4e2d\uff0c\u76f8\u5173\u6570\u636e\u90fd\u88ab\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u3002\u4e0b\u56fe\u5c55\u793a\u4e86\u4e00\u4e2a\u8ba1\u7b97\u673a\u5185\u5b58\u6761\uff0c\u5176\u4e2d\u6bcf\u4e2a\u9ed1\u8272\u65b9\u5757\u90fd\u5305\u542b\u4e00\u5757\u5185\u5b58\u7a7a\u95f4\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u5185\u5b58\u60f3\u8c61\u6210\u4e00\u4e2a\u5de8\u5927\u7684 Excel \u8868\u683c\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5355\u5143\u683c\u90fd\u53ef\u4ee5\u5b58\u50a8 1 byte \u7684\u6570\u636e\uff0c\u5728\u7b97\u6cd5\u8fd0\u884c\u65f6\uff0c\u6240\u6709\u6570\u636e\u90fd\u88ab\u5b58\u50a8\u5728\u8fd9\u4e9b\u5355\u5143\u683c\u4e2d\u3002

    \u7cfb\u7edf\u901a\u8fc7\u300c\u5185\u5b58\u5730\u5740 Memory Location\u300d\u6765\u8bbf\u95ee\u76ee\u6807\u5185\u5b58\u4f4d\u7f6e\u7684\u6570\u636e\u3002\u8ba1\u7b97\u673a\u6839\u636e\u7279\u5b9a\u89c4\u5219\u7ed9\u8868\u683c\u4e2d\u6bcf\u4e2a\u5355\u5143\u683c\u7f16\u53f7\uff0c\u4fdd\u8bc1\u6bcf\u5757\u5185\u5b58\u7a7a\u95f4\u90fd\u6709\u72ec\u7acb\u7684\u5185\u5b58\u5730\u5740\u3002\u81ea\u6b64\uff0c\u7a0b\u5e8f\u4fbf\u901a\u8fc7\u8fd9\u4e9b\u5730\u5740\uff0c\u8bbf\u95ee\u5185\u5b58\u4e2d\u7684\u6570\u636e\u3002

    Fig. \u5185\u5b58\u6761\u3001\u5185\u5b58\u7a7a\u95f4\u3001\u5185\u5b58\u5730\u5740

    \u5185\u5b58\u8d44\u6e90\u662f\u8bbe\u8ba1\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u91cd\u8981\u8003\u8651\u56e0\u7d20\u3002\u5185\u5b58\u662f\u6240\u6709\u7a0b\u5e8f\u7684\u516c\u5171\u8d44\u6e90\uff0c\u5f53\u5185\u5b58\u88ab\u67d0\u7a0b\u5e8f\u5360\u7528\u65f6\uff0c\u4e0d\u80fd\u88ab\u5176\u5b83\u7a0b\u5e8f\u540c\u65f6\u4f7f\u7528\u3002\u6211\u4eec\u9700\u8981\u6839\u636e\u5269\u4f59\u5185\u5b58\u8d44\u6e90\u7684\u60c5\u51b5\u6765\u8bbe\u8ba1\u7b97\u6cd5\u3002\u4f8b\u5982\uff0c\u82e5\u5269\u4f59\u5185\u5b58\u7a7a\u95f4\u6709\u9650\uff0c\u5219\u8981\u6c42\u7b97\u6cd5\u5360\u7528\u7684\u5cf0\u503c\u5185\u5b58\u4e0d\u80fd\u8d85\u8fc7\u7cfb\u7edf\u5269\u4f59\u5185\u5b58\uff1b\u82e5\u8fd0\u884c\u7684\u7a0b\u5e8f\u5f88\u591a\u3001\u7f3a\u5c11\u5927\u5757\u8fde\u7eed\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u5219\u8981\u6c42\u9009\u53d6\u7684\u6570\u636e\u7ed3\u6784\u5fc5\u987b\u80fd\u591f\u5b58\u50a8\u5728\u79bb\u6563\u7684\u5185\u5b58\u7a7a\u95f4\u5185\u3002

    "},{"location":"chapter_data_structure/summary/","title":"3.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u6574\u6570 byte, short, int, long \u3001\u6d6e\u70b9\u6570 float, double \u3001\u5b57\u7b26 char \u3001\u5e03\u5c14 boolean \u662f\u8ba1\u7b97\u673a\u4e2d\u7684\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff0c\u5360\u7528\u7a7a\u95f4\u7684\u5927\u5c0f\u51b3\u5b9a\u4e86\u5b83\u4eec\u7684\u53d6\u503c\u8303\u56f4\u3002
    • \u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\uff0c\u6570\u636e\u5b58\u50a8\u5728\u8ba1\u7b97\u673a\u7684\u5185\u5b58\u4e2d\u3002\u5185\u5b58\u4e2d\u6bcf\u5757\u7a7a\u95f4\u90fd\u6709\u72ec\u7acb\u7684\u5185\u5b58\u5730\u5740\uff0c\u7a0b\u5e8f\u662f\u901a\u8fc7\u5185\u5b58\u5730\u5740\u6765\u8bbf\u95ee\u6570\u636e\u7684\u3002
    • \u6570\u636e\u7ed3\u6784\u4e3b\u8981\u53ef\u4ee5\u4ece\u903b\u8f91\u7ed3\u6784\u548c\u7269\u7406\u7ed3\u6784\u4e24\u4e2a\u89d2\u5ea6\u8fdb\u884c\u5206\u7c7b\u3002\u903b\u8f91\u7ed3\u6784\u53cd\u6620\u4e86\u6570\u636e\u4e2d\u5143\u7d20\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u7269\u7406\u7ed3\u6784\u53cd\u6620\u4e86\u6570\u636e\u5728\u8ba1\u7b97\u673a\u5185\u5b58\u4e2d\u7684\u5b58\u50a8\u5f62\u5f0f\u3002
    • \u5e38\u89c1\u7684\u903b\u8f91\u7ed3\u6784\u6709\u7ebf\u6027\u3001\u6811\u72b6\u3001\u7f51\u72b6\u7b49\u3002\u6211\u4eec\u4e00\u822c\u6839\u636e\u903b\u8f91\u7ed3\u6784\u5c06\u6570\u636e\u7ed3\u6784\u5206\u4e3a\u7ebf\u6027\uff08\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\uff09\u548c\u975e\u7ebf\u6027\uff08\u6811\u3001\u56fe\u3001\u5806\uff09\u4e24\u79cd\u3002\u6839\u636e\u5b9e\u73b0\u65b9\u5f0f\u7684\u4e0d\u540c\uff0c\u54c8\u5e0c\u8868\u53ef\u80fd\u662f\u7ebf\u6027\u6216\u975e\u7ebf\u6027\u3002
    • \u7269\u7406\u7ed3\u6784\u4e3b\u8981\u6709\u4e24\u79cd\uff0c\u5206\u522b\u662f\u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8\uff08\u6570\u7ec4\uff09\u548c\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8\uff08\u94fe\u8868\uff09\uff0c\u6240\u6709\u7684\u6570\u636e\u7ed3\u6784\u90fd\u662f\u7531\u6570\u7ec4\u3001\u6216\u94fe\u8868\u3001\u6216\u4e24\u8005\u7ec4\u5408\u5b9e\u73b0\u7684\u3002
    "},{"location":"chapter_graph/graph/","title":"9.1. \u00a0 \u56fe","text":"

    \u300c\u56fe Graph\u300d\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u7531\u300c\u9876\u70b9 Vertex\u300d\u548c\u300c\u8fb9 Edge\u300d\u7ec4\u6210\u3002\u6211\u4eec\u53ef\u5c06\u56fe \\(G\\) \u62bd\u8c61\u5730\u8868\u793a\u4e3a\u4e00\u7ec4\u9876\u70b9 \\(V\\) \u548c\u4e00\u7ec4\u8fb9 \\(E\\) \u7684\u96c6\u5408\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u8868\u793a\u4e00\u4e2a\u5305\u542b 5 \u4e2a\u9876\u70b9\u548c 7 \u6761\u8fb9\u7684\u56fe

    \\[ \\begin{aligned} V & = \\{ 1, 2, 3, 4, 5 \\} \\newline E & = \\{ (1,2), (1,3), (1,5), (2,3), (2,4), (2,5), (4,5) \\} \\newline G & = \\{ V, E \\} \\newline \\end{aligned} \\]

    Fig. \u94fe\u8868\u3001\u6811\u3001\u56fe\u4e4b\u95f4\u7684\u5173\u7cfb

    \u90a3\u4e48\uff0c\u56fe\u4e0e\u5176\u4ed6\u6570\u636e\u7ed3\u6784\u7684\u5173\u7cfb\u662f\u4ec0\u4e48\uff1f\u5982\u679c\u6211\u4eec\u628a\u300c\u9876\u70b9\u300d\u770b\u4f5c\u7ed3\u70b9\uff0c\u628a\u300c\u8fb9\u300d\u770b\u4f5c\u8fde\u63a5\u5404\u4e2a\u7ed3\u70b9\u7684\u6307\u9488\uff0c\u5219\u53ef\u5c06\u300c\u56fe\u300d\u770b\u6210\u4e00\u79cd\u4ece\u300c\u94fe\u8868\u300d\u62d3\u5c55\u800c\u6765\u7684\u6570\u636e\u7ed3\u6784\u3002\u76f8\u6bd4\u7ebf\u6027\u5173\u7cfb\uff08\u94fe\u8868\uff09\u548c\u5206\u6cbb\u5173\u7cfb\uff08\u6811\uff09\uff0c\u7f51\u7edc\u5173\u7cfb\uff08\u56fe\uff09\u7684\u81ea\u7531\u5ea6\u66f4\u9ad8\uff0c\u4e5f\u4ece\u800c\u66f4\u4e3a\u590d\u6742\u3002

    "},{"location":"chapter_graph/graph/#911","title":"9.1.1. \u00a0 \u56fe\u5e38\u89c1\u7c7b\u578b","text":"

    \u6839\u636e\u8fb9\u662f\u5426\u6709\u65b9\u5411\uff0c\u5206\u4e3a\u300c\u65e0\u5411\u56fe Undirected Graph\u300d\u548c\u300c\u6709\u5411\u56fe Directed Graph\u300d\u3002

    • \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u8fb9\u8868\u793a\u4e24\u9876\u70b9\u4e4b\u95f4\u201c\u53cc\u5411\u201d\u7684\u8fde\u63a5\u5173\u7cfb\uff0c\u4f8b\u5982\u5fae\u4fe1\u6216 QQ \u4e2d\u7684\u201c\u597d\u53cb\u5173\u7cfb\u201d\uff1b
    • \u5728\u6709\u5411\u56fe\u4e2d\uff0c\u8fb9\u662f\u6709\u65b9\u5411\u7684\uff0c\u5373 \\(A \\rightarrow B\\) \u548c \\(A \\leftarrow B\\) \u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u4f8b\u5982\u5fae\u535a\u6216\u6296\u97f3\u4e0a\u7684\u201c\u5173\u6ce8\u201d\u4e0e\u201c\u88ab\u5173\u6ce8\u201d\u5173\u7cfb\uff1b

    Fig. \u6709\u5411\u56fe\u4e0e\u65e0\u5411\u56fe

    \u6839\u636e\u6240\u6709\u9876\u70b9\u662f\u5426\u8fde\u901a\uff0c\u5206\u4e3a\u300c\u8fde\u901a\u56fe Connected Graph\u300d\u548c\u300c\u975e\u8fde\u901a\u56fe Disconnected Graph\u300d\u3002

    • \u5bf9\u4e8e\u8fde\u901a\u56fe\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u53ef\u4ee5\u5230\u8fbe\u5176\u4f59\u4efb\u610f\u9876\u70b9\uff1b
    • \u5bf9\u4e8e\u975e\u8fde\u901a\u56fe\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u81f3\u5c11\u6709\u4e00\u4e2a\u9876\u70b9\u65e0\u6cd5\u5230\u8fbe\uff1b

    Fig. \u8fde\u901a\u56fe\u4e0e\u975e\u8fde\u901a\u56fe

    \u6211\u4eec\u53ef\u4ee5\u7ed9\u8fb9\u6dfb\u52a0\u201c\u6743\u91cd\u201d\u53d8\u91cf\uff0c\u5f97\u5230\u300c\u6709\u6743\u56fe Weighted Graph\u300d\u3002\u4f8b\u5982\uff0c\u5728\u738b\u8005\u8363\u8000\u7b49\u6e38\u620f\u4e2d\uff0c\u7cfb\u7edf\u4f1a\u6839\u636e\u5171\u540c\u6e38\u620f\u65f6\u95f4\u6765\u8ba1\u7b97\u73a9\u5bb6\u4e4b\u95f4\u7684\u201c\u4eb2\u5bc6\u5ea6\u201d\uff0c\u8fd9\u79cd\u4eb2\u5bc6\u5ea6\u7f51\u7edc\u5c31\u53ef\u4ee5\u4f7f\u7528\u6709\u6743\u56fe\u6765\u8868\u793a\u3002

    Fig. \u6709\u6743\u56fe\u4e0e\u65e0\u6743\u56fe

    "},{"location":"chapter_graph/graph/#912","title":"9.1.2. \u00a0 \u56fe\u5e38\u7528\u672f\u8bed","text":"
    • \u300c\u90bb\u63a5 Adjacency\u300d\uff1a\u5f53\u4e24\u9876\u70b9\u4e4b\u95f4\u6709\u8fb9\u76f8\u8fde\u65f6\uff0c\u79f0\u6b64\u4e24\u9876\u70b9\u201c\u90bb\u63a5\u201d\u3002\u4f8b\u5982\uff0c\u4e0a\u56fe\u4e2d\u9876\u70b9 1 \u7684\u90bb\u63a5\u9876\u70b9\u4e3a\u9876\u70b9 2, 3, 5 \u3002
    • \u300c\u8def\u5f84 Path\u300d\uff1a\u4ece\u9876\u70b9 A \u5230\u9876\u70b9 B \u8d70\u8fc7\u7684\u8fb9\u6784\u6210\u7684\u5e8f\u5217\uff0c\u88ab\u79f0\u4e3a\u4ece A \u5230 B \u7684\u201c\u8def\u5f84\u201d\u3002\u4f8b\u5982\uff0c\u4e0a\u56fe\u4e2d 1, 5, 2, 4 \u662f\u9876\u70b9 1 \u5230\u9876\u70b9 4 \u7684\u4e00\u4e2a\u8def\u5f84\u3002
    • \u300c\u5ea6 Degree\u300d\u8868\u793a\u4e00\u4e2a\u9876\u70b9\u5177\u6709\u591a\u5c11\u6761\u8fb9\u3002\u5bf9\u4e8e\u6709\u5411\u56fe\uff0c\u300c\u5165\u5ea6 In-Degree\u300d\u8868\u793a\u6709\u591a\u5c11\u6761\u8fb9\u6307\u5411\u8be5\u9876\u70b9\uff0c\u300c\u51fa\u5ea6 Out-Degree\u300d\u8868\u793a\u6709\u591a\u5c11\u6761\u8fb9\u4ece\u8be5\u9876\u70b9\u6307\u51fa\u3002
    "},{"location":"chapter_graph/graph/#913","title":"9.1.3. \u00a0 \u56fe\u7684\u8868\u793a","text":"

    \u56fe\u7684\u5e38\u7528\u8868\u793a\u65b9\u6cd5\u6709\u300c\u90bb\u63a5\u77e9\u9635\u300d\u548c\u300c\u90bb\u63a5\u8868\u300d\u3002\u4ee5\u4e0b\u4f7f\u7528\u300c\u65e0\u5411\u56fe\u300d\u6765\u4e3e\u4f8b\u3002

    "},{"location":"chapter_graph/graph/#_1","title":"\u90bb\u63a5\u77e9\u9635","text":"

    \u8bbe\u56fe\u7684\u9876\u70b9\u6570\u91cf\u4e3a \\(n\\) \uff0c\u300c\u90bb\u63a5\u77e9\u9635 Adjacency Matrix\u300d\u4f7f\u7528\u4e00\u4e2a \\(n \\times n\\) \u5927\u5c0f\u7684\u77e9\u9635\u6765\u8868\u793a\u56fe\uff0c\u6bcf\u4e00\u884c\uff08\u5217\uff09\u4ee3\u8868\u4e00\u4e2a\u9876\u70b9\uff0c\u77e9\u9635\u5143\u7d20\u4ee3\u8868\u8fb9\uff0c\u4f7f\u7528 \\(1\\) \u6216 \\(0\\) \u6765\u8868\u793a\u4e24\u4e2a\u9876\u70b9\u4e4b\u95f4\u6709\u8fb9\u6216\u65e0\u8fb9\u3002

    \u5982\u4e0b\u56fe\u6240\u793a\uff0c\u8bb0\u90bb\u63a5\u77e9\u9635\u4e3a \\(M\\) \u3001\u9876\u70b9\u5217\u8868\u4e3a \\(V\\) \uff0c\u5219\u77e9\u9635\u5143\u7d20 \\(M[i][j] = 1\\) \u4ee3\u8868\u7740\u9876\u70b9 \\(V[i]\\) \u5230\u9876\u70b9 \\(V[j]\\) \u4e4b\u95f4\u6709\u8fb9\uff0c\u76f8\u53cd\u5730 \\(M[i][j] = 0\\) \u4ee3\u8868\u4e24\u9876\u70b9\u4e4b\u95f4\u65e0\u8fb9\u3002

    Fig. \u56fe\u7684\u90bb\u63a5\u77e9\u9635\u8868\u793a

    \u90bb\u63a5\u77e9\u9635\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

    • \u9876\u70b9\u4e0d\u80fd\u4e0e\u81ea\u8eab\u76f8\u8fde\uff0c\u56e0\u800c\u90bb\u63a5\u77e9\u9635\u4e3b\u5bf9\u89d2\u7ebf\u5143\u7d20\u6ca1\u6709\u610f\u4e49\u3002
    • \u300c\u65e0\u5411\u56fe\u300d\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u7b49\u4ef7\uff0c\u6b64\u65f6\u90bb\u63a5\u77e9\u9635\u5173\u4e8e\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\u3002
    • \u5c06\u90bb\u63a5\u77e9\u9635\u7684\u5143\u7d20\u4ece \\(1\\) , \\(0\\) \u66ff\u6362\u4e3a\u6743\u91cd\uff0c\u5219\u80fd\u591f\u8868\u793a\u300c\u6709\u6743\u56fe\u300d\u3002

    \u4f7f\u7528\u90bb\u63a5\u77e9\u9635\u8868\u793a\u56fe\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u8bbf\u95ee\u77e9\u9635\u5143\u7d20\u6765\u83b7\u53d6\u8fb9\uff0c\u56e0\u6b64\u589e\u5220\u67e5\u64cd\u4f5c\u7684\u6548\u7387\u5f88\u9ad8\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u5747\u4e3a \\(O(1)\\) \u3002\u7136\u800c\uff0c\u77e9\u9635\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \uff0c\u5185\u5b58\u5360\u7528\u8f83\u5927\u3002

    "},{"location":"chapter_graph/graph/#_2","title":"\u90bb\u63a5\u8868","text":"

    \u300c\u90bb\u63a5\u8868 Adjacency List\u300d\u4f7f\u7528 \\(n\\) \u4e2a\u94fe\u8868\u6765\u8868\u793a\u56fe\uff0c\u94fe\u8868\u7ed3\u70b9\u8868\u793a\u9876\u70b9\u3002\u7b2c \\(i\\) \u6761\u94fe\u8868\u5bf9\u5e94\u9876\u70b9 \\(i\\) \uff0c\u5176\u4e2d\u5b58\u50a8\u4e86\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\uff08\u5373\u4e0e\u8be5\u9876\u70b9\u76f8\u8fde\u7684\u9876\u70b9\uff09\u3002

    Fig. \u56fe\u7684\u90bb\u63a5\u8868\u8868\u793a

    \u90bb\u63a5\u8868\u4ec5\u5b58\u50a8\u5b58\u5728\u7684\u8fb9\uff0c\u800c\u8fb9\u7684\u603b\u6570\u5f80\u5f80\u8fdc\u5c0f\u4e8e \\(n^2\\) \uff0c\u56e0\u6b64\u66f4\u52a0\u8282\u7701\u7a7a\u95f4\u3002\u4f46\u662f\uff0c\u56e0\u4e3a\u5728\u90bb\u63a5\u8868\u4e2d\u9700\u8981\u901a\u8fc7\u904d\u5386\u94fe\u8868\u6765\u67e5\u627e\u8fb9\uff0c\u6240\u4ee5\u5176\u65f6\u95f4\u6548\u7387\u4e0d\u5982\u90bb\u63a5\u77e9\u9635\u3002

    \u89c2\u5bdf\u4e0a\u56fe\u53d1\u73b0\uff0c\u90bb\u63a5\u8868\u7ed3\u6784\u4e0e\u54c8\u5e0c\u8868\u300c\u94fe\u5730\u5740\u6cd5\u300d\u975e\u5e38\u76f8\u4f3c\uff0c\u56e0\u6b64\u6211\u4eec\u4e5f\u53ef\u4ee5\u7528\u7c7b\u4f3c\u65b9\u6cd5\u6765\u4f18\u5316\u6548\u7387\u3002\u6bd4\u5982\uff0c\u5f53\u94fe\u8868\u8f83\u957f\u65f6\uff0c\u53ef\u4ee5\u628a\u94fe\u8868\u8f6c\u5316\u4e3a AVL \u6811\u6216\u7ea2\u9ed1\u6811\uff0c\u4ece\u800c\u5c06\u65f6\u95f4\u6548\u7387\u4ece \\(O(n)\\) \u4f18\u5316\u81f3 \\(O(\\log n)\\) \uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4e2d\u5e8f\u904d\u5386\u83b7\u53d6\u6709\u5e8f\u5e8f\u5217\uff1b\u8fd8\u53ef\u4ee5\u5c06\u94fe\u8868\u8f6c\u5316\u4e3a\u54c8\u5e0c\u8868\uff0c\u5c06\u65f6\u95f4\u590d\u6742\u5ea6\u964d\u4f4e\u81f3 \\(O(1)\\) \u3002

    "},{"location":"chapter_graph/graph/#914","title":"9.1.4. \u00a0 \u56fe\u5e38\u89c1\u5e94\u7528","text":"

    \u73b0\u5b9e\u4e2d\u7684\u8bb8\u591a\u7cfb\u7edf\u90fd\u53ef\u4ee5\u4f7f\u7528\u56fe\u6765\u5efa\u6a21\uff0c\u5bf9\u5e94\u7684\u5f85\u6c42\u89e3\u95ee\u9898\u4e5f\u53ef\u4ee5\u88ab\u7ea6\u5316\u4e3a\u56fe\u8ba1\u7b97\u95ee\u9898\u3002

    \u9876\u70b9 \u8fb9 \u56fe\u8ba1\u7b97\u95ee\u9898 \u793e\u4ea4\u7f51\u7edc \u7528\u6237 \u597d\u53cb\u5173\u7cfb \u6f5c\u5728\u597d\u53cb\u63a8\u8350 \u5730\u94c1\u7ebf\u8def \u7ad9\u70b9 \u7ad9\u70b9\u95f4\u7684\u8fde\u901a\u6027 \u6700\u77ed\u8def\u7ebf\u63a8\u8350 \u592a\u9633\u7cfb \u661f\u4f53 \u661f\u4f53\u95f4\u7684\u4e07\u6709\u5f15\u529b\u4f5c\u7528 \u884c\u661f\u8f68\u9053\u8ba1\u7b97"},{"location":"chapter_graph/graph_operations/","title":"9.2. \u00a0 \u56fe\u57fa\u7840\u64cd\u4f5c","text":"

    \u56fe\u7684\u57fa\u7840\u64cd\u4f5c\u5206\u4e3a\u5bf9\u300c\u8fb9\u300d\u7684\u64cd\u4f5c\u548c\u5bf9\u300c\u9876\u70b9\u300d\u7684\u64cd\u4f5c\uff0c\u5728\u300c\u90bb\u63a5\u77e9\u9635\u300d\u548c\u300c\u90bb\u63a5\u8868\u300d\u8fd9\u4e24\u79cd\u8868\u793a\u4e0b\u7684\u5b9e\u73b0\u65b9\u5f0f\u4e0d\u540c\u3002

    "},{"location":"chapter_graph/graph_operations/#921","title":"9.2.1. \u00a0 \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u7684\u5b9e\u73b0","text":"

    \u8bbe\u56fe\u7684\u9876\u70b9\u603b\u6570\u4e3a \\(n\\) \uff0c\u5219\u6709\uff1a

    • \u6dfb\u52a0\u6216\u5220\u9664\u8fb9\uff1a\u76f4\u63a5\u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u4fee\u6539\u6307\u5b9a\u8fb9\u7684\u5bf9\u5e94\u5143\u7d20\u5373\u53ef\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002\u800c\u7531\u4e8e\u662f\u65e0\u5411\u56fe\uff0c\u56e0\u6b64\u9700\u8981\u540c\u65f6\u66f4\u65b0\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u3002
    • \u6dfb\u52a0\u9876\u70b9\uff1a\u5728\u90bb\u63a5\u77e9\u9635\u7684\u5c3e\u90e8\u6dfb\u52a0\u4e00\u884c\u4e00\u5217\uff0c\u5e76\u5168\u90e8\u586b \\(0\\) \u5373\u53ef\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\u3002
    • \u5220\u9664\u9876\u70b9\uff1a\u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u4e00\u884c\u4e00\u5217\u3002\u5f53\u5220\u9664\u9996\u884c\u9996\u5217\u65f6\u8fbe\u5230\u6700\u5dee\u60c5\u51b5\uff0c\u9700\u8981\u5c06 \\((n-1)^2\\) \u4e2a\u5143\u7d20\u201c\u5411\u5de6\u4e0a\u79fb\u52a8\u201d\uff0c\u4ece\u800c\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002
    • \u521d\u59cb\u5316\uff1a\u4f20\u5165 \\(n\\) \u4e2a\u9876\u70b9\uff0c\u521d\u59cb\u5316\u957f\u5ea6\u4e3a \\(n\\) \u7684\u9876\u70b9\u5217\u8868 vertices \uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b\u521d\u59cb\u5316 \\(n \\times n\\) \u5927\u5c0f\u7684\u90bb\u63a5\u77e9\u9635 adjMat \uff0c\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002
    \u521d\u59cb\u5316\u90bb\u63a5\u77e9\u9635\u6dfb\u52a0\u8fb9\u5220\u9664\u8fb9\u6dfb\u52a0\u9876\u70b9\u5220\u9664\u9876\u70b9

    \u4ee5\u4e0b\u662f\u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u8868\u793a\u56fe\u7684\u5b9e\u73b0\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_adjacency_matrix.java
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nList<Integer> vertices;     // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nList<List<Integer>> adjMat; // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u65b9\u6cd5 */\npublic GraphAdjMat(int[] vertices, int[][] edges) {\nthis.vertices = new ArrayList<>();\nthis.adjMat = new ArrayList<>();\n// \u6dfb\u52a0\u9876\u70b9\nfor (int val : vertices) {\naddVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (int[] e : edges) {\naddEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size() {\nreturn vertices.size();\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(int val) {\nint n = size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.add(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nList<Integer> newRow = new ArrayList<>(n);\nfor (int j = 0; j < n; j++) {\nnewRow.add(0);\n}\nadjMat.add(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (List<Integer> row : adjMat) {\nrow.add(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(int index) {\nif (index >= size())\nthrow new IndexOutOfBoundsException();\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.remove(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.remove(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (List<Integer> row : adjMat) {\nrow.remove(index);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void addEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfBoundsException();\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat.get(i).set(j, 1);\nadjMat.get(j).set(i, 1);\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void removeEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfBoundsException();\nadjMat.get(i).set(j, 0);\nadjMat.get(j).set(i, 0);\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\npublic void print() {\nSystem.out.print(\"\u9876\u70b9\u5217\u8868 = \");\nSystem.out.println(vertices);\nSystem.out.println(\"\u90bb\u63a5\u77e9\u9635 =\");\nPrintUtil.printMatrix(adjMat);\n}\n}\n
    graph_adjacency_matrix.cpp
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nvector<int> vertices;       // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nvector<vector<int>> adjMat; // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nGraphAdjMat(const vector<int>& vertices, const vector<vector<int>>& edges) {\n// \u6dfb\u52a0\u9876\u70b9\nfor (int val : vertices) {\naddVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (const vector<int>& edge : edges) {\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nint size() const {\nreturn vertices.size();\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nvoid addVertex(int val) {\nint n = size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.push_back(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nadjMat.emplace_back(n, 0);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (vector<int>& row : adjMat) {\nrow.push_back(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nvoid removeVertex(int index) {\nif (index >= size()) {\nthrow out_of_range(\"\u9876\u70b9\u4e0d\u5b58\u5728\");\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.erase(vertices.begin() + index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.erase(adjMat.begin() + index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (vector<int>& row : adjMat) {\nrow.erase(row.begin() + index);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nvoid addEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j) {\nthrow out_of_range(\"\u9876\u70b9\u4e0d\u5b58\u5728\");\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat[i][j] = 1;\nadjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nvoid removeEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j) {\nthrow out_of_range(\"\u9876\u70b9\u4e0d\u5b58\u5728\");\n}\nadjMat[i][j] = 0;\nadjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nvoid print() {\ncout << \"\u9876\u70b9\u5217\u8868 = \";\nPrintUtil::printVector(vertices);\ncout << \"\u90bb\u63a5\u77e9\u9635 =\" << endl;\nPrintUtil::printVectorMatrix(adjMat);\n}\n};\n
    graph_adjacency_matrix.py
    class GraphAdjMat:\n\"\"\" \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b \"\"\"\n# \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nvertices: List[int] = []\n# \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadj_mat: List[List[int]] = []\ndef __init__(self, vertices: List[int], edges: List[List[int]]) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.vertices: List[int] = []\nself.adj_mat: List[List[int]] = []\n# \u6dfb\u52a0\u9876\u70b9\nfor val in vertices:\nself.add_vertex(val)\n# \u6dfb\u52a0\u8fb9\n# \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor e in edges:\nself.add_edge(e[0], e[1])\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u9876\u70b9\u6570\u91cf \"\"\"\nreturn len(self.vertices)\ndef add_vertex(self, val: int) -> None:\n\"\"\" \u6dfb\u52a0\u9876\u70b9 \"\"\"\nn = self.size()\n# \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nself.vertices.append(val)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nnew_row = [0] * n\nself.adj_mat.append(new_row)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor row in self.adj_mat:\nrow.append(0)\ndef remove_vertex(self, index: int) -> None:\n\"\"\" \u5220\u9664\u9876\u70b9 \"\"\"\nif index >= self.size():\nraise IndexError()\n# \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nself.vertices.pop(index)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nself.adj_mat.pop(index)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor row in self.adj_mat:\nrow.pop(index)\ndef add_edge(self, i: int, j: int) -> None:\n\"\"\" \u6dfb\u52a0\u8fb9 \"\"\"\n# \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\n# \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 or j < 0 or i >= self.size() or j >= self.size() or i == j:\nraise IndexError()\n# \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nself.adj_mat[i][j] = 1\nself.adj_mat[j][i] = 1\ndef remove_edge(self, i: int, j: int) -> None:\n\"\"\" \u5220\u9664\u8fb9 \"\"\"\n# \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\n# \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 or j < 0 or i >= self.size() or j >= self.size() or i == j:\nraise IndexError()\nself.adj_mat[i][j] = 0\nself.adj_mat[j][i] = 0\ndef print(self) -> None:\n\"\"\" \u6253\u5370\u90bb\u63a5\u77e9\u9635 \"\"\"\nprint(\"\u9876\u70b9\u5217\u8868 =\", self.vertices)\nprint(\"\u90bb\u63a5\u77e9\u9635 =\")\nprint_matrix(self.adj_mat)\n
    graph_adjacency_matrix.go
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\ntype graphAdjMat struct {\n// \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nvertices []int\n// \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadjMat [][]int\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nfunc newGraphAdjMat(vertices []int, edges [][]int) *graphAdjMat {\n// \u6dfb\u52a0\u9876\u70b9\nn := len(vertices)\nadjMat := make([][]int, n)\nfor i := range adjMat {\nadjMat[i] = make([]int, n)\n}\n// \u521d\u59cb\u5316\u56fe\ng := &graphAdjMat{\nvertices: vertices,\nadjMat:   adjMat,\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor i := range edges {\ng.addEdge(edges[i][0], edges[i][1])\n}\nreturn g\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nfunc (g *graphAdjMat) size() int {\nreturn len(g.vertices)\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nfunc (g *graphAdjMat) addVertex(val int) {\nn := g.size()\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\ng.vertices = append(g.vertices, val)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nnewRow := make([]int, n)\ng.adjMat = append(g.adjMat, newRow)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor i := range g.adjMat {\ng.adjMat[i] = append(g.adjMat[i], 0)\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nfunc (g *graphAdjMat) removeVertex(index int) {\nif index >= g.size() {\nreturn\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\ng.vertices = append(g.vertices[:index], g.vertices[index+1:]...)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\ng.adjMat = append(g.adjMat[:index], g.adjMat[index+1:]...)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor i := range g.adjMat {\ng.adjMat[i] = append(g.adjMat[i][:index], g.adjMat[i][index+1:]...)\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc (g *graphAdjMat) addEdge(i, j int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= g.size() || j >= g.size() || i == j {\nfmt.Errorf(\"%s\", \"Index Out Of Bounds Exception\")\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\ng.adjMat[i][j] = 1\ng.adjMat[j][i] = 1\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc (g *graphAdjMat) removeEdge(i, j int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= g.size() || j >= g.size() || i == j {\nfmt.Errorf(\"%s\", \"Index Out Of Bounds Exception\")\n}\ng.adjMat[i][j] = 0\ng.adjMat[j][i] = 0\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nfunc (g *graphAdjMat) print() {\nfmt.Printf(\"\\t\u9876\u70b9\u5217\u8868 = %v\\n\", g.vertices)\nfmt.Printf(\"\\t\u90bb\u63a5\u77e9\u9635 = \\n\")\nfor i := range g.adjMat {\nfmt.Printf(\"\\t\\t\\t%v\\n\", g.adjMat[i])\n}\n}\n
    graph_adjacency_matrix.js
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nvertices;   // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadjMat;     // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u51fd\u6570 */\nconstructor(vertices, edges) {\nthis.vertices = [];\nthis.adjMat = [];\n// \u6dfb\u52a0\u9876\u70b9\nfor (const val of vertices) {\nthis.addVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (const e of edges) {\nthis.addEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize() {\nreturn this.vertices.length;\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(val) {\nconst n = this.size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nthis.vertices.push(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nconst newRow = [];\nfor (let j = 0; j < n; j++) {\nnewRow.push(0);\n}\nthis.adjMat.push(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (const row of this.adjMat) {\nrow.push(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(index) {\nif (index >= this.size()) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nthis.vertices.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nthis.adjMat.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (const row of this.adjMat) {\nrow.splice(index, 1);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\naddEdge(i, j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nthis.adjMat[i][j] = 1;\nthis.adjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nremoveEdge(i, j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\nthis.adjMat[i][j] = 0;\nthis.adjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nprint() {\nconsole.log(\"\u9876\u70b9\u5217\u8868 = \", this.vertices);\nconsole.log(\"\u90bb\u63a5\u77e9\u9635 =\", this.adjMat);\n}\n}\n
    graph_adjacency_matrix.ts
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nvertices: number[];     // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadjMat: number[][];     // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u51fd\u6570 */\nconstructor(vertices: number[], edges: number[][]) {\nthis.vertices = [];\nthis.adjMat = [];\n// \u6dfb\u52a0\u9876\u70b9\nfor (const val of vertices) {\nthis.addVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (const e of edges) {\nthis.addEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize(): number {\nreturn this.vertices.length;\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(val: number): void {\nconst n: number = this.size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nthis.vertices.push(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nconst newRow: number[] = [];\nfor (let j: number = 0; j < n; j++) {\nnewRow.push(0);\n}\nthis.adjMat.push(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (const row of this.adjMat) {\nrow.push(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(index: number): void {\nif (index >= this.size()) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nthis.vertices.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nthis.adjMat.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (const row of this.adjMat) {\nrow.splice(index, 1);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\naddEdge(i: number, j: number): void {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nthis.adjMat[i][j] = 1;\nthis.adjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nremoveEdge(i: number, j: number): void {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\nthis.adjMat[i][j] = 0;\nthis.adjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nprint(): void {\nconsole.log(\"\u9876\u70b9\u5217\u8868 = \", this.vertices);\nconsole.log(\"\u90bb\u63a5\u77e9\u9635 =\", this.adjMat);\n}\n}\n
    graph_adjacency_matrix.c
    [class]{graphAdjMat}-[func]{}\n
    graph_adjacency_matrix.cs
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat\n{\nList<int> vertices;     // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nList<List<int>> adjMat; // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u51fd\u6570 */\npublic GraphAdjMat(int[] vertices, int[][] edges)\n{\nthis.vertices = new List<int>();\nthis.adjMat = new List<List<int>>();\n// \u6dfb\u52a0\u9876\u70b9\nforeach (int val in vertices)\n{\naddVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nforeach (int[] e in edges)\n{\naddEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size()\n{\nreturn vertices.Count;\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(int val)\n{\nint n = size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.Add(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nList<int> newRow = new List<int>(n);\nfor (int j = 0; j < n; j++)\n{\nnewRow.Add(0);\n}\nadjMat.Add(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nforeach (List<int> row in adjMat)\n{\nrow.Add(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(int index)\n{\nif (index >= size())\nthrow new IndexOutOfRangeException();\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.RemoveAt(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.RemoveAt(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nforeach (List<int> row in adjMat)\n{\nrow.RemoveAt(index);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void addEdge(int i, int j)\n{\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfRangeException();\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat[i][j] = 1;\nadjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void removeEdge(int i, int j)\n{\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfRangeException();\nadjMat[i][j] = 0;\nadjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\npublic void print()\n{\nConsole.Write(\"\u9876\u70b9\u5217\u8868 = \");\nPrintUtil.PrintList(vertices);\nConsole.WriteLine(\"\u90bb\u63a5\u77e9\u9635 =\");\nPrintUtil.printMatrix(adjMat);\n}\n}\n
    graph_adjacency_matrix.swift
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nprivate var vertices: [Int] // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nprivate var adjMat: [[Int]] // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u65b9\u6cd5 */\ninit(vertices: [Int], edges: [[Int]]) {\nself.vertices = []\nadjMat = []\n// \u6dfb\u52a0\u9876\u70b9\nfor val in vertices {\naddVertex(val: val)\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor e in edges {\naddEdge(i: e[0], j: e[1])\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nfunc size() -> Int {\nvertices.count\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nfunc addVertex(val: Int) {\nlet n = size()\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.append(val)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nlet newRow = Array(repeating: 0, count: n)\nadjMat.append(newRow)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor i in adjMat.indices {\nadjMat[i].append(0)\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nfunc removeVertex(index: Int) {\nif index >= size() {\nfatalError(\"\u8d8a\u754c\")\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.remove(at: index)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.remove(at: index)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor i in adjMat.indices {\nadjMat[i].remove(at: index)\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc addEdge(i: Int, j: Int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= size() || j >= size() || i == j {\nfatalError(\"\u8d8a\u754c\")\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat[i][j] = 1\nadjMat[j][i] = 1\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc removeEdge(i: Int, j: Int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= size() || j >= size() || i == j {\nfatalError(\"\u8d8a\u754c\")\n}\nadjMat[i][j] = 0\nadjMat[j][i] = 0\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nfunc print() {\nSwift.print(\"\u9876\u70b9\u5217\u8868 = \", terminator: \"\")\nSwift.print(vertices)\nSwift.print(\"\u90bb\u63a5\u77e9\u9635 =\")\nPrintUtil.printMatrix(matrix: adjMat)\n}\n}\n
    graph_adjacency_matrix.zig
    \n
    "},{"location":"chapter_graph/graph_operations/#922","title":"9.2.2. \u00a0 \u57fa\u4e8e\u90bb\u63a5\u8868\u7684\u5b9e\u73b0","text":"

    \u8bbe\u56fe\u7684\u9876\u70b9\u603b\u6570\u4e3a \\(n\\) \u3001\u8fb9\u603b\u6570\u4e3a \\(m\\) \uff0c\u5219\u6709\uff1a

    • \u6dfb\u52a0\u8fb9\uff1a\u5728\u9876\u70b9\u5bf9\u5e94\u94fe\u8868\u7684\u5c3e\u90e8\u6dfb\u52a0\u8fb9\u5373\u53ef\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002\u56e0\u4e3a\u662f\u65e0\u5411\u56fe\uff0c\u6240\u4ee5\u9700\u8981\u540c\u65f6\u6dfb\u52a0\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u3002
    • \u5220\u9664\u8fb9\uff1a\u5728\u9876\u70b9\u5bf9\u5e94\u94fe\u8868\u4e2d\u67e5\u8be2\u4e0e\u5220\u9664\u6307\u5b9a\u8fb9\uff0c\u4f7f\u7528 \\(O(m)\\) \u65f6\u95f4\u3002\u4e0e\u6dfb\u52a0\u8fb9\u4e00\u6837\uff0c\u9700\u8981\u540c\u65f6\u5220\u9664\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u3002
    • \u6dfb\u52a0\u9876\u70b9\uff1a\u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u94fe\u8868\u5373\u53ef\uff0c\u5e76\u4ee5\u65b0\u589e\u9876\u70b9\u4e3a\u94fe\u8868\u5934\u7ed3\u70b9\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002
    • \u5220\u9664\u9876\u70b9\uff1a\u9700\u8981\u904d\u5386\u6574\u4e2a\u90bb\u63a5\u8868\uff0c\u5220\u9664\u5305\u542b\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u8fb9\uff0c\u4f7f\u7528 \\(O(n + m)\\) \u65f6\u95f4\u3002
    • \u521d\u59cb\u5316\uff1a\u9700\u8981\u5728\u90bb\u63a5\u8868\u4e2d\u5efa\u7acb \\(n\\) \u4e2a\u7ed3\u70b9\u548c \\(2m\\) \u6761\u8fb9\uff0c\u4f7f\u7528 \\(O(n + m)\\) \u65f6\u95f4\u3002
    \u521d\u59cb\u5316\u90bb\u63a5\u8868\u6dfb\u52a0\u8fb9\u5220\u9664\u8fb9\u6dfb\u52a0\u9876\u70b9\u5220\u9664\u9876\u70b9

    \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u56fe\u7684\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002\u7ec6\u5fc3\u7684\u540c\u5b66\u53ef\u80fd\u6ce8\u610f\u5230\uff0c\u6211\u4eec\u5728\u90bb\u63a5\u8868\u4e2d\u4f7f\u7528 Vertex \u7ed3\u70b9\u7c7b\u6765\u8868\u793a\u9876\u70b9\uff0c\u8fd9\u6837\u505a\u7684\u539f\u56e0\u662f\uff1a

    • \u5982\u679c\u6211\u4eec\u9009\u62e9\u901a\u8fc7\u9876\u70b9\u503c\u6765\u533a\u5206\u4e0d\u540c\u9876\u70b9\uff0c\u90a3\u4e48\u503c\u91cd\u590d\u7684\u9876\u70b9\u5c06\u65e0\u6cd5\u88ab\u533a\u5206\u3002
    • \u5982\u679c\u7c7b\u4f3c\u90bb\u63a5\u77e9\u9635\u90a3\u6837\uff0c\u4f7f\u7528\u9876\u70b9\u5217\u8868\u7d22\u5f15\u6765\u533a\u5206\u4e0d\u540c\u9876\u70b9\u3002\u90a3\u4e48\uff0c\u5047\u8bbe\u6211\u4eec\u60f3\u8981\u5220\u9664\u7d22\u5f15\u4e3a \\(i\\) \u7684\u9876\u70b9\uff0c\u5219\u9700\u8981\u904d\u5386\u6574\u4e2a\u90bb\u63a5\u8868\uff0c\u5c06\u5176\u4e2d \\(> i\\) \u7684\u7d22\u5f15\u5168\u90e8\u6267\u884c \\(-1\\) \uff0c\u8fd9\u6837\u64cd\u4f5c\u6548\u7387\u592a\u4f4e\u3002
    • \u56e0\u6b64\u6211\u4eec\u8003\u8651\u5f15\u5165\u9876\u70b9\u7c7b Vertex \uff0c\u4f7f\u5f97\u6bcf\u4e2a\u9876\u70b9\u90fd\u662f\u552f\u4e00\u7684\u5bf9\u8c61\uff0c\u6b64\u65f6\u5220\u9664\u9876\u70b9\u65f6\u5c31\u65e0\u9700\u6539\u52a8\u5176\u4f59\u9876\u70b9\u4e86\u3002
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_adjacency_list.java
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nMap<Vertex, List<Vertex>> adjList;\n/* \u6784\u9020\u65b9\u6cd5 */\npublic GraphAdjList(Vertex[][] edges) {\nthis.adjList = new HashMap<>();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (Vertex[] edge : edges) {\naddVertex(edge[0]);\naddVertex(edge[1]);\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size() {\nreturn adjList.size();\n}\n/* \u6dfb\u52a0\u8fb9 */\npublic void addEdge(Vertex vet1, Vertex vet2) {\nif (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2)\nthrow new IllegalArgumentException();\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList.get(vet1).add(vet2);\nadjList.get(vet2).add(vet1);\n}\n/* \u5220\u9664\u8fb9 */\npublic void removeEdge(Vertex vet1, Vertex vet2) {\nif (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2)\nthrow new IllegalArgumentException();\n// \u5220\u9664\u8fb9 vet1 - vet2\nadjList.get(vet1).remove(vet2);\nadjList.get(vet2).remove(vet1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(Vertex vet) {\nif (adjList.containsKey(vet))\nreturn;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList.put(vet, new ArrayList<>());\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(Vertex vet) {\nif (!adjList.containsKey(vet))\nthrow new IllegalArgumentException();\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.remove(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (List<Vertex> list : adjList.values()) {\nlist.remove(vet);\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\npublic void print() {\nSystem.out.println(\"\u90bb\u63a5\u8868 =\");\nfor (Map.Entry<Vertex, List<Vertex>> entry : adjList.entrySet()) {\nList<Integer> tmp = new ArrayList<>();\nfor (Vertex vertex : entry.getValue())\ntmp.add(vertex.val);\nSystem.out.println(entry.getKey().val + \": \" + tmp + \",\");\n}\n}\n}\n
    graph_adjacency_list.cpp
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\npublic:\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nunordered_map<Vertex*, vector<Vertex*>> adjList;\n/* \u5728 vector \u4e2d\u5220\u9664\u6307\u5b9a\u7ed3\u70b9 */\nvoid remove(vector<Vertex*> &vec, Vertex *vet) {\nfor (int i = 0; i < vec.size(); i++) {\nif (vec[i] == vet) {\nvec.erase(vec.begin() + i);\nbreak;\n}\n}\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nGraphAdjList(const vector<vector<Vertex*>>& edges) {\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (const vector<Vertex*>& edge : edges) {\naddVertex(edge[0]);\naddVertex(edge[1]);\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nint size() { return adjList.size(); }\n/* \u6dfb\u52a0\u8fb9 */\nvoid addEdge(Vertex* vet1, Vertex* vet2) {\nif (!adjList.count(vet1) || !adjList.count(vet2) || vet1 == vet2)\nthrow invalid_argument(\"\u4e0d\u5b58\u5728\u9876\u70b9\");\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList[vet1].push_back(vet2);\nadjList[vet2].push_back(vet1);\n}\n/* \u5220\u9664\u8fb9 */\nvoid removeEdge(Vertex* vet1, Vertex* vet2) {\nif (!adjList.count(vet1) || !adjList.count(vet2) || vet1 == vet2)\nthrow invalid_argument(\"\u4e0d\u5b58\u5728\u9876\u70b9\");\n// \u5220\u9664\u8fb9 vet1 - vet2\nremove(adjList[vet1], vet2);\nremove(adjList[vet2], vet1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nvoid addVertex(Vertex* vet) {\nif (adjList.count(vet)) return;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList[vet] = vector<Vertex*>();\n}\n/* \u5220\u9664\u9876\u70b9 */\nvoid removeVertex(Vertex* vet) {\nif (!adjList.count(vet))\nthrow invalid_argument(\"\u4e0d\u5b58\u5728\u9876\u70b9\");\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.erase(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (auto& [key, vec] : adjList) {\nremove(vec, vet);\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nvoid print() {\ncout << \"\u90bb\u63a5\u8868 =\" << endl;\nfor (auto& [key, vec] : adjList) {\ncout << key->val << \": \";\nPrintUtil::printVector(vetsToVals(vec));\n}\n}\n};\n
    graph_adjacency_list.py
    class GraphAdjList:\n\"\"\" \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b \"\"\"\ndef __init__(self, edges: List[List[Vertex]]) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\n# \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nself.adj_list: Dict = {}\n# \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor edge in edges:\nself.add_vertex(edge[0])\nself.add_vertex(edge[1])\nself.add_edge(edge[0], edge[1])\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u9876\u70b9\u6570\u91cf \"\"\"\nreturn len(self.adj_list)\ndef add_edge(self, vet1: Vertex, vet2: Vertex) -> None:\n\"\"\" \u6dfb\u52a0\u8fb9 \"\"\"\nif vet1 not in self.adj_list or vet2 not in self.adj_list or vet1 == vet2:\nraise ValueError\n# \u6dfb\u52a0\u8fb9 vet1 - vet2\nself.adj_list[vet1].append(vet2)\nself.adj_list[vet2].append(vet1)\ndef remove_edge(self, vet1: Vertex, vet2: Vertex) -> None:\n\"\"\" \u5220\u9664\u8fb9 \"\"\"\nif vet1 not in self.adj_list or vet2 not in self.adj_list or vet1 == vet2:\nraise ValueError\n# \u5220\u9664\u8fb9 vet1 - vet2\nself.adj_list[vet1].remove(vet2)\nself.adj_list[vet2].remove(vet1)\ndef add_vertex(self, vet: Vertex) -> None:\n\"\"\" \u6dfb\u52a0\u9876\u70b9 \"\"\"\nif vet in self.adj_list:\nreturn\n# \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nself.adj_list[vet] = []\ndef remove_vertex(self, vet: Vertex) -> None:\n\"\"\" \u5220\u9664\u9876\u70b9 \"\"\"\nif vet not in self.adj_list:\nraise ValueError\n# \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nself.adj_list.pop(vet)\n# \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor vertex in self.adj_list:\nif vet in self.adj_list[vertex]:\nself.adj_list[vertex].remove(vet)\ndef print(self) -> None:\n\"\"\" \u6253\u5370\u90bb\u63a5\u8868 \"\"\"\nprint(\"\u90bb\u63a5\u8868 =\")\nfor vertex in self.adj_list:\ntmp = [v.val for v in self.adj_list[vertex]]\nprint(f\"{vertex.val}: {tmp},\")\n
    graph_adjacency_list.go
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\ntype graphAdjList struct {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nadjList map[Vertex][]Vertex\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nfunc newGraphAdjList(edges [][]Vertex) *graphAdjList {\ng := &graphAdjList{\nadjList: make(map[Vertex][]Vertex),\n}\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor _, edge := range edges {\ng.addVertex(edge[0])\ng.addVertex(edge[1])\ng.addEdge(edge[0], edge[1])\n}\nreturn g\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nfunc (g *graphAdjList) size() int {\nreturn len(g.adjList)\n}\n/* \u6dfb\u52a0\u8fb9 */\nfunc (g *graphAdjList) addEdge(vet1 Vertex, vet2 Vertex) {\n_, ok1 := g.adjList[vet1]\n_, ok2 := g.adjList[vet2]\nif !ok1 || !ok2 || vet1 == vet2 {\npanic(\"error\")\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2, \u6dfb\u52a0\u533f\u540d struct{},\ng.adjList[vet1] = append(g.adjList[vet1], vet2)\ng.adjList[vet2] = append(g.adjList[vet2], vet1)\n}\n/* \u5220\u9664\u8fb9 */\nfunc (g *graphAdjList) removeEdge(vet1 Vertex, vet2 Vertex) {\n_, ok1 := g.adjList[vet1]\n_, ok2 := g.adjList[vet2]\nif !ok1 || !ok2 || vet1 == vet2 {\npanic(\"error\")\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nDeleteSliceElms(g.adjList[vet1], vet2)\nDeleteSliceElms(g.adjList[vet2], vet1)\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nfunc (g *graphAdjList) addVertex(vet Vertex) {\n_, ok := g.adjList[vet]\nif ok {\nreturn\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\ng.adjList[vet] = make([]Vertex, 0)\n}\n/* \u5220\u9664\u9876\u70b9 */\nfunc (g *graphAdjList) removeVertex(vet Vertex) {\n_, ok := g.adjList[vet]\nif !ok {\npanic(\"error\")\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\ndelete(g.adjList, vet)\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor _, list := range g.adjList {\nDeleteSliceElms(list, vet)\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nfunc (g *graphAdjList) print() {\nvar builder strings.Builder\nfmt.Printf(\"\u90bb\u63a5\u8868 = \\n\")\nfor k, v := range g.adjList {\nbuilder.WriteString(\"\\t\\t\" + strconv.Itoa(k.Val) + \": \")\nfor _, vet := range v {\nbuilder.WriteString(strconv.Itoa(vet.Val) + \" \")\n}\nfmt.Println(builder.String())\nbuilder.Reset()\n}\n}\n
    graph_adjacency_list.js
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nadjList;\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(edges) {\nthis.adjList = new Map();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (const edge of edges) {\nthis.addVertex(edge[0]);\nthis.addVertex(edge[1]);\nthis.addEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize() {\nreturn this.adjList.size;\n}\n/* \u6dfb\u52a0\u8fb9 */\naddEdge(vet1, vet2) {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error(\"Illegal Argument Exception\");\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).push(vet2);\nthis.adjList.get(vet2).push(vet1);\n}\n/* \u5220\u9664\u8fb9 */\nremoveEdge(vet1, vet2) {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error(\"Illegal Argument Exception\");\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).splice(this.adjList.get(vet1).indexOf(vet2), 1);\nthis.adjList.get(vet2).splice(this.adjList.get(vet2).indexOf(vet1), 1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(vet) {\nif (this.adjList.has(vet)) return;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nthis.adjList.set(vet, []);\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(vet) {\nif (!this.adjList.has(vet)) {\nthrow new Error(\"Illegal Argument Exception\");\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nthis.adjList.delete(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (let set of this.adjList.values()) {\nconst index = set.indexOf(vet);\nif (index > -1) {\nset.splice(index, 1);\n}\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nprint() {\nconsole.log(\"\u90bb\u63a5\u8868 =\");\nfor (const [key, value] of this.adjList) {\nconst tmp = [];\nfor (const vertex of value) {\ntmp.push(vertex.val);\n}\nconsole.log(key.val + \": \" + tmp.join());\n}\n}\n}\n
    graph_adjacency_list.ts
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nadjList: Map<Vertex, Vertex[]>;\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(edges: Vertex[][]) {\nthis.adjList = new Map();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (const edge of edges) {\nthis.addVertex(edge[0]);\nthis.addVertex(edge[1]);\nthis.addEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize(): number {\nreturn this.adjList.size;\n}\n/* \u6dfb\u52a0\u8fb9 */\naddEdge(vet1: Vertex, vet2: Vertex): void {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error('Illegal Argument Exception');\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).push(vet2);\nthis.adjList.get(vet2).push(vet1);\n}\n/* \u5220\u9664\u8fb9 */\nremoveEdge(vet1: Vertex, vet2: Vertex): void {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error('Illegal Argument Exception');\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).splice(this.adjList.get(vet1).indexOf(vet2), 1);\nthis.adjList.get(vet2).splice(this.adjList.get(vet2).indexOf(vet1), 1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(vet: Vertex): void {\nif (this.adjList.has(vet)) return;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nthis.adjList.set(vet, []);\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(vet: Vertex): void {\nif (!this.adjList.has(vet)) {\nthrow new Error('Illegal Argument Exception');\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nthis.adjList.delete(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (let set of this.adjList.values()) {\nconst index: number = set.indexOf(vet);\nif (index > -1) {\nset.splice(index, 1);\n}\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nprint(): void {\nconsole.log('\u90bb\u63a5\u8868 =');\nfor (const [key, value] of this.adjList.entries()) {\nconst tmp = [];\nfor (const vertex of value) {\ntmp.push(vertex.val);\n}\nconsole.log(key.val + ': ' + tmp.join());\n}\n}\n}\n
    graph_adjacency_list.c
    [class]{graphAdjList}-[func]{}\n
    graph_adjacency_list.cs
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList\n{\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\npublic Dictionary<Vertex, List<Vertex>> adjList;\n/* \u6784\u9020\u51fd\u6570 */\npublic GraphAdjList(Vertex[][] edges)\n{\nthis.adjList = new Dictionary<Vertex, List<Vertex>>();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nforeach (Vertex[] edge in edges)\n{\naddVertex(edge[0]);\naddVertex(edge[1]);\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size()\n{\nreturn adjList.Count;\n}\n/* \u6dfb\u52a0\u8fb9 */\npublic void addEdge(Vertex vet1, Vertex vet2)\n{\nif (!adjList.ContainsKey(vet1) || !adjList.ContainsKey(vet2) || vet1 == vet2)\nthrow new InvalidOperationException();\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList[vet1].Add(vet2);\nadjList[vet2].Add(vet1);\n}\n/* \u5220\u9664\u8fb9 */\npublic void removeEdge(Vertex vet1, Vertex vet2)\n{\nif (!adjList.ContainsKey(vet1) || !adjList.ContainsKey(vet2) || vet1 == vet2)\nthrow new InvalidOperationException();\n// \u5220\u9664\u8fb9 vet1 - vet2\nadjList[vet1].Remove(vet2);\nadjList[vet2].Remove(vet1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(Vertex vet)\n{\nif (adjList.ContainsKey(vet))\nreturn;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList.Add(vet, new List<Vertex>());\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(Vertex vet)\n{\nif (!adjList.ContainsKey(vet))\nthrow new InvalidOperationException();\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.Remove(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nforeach (List<Vertex> list in adjList.Values)\n{\nlist.Remove(vet);\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\npublic void print()\n{\nConsole.WriteLine(\"\u90bb\u63a5\u8868 =\");\nforeach (KeyValuePair<Vertex, List<Vertex>> entry in adjList)\n{\nList<int> tmp = new List<int>();\nforeach (Vertex vertex in entry.Value)\ntmp.Add(vertex.Val);\nConsole.WriteLine(entry.Key.Val + \": [\" + string.Join(\", \", tmp) + \"],\");\n}\n}\n}\n
    graph_adjacency_list.swift
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\npublic private(set) var adjList: [Vertex: [Vertex]]\n/* \u6784\u9020\u65b9\u6cd5 */\npublic init(edges: [[Vertex]]) {\nadjList = [:]\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor edge in edges {\naddVertex(vet: edge[0])\naddVertex(vet: edge[1])\naddEdge(vet1: edge[0], vet2: edge[1])\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic func size() -> Int {\nadjList.count\n}\n/* \u6dfb\u52a0\u8fb9 */\npublic func addEdge(vet1: Vertex, vet2: Vertex) {\nif adjList[vet1] == nil || adjList[vet2] == nil || vet1 == vet2 {\nfatalError(\"\u53c2\u6570\u9519\u8bef\")\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList[vet1]?.append(vet2)\nadjList[vet2]?.append(vet1)\n}\n/* \u5220\u9664\u8fb9 */\npublic func removeEdge(vet1: Vertex, vet2: Vertex) {\nif adjList[vet1] == nil || adjList[vet2] == nil || vet1 == vet2 {\nfatalError(\"\u53c2\u6570\u9519\u8bef\")\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nadjList[vet1]?.removeAll(where: { $0 == vet2 })\nadjList[vet2]?.removeAll(where: { $0 == vet1 })\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic func addVertex(vet: Vertex) {\nif adjList[vet] != nil {\nreturn\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList[vet] = []\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic func removeVertex(vet: Vertex) {\nif adjList[vet] == nil {\nfatalError(\"\u53c2\u6570\u9519\u8bef\")\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.removeValue(forKey: vet)\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor key in adjList.keys {\nadjList[key]?.removeAll(where: { $0 == vet })\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\npublic func print() {\nSwift.print(\"\u90bb\u63a5\u8868 =\")\nfor entry in adjList {\nvar tmp: [Int] = []\nfor vertex in entry.value {\ntmp.append(vertex.val)\n}\nSwift.print(\"\\(entry.key.val): \\(tmp),\")\n}\n}\n}\n
    graph_adjacency_list.zig
    [class]{GraphAdjList}-[func]{}\n
    "},{"location":"chapter_graph/graph_operations/#923","title":"9.2.3. \u00a0 \u6548\u7387\u5bf9\u6bd4","text":"

    \u8bbe\u56fe\u4e2d\u5171\u6709 \\(n\\) \u4e2a\u9876\u70b9\u548c \\(m\\) \u6761\u8fb9\uff0c\u4e0b\u8868\u4e3a\u90bb\u63a5\u77e9\u9635\u548c\u90bb\u63a5\u8868\u7684\u65f6\u95f4\u548c\u7a7a\u95f4\u6548\u7387\u5bf9\u6bd4\u3002

    \u90bb\u63a5\u77e9\u9635 \u90bb\u63a5\u8868\uff08\u94fe\u8868\uff09 \u90bb\u63a5\u8868\uff08\u54c8\u5e0c\u8868\uff09 \u5224\u65ad\u662f\u5426\u90bb\u63a5 \\(O(1)\\) \\(O(m)\\) \\(O(1)\\) \u6dfb\u52a0\u8fb9 \\(O(1)\\) \\(O(1)\\) \\(O(1)\\) \u5220\u9664\u8fb9 \\(O(1)\\) \\(O(m)\\) \\(O(1)\\) \u6dfb\u52a0\u9876\u70b9 \\(O(n)\\) \\(O(1)\\) \\(O(1)\\) \u5220\u9664\u9876\u70b9 \\(O(n^2)\\) \\(O(n + m)\\) \\(O(n)\\) \u5185\u5b58\u7a7a\u95f4\u5360\u7528 \\(O(n^2)\\) \\(O(n + m)\\) \\(O(n + m)\\)

    \u89c2\u5bdf\u4e0a\u8868\uff0c\u8c8c\u4f3c\u90bb\u63a5\u8868\uff08\u54c8\u5e0c\u8868\uff09\u7684\u65f6\u95f4\u4e0e\u7a7a\u95f4\u6548\u7387\u6700\u4f18\u3002\u4f46\u5b9e\u9645\u4e0a\uff0c\u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u64cd\u4f5c\u8fb9\u7684\u6548\u7387\u66f4\u9ad8\uff0c\u53ea\u9700\u8981\u4e00\u6b21\u6570\u7ec4\u8bbf\u95ee\u6216\u8d4b\u503c\u64cd\u4f5c\u5373\u53ef\u3002\u603b\u7ed3\u4ee5\u4e0a\uff0c\u90bb\u63a5\u77e9\u9635\u4f53\u73b0\u201c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u201d\uff0c\u90bb\u63a5\u8868\u4f53\u73b0\u201c\u4ee5\u65f6\u95f4\u6362\u7a7a\u95f4\u201d\u3002

    "},{"location":"chapter_graph/graph_traversal/","title":"9.3. \u00a0 \u56fe\u7684\u904d\u5386","text":"

    \u56fe\u4e0e\u6811\u7684\u5173\u7cfb

    \u6811\u4ee3\u8868\u7684\u662f\u201c\u4e00\u5bf9\u591a\u201d\u7684\u5173\u7cfb\uff0c\u800c\u56fe\u5219\u81ea\u7531\u5ea6\u66f4\u9ad8\uff0c\u53ef\u4ee5\u4ee3\u8868\u4efb\u610f\u201c\u591a\u5bf9\u591a\u201d\u5173\u7cfb\u3002\u672c\u8d28\u4e0a\uff0c\u53ef\u4ee5\u628a\u6811\u770b\u4f5c\u662f\u56fe\u7684\u4e00\u7c7b\u7279\u4f8b\u3002\u90a3\u4e48\u663e\u7136\uff0c\u6811\u904d\u5386\u64cd\u4f5c\u4e5f\u662f\u56fe\u904d\u5386\u64cd\u4f5c\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u4e24\u8005\u7684\u65b9\u6cd5\u662f\u975e\u5e38\u7c7b\u4f3c\u7684\uff0c\u5efa\u8bae\u4f60\u5728\u5b66\u4e60\u672c\u7ae0\u8282\u7684\u8fc7\u7a0b\u4e2d\u5c06\u4e24\u8005\u878d\u4f1a\u8d2f\u901a\u3002

    \u300c\u56fe\u300d\u4e0e\u300c\u6811\u300d\u90fd\u662f\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u90fd\u9700\u8981\u4f7f\u7528\u300c\u641c\u7d22\u7b97\u6cd5\u300d\u6765\u5b9e\u73b0\u904d\u5386\u64cd\u4f5c\u3002

    \u7c7b\u4f3c\u5730\uff0c\u56fe\u7684\u904d\u5386\u65b9\u5f0f\u4e5f\u5206\u4e3a\u4e24\u79cd\uff0c\u5373\u300c\u5e7f\u5ea6\u4f18\u5148\u904d\u5386 Breadth-First Traversal\u300d\u548c\u300c\u6df1\u5ea6\u4f18\u5148\u904d\u5386 Depth-First Travsersal\u300d\uff0c\u4e5f\u79f0\u300c\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22 Breadth-First Search\u300d\u548c\u300c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22 Depth-First Search\u300d\uff0c\u7b80\u79f0\u4e3a BFS \u548c DFS \u3002

    "},{"location":"chapter_graph/graph_traversal/#931","title":"9.3.1. \u00a0 \u5e7f\u5ea6\u4f18\u5148\u904d\u5386","text":"

    \u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u4f18\u662f\u4e00\u79cd\u7531\u8fd1\u53ca\u8fdc\u7684\u904d\u5386\u65b9\u5f0f\uff0c\u4ece\u8ddd\u79bb\u6700\u8fd1\u7684\u9876\u70b9\u5f00\u59cb\u8bbf\u95ee\uff0c\u5e76\u4e00\u5c42\u5c42\u5411\u5916\u6269\u5f20\u3002\u5177\u4f53\u5730\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u5148\u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\uff0c\u968f\u540e\u904d\u5386\u4e0b\u4e2a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\uff0c\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026

    Fig. \u56fe\u7684\u5e7f\u5ea6\u4f18\u5148\u904d\u5386

    "},{"location":"chapter_graph/graph_traversal/#_1","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"

    BFS \u5e38\u501f\u52a9\u300c\u961f\u5217\u300d\u6765\u5b9e\u73b0\u3002\u961f\u5217\u5177\u6709\u201c\u5148\u5165\u5148\u51fa\u201d\u7684\u6027\u8d28\uff0c\u8fd9\u4e0e BFS \u201c\u7531\u8fd1\u53ca\u8fdc\u201d\u7684\u601d\u60f3\u662f\u5f02\u66f2\u540c\u5de5\u7684\u3002

    1. \u5c06\u904d\u5386\u8d77\u59cb\u9876\u70b9 startVet \u52a0\u5165\u961f\u5217\uff0c\u5e76\u5f00\u542f\u5faa\u73af\uff1b
    2. \u5728\u5faa\u73af\u7684\u6bcf\u8f6e\u8fed\u4ee3\u4e2d\uff0c\u5f39\u51fa\u961f\u9996\u9876\u70b9\u5f39\u51fa\u5e76\u8bb0\u5f55\u8bbf\u95ee\uff0c\u5e76\u5c06\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\u52a0\u5165\u5230\u961f\u5217\u5c3e\u90e8\uff1b
    3. \u5faa\u73af 2. \uff0c\u76f4\u5230\u6240\u6709\u9876\u70b9\u8bbf\u95ee\u5b8c\u6210\u540e\u7ed3\u675f\uff1b

    \u4e3a\u4e86\u9632\u6b62\u91cd\u590d\u904d\u5386\u9876\u70b9\uff0c\u6211\u4eec\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868 visited \u6765\u8bb0\u5f55\u54ea\u4e9b\u7ed3\u70b9\u5df2\u88ab\u8bbf\u95ee\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_bfs.java
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nList<Vertex> graphBFS(GraphAdjList graph, Vertex startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nList<Vertex> res = new ArrayList<>();\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nSet<Vertex> visited = new HashSet<>() {{ add(startVet); }};\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nQueue<Vertex> que = new LinkedList<>() {{ offer(startVet); }};\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (!que.isEmpty()) {\nVertex vet = que.poll(); // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.add(vet);            // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (Vertex adjVet : graph.adjList.get(vet)) {\nif (visited.contains(adjVet))\ncontinue;        // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nque.offer(adjVet);   // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.add(adjVet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.cpp
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nvector<Vertex*> graphBFS(GraphAdjList &graph, Vertex *startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvector<Vertex*> res;\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nunordered_set<Vertex*> visited = { startVet };\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nqueue<Vertex*> que;\nque.push(startVet);\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (!que.empty()) {\nVertex *vet = que.front();\nque.pop();          // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.push_back(vet); // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (auto adjVet : graph.adjList[vet]) {\nif (visited.count(adjVet))\ncontinue;           // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nque.push(adjVet);       // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.emplace(adjVet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.py
    def graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> List[Vertex]:\n\"\"\" \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS \"\"\"\n# \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\n# \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres = []\n# \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited = set([start_vet])\n# \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nque = collections.deque([start_vet])\n# \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile len(que) > 0:\nvet = que.popleft()  # \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.append(vet)      # \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n# \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adj_vet in graph.adj_list[vet]:\nif adj_vet in visited:\ncontinue         # \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nque.append(adj_vet)  # \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.add(adj_vet) # \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n# \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n
    graph_bfs.go
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphBFS(g *graphAdjList, startVet Vertex) []Vertex {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres := make([]Vertex, 0)\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited := make(map[Vertex]struct{})\nvisited[startVet] = struct{}{}\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS, \u4f7f\u7528\u5207\u7247\u6a21\u62df\u961f\u5217\nqueue := make([]Vertex, 0)\nqueue = append(queue, startVet)\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nfor len(queue) > 0 {\n// \u961f\u9996\u9876\u70b9\u51fa\u961f\nvet := queue[0]\nqueue = queue[1:]\n// \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nres = append(res, vet)\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor _, adjVet := range g.adjList[vet] {\n_, isExist := visited[adjVet]\n// \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nif !isExist {\nqueue = append(queue, adjVet)\nvisited[adjVet] = struct{}{}\n}\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n}\n
    graph_bfs.js
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphBFS(graph, startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited = new Set();\nvisited.add(startVet);\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nconst que = [startVet];\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (que.length) {\nconst vet = que.shift();    // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.push(vet);              // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet) ?? []) {\nif (visited.has(adjVet)) {\ncontinue;           // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\nque.push(adjVet);       // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.add(adjVet);    // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.ts
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphBFS(graph: GraphAdjList, startVet: Vertex): Vertex[] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res: Vertex[] = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited: Set<Vertex> = new Set();\nvisited.add(startVet);\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nconst que = [startVet];\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (que.length) {\nconst vet = que.shift(); // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.push(vet); // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet) ?? []) {\nif (visited.has(adjVet)) {\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\nque.push(adjVet); // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\nvisited.add(adjVet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.c
    [class]{}-[func]{graphBFS}\n
    graph_bfs.cs
    [class]{graph_bfs}-[func]{graphBFS}\n
    graph_bfs.swift
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphBFS(graph: GraphAdjList, startVet: Vertex) -> [Vertex] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvar res: [Vertex] = []\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvar visited: Set<Vertex> = [startVet]\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nvar que: [Vertex] = [startVet]\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile !que.isEmpty {\nlet vet = que.removeFirst() // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.append(vet) // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adjVet in graph.adjList[vet] ?? [] {\nif visited.contains(adjVet) {\ncontinue // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\nque.append(adjVet) // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.insert(adjVet) // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n}\n
    graph_bfs.zig
    [class]{}-[func]{graphBFS}\n

    \u4ee3\u7801\u76f8\u5bf9\u62bd\u8c61\uff0c\u5efa\u8bae\u5bf9\u7167\u4ee5\u4e0b\u52a8\u753b\u56fe\u793a\u6765\u52a0\u6df1\u7406\u89e3\u3002

    <1><2><3><4><5><6><7><8><9><10><11>

    \u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u7684\u5e8f\u5217\u662f\u5426\u552f\u4e00\uff1f

    \u4e0d\u552f\u4e00\u3002\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u53ea\u8981\u6c42\u201c\u7531\u8fd1\u53ca\u8fdc\u201d\uff0c\u800c\u591a\u4e2a\u76f8\u540c\u8ddd\u79bb\u7684\u9876\u70b9\u7684\u904d\u5386\u987a\u5e8f\u5141\u8bb8\u88ab\u4efb\u610f\u6253\u4e71\u3002\u4ee5\u4e0a\u56fe\u4e3a\u4f8b\uff0c\u9876\u70b9 \\(1\\) , \\(3\\) \u7684\u8bbf\u95ee\u987a\u5e8f\u53ef\u4ee5\u4ea4\u6362\u3001\u9876\u70b9 \\(2\\) , \\(4\\) , \\(6\\) \u7684\u8bbf\u95ee\u987a\u5e8f\u4e5f\u53ef\u4ee5\u4efb\u610f\u4ea4\u6362\u3001\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026

    "},{"location":"chapter_graph/graph_traversal/#_2","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a \u6240\u6709\u9876\u70b9\u90fd\u4f1a\u5165\u961f\u3001\u51fa\u961f\u4e00\u6b21\uff0c\u4f7f\u7528 \\(O(|V|)\\) \u65f6\u95f4\uff1b\u5728\u904d\u5386\u90bb\u63a5\u9876\u70b9\u7684\u8fc7\u7a0b\u4e2d\uff0c\u7531\u4e8e\u662f\u65e0\u5411\u56fe\uff0c\u56e0\u6b64\u6240\u6709\u8fb9\u90fd\u4f1a\u88ab\u8bbf\u95ee \\(2\\) \u6b21\uff0c\u4f7f\u7528 \\(O(2|E|)\\) \u65f6\u95f4\uff1b\u603b\u4f53\u4f7f\u7528 \\(O(|V| + |E|)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a \u5217\u8868 res \uff0c\u54c8\u5e0c\u8868 visited \uff0c\u961f\u5217 que \u4e2d\u7684\u9876\u70b9\u6570\u91cf\u6700\u591a\u4e3a \\(|V|\\) \uff0c\u4f7f\u7528 \\(O(|V|)\\) \u7a7a\u95f4\u3002

    "},{"location":"chapter_graph/graph_traversal/#932","title":"9.3.2. \u00a0 \u6df1\u5ea6\u4f18\u5148\u904d\u5386","text":"

    \u6df1\u5ea6\u4f18\u5148\u904d\u5386\u662f\u4e00\u79cd\u4f18\u5148\u8d70\u5230\u5e95\u3001\u65e0\u8def\u53ef\u8d70\u518d\u56de\u5934\u7684\u904d\u5386\u65b9\u5f0f\u3002\u5177\u4f53\u5730\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u4e0d\u65ad\u5730\u8bbf\u95ee\u5f53\u524d\u7ed3\u70b9\u7684\u67d0\u4e2a\u90bb\u63a5\u9876\u70b9\uff0c\u76f4\u5230\u8d70\u5230\u5c3d\u5934\u65f6\u56de\u6eaf\uff0c\u518d\u7ee7\u7eed\u8d70\u5230\u5e95 + \u56de\u6eaf\uff0c\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026\u76f4\u81f3\u6240\u6709\u9876\u70b9\u904d\u5386\u5b8c\u6210\u65f6\u7ed3\u675f\u3002

    Fig. \u56fe\u7684\u6df1\u5ea6\u4f18\u5148\u904d\u5386

    "},{"location":"chapter_graph/graph_traversal/#_3","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"

    \u8fd9\u79cd\u201c\u8d70\u5230\u5934 + \u56de\u6eaf\u201d\u7684\u7b97\u6cd5\u5f62\u5f0f\u4e00\u822c\u57fa\u4e8e\u9012\u5f52\u6765\u5b9e\u73b0\u3002\u4e0e BFS \u7c7b\u4f3c\uff0c\u5728 DFS \u4e2d\u6211\u4eec\u4e5f\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868 visited \u6765\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u7684\u9876\u70b9\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u8bbf\u95ee\u9876\u70b9\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_dfs.java
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nvoid dfs(GraphAdjList graph, Set<Vertex> visited, List<Vertex> res, Vertex vet) {\nres.add(vet);     // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (Vertex adjVet : graph.adjList.get(vet)) {\nif (visited.contains(adjVet))\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nList<Vertex> graphDFS(GraphAdjList graph, Vertex startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nList<Vertex> res = new ArrayList<>();\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nSet<Vertex> visited = new HashSet<>();\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.cpp
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nvoid dfs(GraphAdjList& graph, unordered_set<Vertex*>& visited, vector<Vertex*>& res, Vertex* vet) {\nres.push_back(vet);   // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.emplace(vet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (Vertex* adjVet : graph.adjList[vet]) {\nif (visited.count(adjVet))\ncontinue;     // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nvector<Vertex*> graphDFS(GraphAdjList& graph, Vertex* startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvector<Vertex*> res;\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nunordered_set<Vertex*> visited;\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.py
    def dfs(graph: GraphAdjList, visited: Set[Vertex], res: List[Vertex], vet: Vertex):\n\"\"\" \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 \"\"\"\nres.append(vet)     # \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet) # \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n# \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adjVet in graph.adj_list[vet]:\nif adjVet in visited:\ncontinue # \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n# \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet)\ndef graph_dfs(graph: GraphAdjList, start_vet: Vertex) -> List[Vertex]:\n\"\"\" \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \"\"\"\n# \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres = []\n# \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited = set()\ndfs(graph, visited, res, start_vet)\nreturn res\n
    graph_dfs.go
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nfunc dfs(g *graphAdjList, visited map[Vertex]struct{}, res *[]Vertex, vet Vertex) {\n// append \u64cd\u4f5c\u4f1a\u8fd4\u56de\u65b0\u7684\u7684\u5f15\u7528\uff0c\u5fc5\u987b\u8ba9\u539f\u5f15\u7528\u91cd\u65b0\u8d4b\u503c\u4e3a\u65b0slice\u7684\u5f15\u7528\n*res = append(*res, vet)\nvisited[vet] = struct{}{}\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor _, adjVet := range g.adjList[vet] {\n_, isExist := visited[adjVet]\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\nif !isExist {\ndfs(g, visited, res, adjVet)\n}\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphDFS(g *graphAdjList, startVet Vertex) []Vertex {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres := make([]Vertex, 0)\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited := make(map[Vertex]struct{})\ndfs(g, visited, &res, startVet)\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n}\n
    graph_dfs.js
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction dfs(graph, visited, res, vet) {\nres.push(vet);      // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet);   // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet)) {\nif (visited.has(adjVet)) {\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphDFS(graph, startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited = new Set();\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.ts
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nfunction dfs(graph: GraphAdjList, visited: Set<Vertex>, res: Vertex[], vet: Vertex): void {\nres.push(vet); // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet)) {\nif (visited.has(adjVet)) {\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphDFS(graph: GraphAdjList, startVet: Vertex): Vertex[] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res: Vertex[] = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited: Set<Vertex> = new Set();\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.c
    [class]{}-[func]{dfs}\n[class]{}-[func]{graphDFS}\n
    graph_dfs.cs
    [class]{graph_dfs}-[func]{dfs}\n[class]{graph_dfs}-[func]{graphDFS}\n
    graph_dfs.swift
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nfunc dfs(graph: GraphAdjList, visited: inout Set<Vertex>, res: inout [Vertex], vet: Vertex) {\nres.append(vet) // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.insert(vet) // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adjVet in graph.adjList[vet] ?? [] {\nif visited.contains(adjVet) {\ncontinue // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph: graph, visited: &visited, res: &res, vet: adjVet)\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphDFS(graph: GraphAdjList, startVet: Vertex) -> [Vertex] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvar res: [Vertex] = []\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvar visited: Set<Vertex> = []\ndfs(graph: graph, visited: &visited, res: &res, vet: startVet)\nreturn res\n}\n
    graph_dfs.zig
    [class]{}-[func]{dfs}\n[class]{}-[func]{graphDFS}\n

    \u6df1\u5ea6\u4f18\u5148\u904d\u5386\u7684\u7b97\u6cd5\u6d41\u7a0b\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5176\u4e2d

    • \u76f4\u865a\u7ebf\u4ee3\u8868\u5411\u4e0b\u9012\u63a8\uff0c\u4ee3\u8868\u5f00\u542f\u4e86\u4e00\u4e2a\u65b0\u7684\u9012\u5f52\u65b9\u6cd5\u6765\u8bbf\u95ee\u65b0\u9876\u70b9\uff1b
    • \u66f2\u865a\u7ebf\u4ee3\u8868\u5411\u4e0a\u56de\u6eaf\uff0c\u4ee3\u8868\u6b64\u9012\u5f52\u65b9\u6cd5\u5df2\u7ecf\u8fd4\u56de\uff0c\u56de\u6eaf\u5230\u4e86\u5f00\u542f\u6b64\u9012\u5f52\u65b9\u6cd5\u7684\u4f4d\u7f6e\uff1b

    \u4e3a\u4e86\u52a0\u6df1\u7406\u89e3\uff0c\u8bf7\u4f60\u5c06\u56fe\u793a\u4e0e\u4ee3\u7801\u7ed3\u5408\u8d77\u6765\uff0c\u5728\u8111\u4e2d\uff08\u6216\u8005\u7528\u7b14\u753b\u4e0b\u6765\uff09\u6a21\u62df\u6574\u4e2a DFS \u8fc7\u7a0b\uff0c\u5305\u62ec\u6bcf\u4e2a\u9012\u5f52\u65b9\u6cd5\u4f55\u65f6\u5f00\u542f\u3001\u4f55\u65f6\u8fd4\u56de\u3002

    <1><2><3><4><5><6><7><8><9><10><11>

    \u6df1\u5ea6\u4f18\u5148\u904d\u5386\u7684\u5e8f\u5217\u662f\u5426\u552f\u4e00\uff1f

    \u4e0e\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u7c7b\u4f3c\uff0c\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u5e8f\u5217\u7684\u987a\u5e8f\u4e5f\u4e0d\u662f\u552f\u4e00\u7684\u3002\u7ed9\u5b9a\u67d0\u9876\u70b9\uff0c\u5148\u5f80\u54ea\u4e2a\u65b9\u5411\u63a2\u7d22\u90fd\u884c\uff0c\u90fd\u662f\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u3002

    \u4ee5\u6811\u7684\u904d\u5386\u4e3a\u4f8b\uff0c\u201c\u6839 \\(\\rightarrow\\) \u5de6 \\(\\rightarrow\\) \u53f3\u201d\u3001\u201c\u5de6 \\(\\rightarrow\\) \u6839 \\(\\rightarrow\\) \u53f3\u201d\u3001\u201c\u5de6 \\(\\rightarrow\\) \u53f3 \\(\\rightarrow\\) \u6839\u201d\u5206\u522b\u5bf9\u5e94\u524d\u5e8f\u3001\u4e2d\u5e8f\u3001\u540e\u5e8f\u904d\u5386\uff0c\u4f53\u73b0\u4e09\u79cd\u4e0d\u540c\u7684\u904d\u5386\u4f18\u5148\u7ea7\uff0c\u800c\u4e09\u8005\u90fd\u5c5e\u4e8e\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u3002

    "},{"location":"chapter_graph/graph_traversal/#_4","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a \u6240\u6709\u9876\u70b9\u90fd\u88ab\u8bbf\u95ee\u4e00\u6b21\uff1b\u6240\u6709\u8fb9\u90fd\u88ab\u8bbf\u95ee\u4e86 \\(2\\) \u6b21\uff0c\u4f7f\u7528 \\(O(2|E|)\\) \u65f6\u95f4\uff1b\u603b\u4f53\u4f7f\u7528 \\(O(|V| + |E|)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a \u5217\u8868 res \uff0c\u54c8\u5e0c\u8868 visited \u9876\u70b9\u6570\u91cf\u6700\u591a\u4e3a \\(|V|\\) \uff0c\u9012\u5f52\u6df1\u5ea6\u6700\u5927\u4e3a \\(|V|\\) \uff0c\u56e0\u6b64\u4f7f\u7528 \\(O(|V|)\\) \u7a7a\u95f4\u3002

    "},{"location":"chapter_graph/summary/","title":"9.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u56fe\u7531\u9876\u70b9\u548c\u8fb9\u7ec4\u6210\uff0c\u53ef\u4ee5\u8868\u793a\u4e3a\u4e00\u7ec4\u9876\u70b9\u548c\u4e00\u7ec4\u8fb9\u6784\u6210\u7684\u96c6\u5408\u3002
    • \u76f8\u6bd4\u7ebf\u6027\u5173\u7cfb\uff08\u94fe\u8868\uff09\u548c\u5206\u6cbb\u5173\u7cfb\uff08\u6811\uff09\uff0c\u7f51\u7edc\u5173\u7cfb\uff08\u56fe\uff09\u7684\u81ea\u7531\u5ea6\u66f4\u9ad8\uff0c\u4e5f\u4ece\u800c\u66f4\u4e3a\u590d\u6742\u3002
    • \u6709\u5411\u56fe\u7684\u8fb9\u5b58\u5728\u65b9\u5411\uff0c\u8fde\u901a\u56fe\u4e2d\u7684\u4efb\u610f\u9876\u70b9\u90fd\u53ef\u8fbe\uff0c\u6709\u6743\u56fe\u7684\u6bcf\u6761\u8fb9\u90fd\u5305\u542b\u6743\u91cd\u53d8\u91cf\u3002
    • \u90bb\u63a5\u77e9\u9635\u4f7f\u7528\u65b9\u9635\u6765\u8868\u793a\u56fe\uff0c\u6bcf\u4e00\u884c\uff08\u5217\uff09\u4ee3\u8868\u4e00\u4e2a\u9876\u70b9\uff0c\u77e9\u9635\u5143\u7d20\u4ee3\u8868\u8fb9\uff0c\u4f7f\u7528 \\(1\\) \u6216 \\(0\\) \u6765\u8868\u793a\u4e24\u4e2a\u9876\u70b9\u4e4b\u95f4\u6709\u8fb9\u6216\u65e0\u8fb9\u3002\u90bb\u63a5\u77e9\u9635\u7684\u589e\u5220\u67e5\u64cd\u4f5c\u6548\u7387\u5f88\u9ad8\uff0c\u4f46\u5360\u7528\u7a7a\u95f4\u5927\u3002
    • \u90bb\u63a5\u8868\u4f7f\u7528\u591a\u4e2a\u94fe\u8868\u6765\u8868\u793a\u56fe\uff0c\u7b2c \\(i\\) \u6761\u94fe\u8868\u5bf9\u5e94\u9876\u70b9 \\(i\\) \uff0c\u5176\u4e2d\u5b58\u50a8\u4e86\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\u3002\u90bb\u63a5\u8868\u76f8\u5bf9\u90bb\u63a5\u77e9\u9635\u66f4\u52a0\u8282\u7701\u7a7a\u95f4\uff0c\u4f46\u7531\u4e8e\u9700\u8981\u901a\u8fc7\u904d\u5386\u94fe\u8868\u6765\u67e5\u627e\u8fb9\uff0c\u56e0\u6b64\u65f6\u95f4\u6548\u7387\u8f83\u4f4e\u3002
    • \u5f53\u90bb\u63a5\u8868\u4e2d\u7684\u94fe\u8868\u8fc7\u957f\u65f6\uff0c\u53ef\u4ee5\u5c06\u5176\u8f6c\u5316\u4e3a\u7ea2\u9ed1\u6811\u6216\u54c8\u5e0c\u8868\uff0c\u4ece\u800c\u63d0\u5347\u67e5\u8be2\u6548\u7387\u3002
    • \u4ece\u7b97\u6cd5\u601d\u60f3\u89d2\u5ea6\u5206\u6790\uff0c\u90bb\u63a5\u77e9\u9635\u4f53\u73b0\u201c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u201d\uff0c\u90bb\u63a5\u8868\u4f53\u73b0\u201c\u4ee5\u65f6\u95f4\u6362\u7a7a\u95f4\u201d
    • \u56fe\u53ef\u4ee5\u7528\u4e8e\u5efa\u6a21\u5404\u7c7b\u73b0\u5b9e\u7cfb\u7edf\uff0c\u4f8b\u5982\u793e\u4ea4\u7f51\u7edc\u3001\u5730\u94c1\u7ebf\u8def\u7b49\u3002
    • \u6811\u662f\u56fe\u7684\u4e00\u79cd\u7279\u4f8b\uff0c\u6811\u7684\u904d\u5386\u4e5f\u662f\u56fe\u7684\u904d\u5386\u7684\u4e00\u79cd\u7279\u4f8b\u3002
    • \u56fe\u7684\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u662f\u4e00\u79cd\u7531\u8fd1\u53ca\u8fdc\u3001\u5c42\u5c42\u6269\u5f20\u7684\u641c\u7d22\u65b9\u5f0f\uff0c\u5e38\u501f\u52a9\u961f\u5217\u5b9e\u73b0\u3002
    • \u56fe\u7684\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u662f\u4e00\u79cd\u4f18\u5148\u8d70\u5230\u5e95\u3001\u65e0\u8def\u53ef\u8d70\u518d\u56de\u5934\u7684\u641c\u7d22\u65b9\u5f0f\uff0c\u5e38\u57fa\u4e8e\u9012\u5f52\u6765\u5b9e\u73b0\u3002
    "},{"location":"chapter_hashing/hash_collision/","title":"6.2. \u00a0 \u54c8\u5e0c\u51b2\u7a81","text":"

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u54c8\u5e0c\u51fd\u6570\u5e94\u8be5\u4e3a\u6bcf\u4e2a\u8f93\u5165\u4ea7\u751f\u552f\u4e00\u7684\u8f93\u51fa\uff0c\u4f7f\u5f97 key \u548c value \u4e00\u4e00\u5bf9\u5e94\u3002\u800c\u5b9e\u9645\u4e0a\uff0c\u5f80\u5f80\u5b58\u5728\u5411\u54c8\u5e0c\u51fd\u6570\u8f93\u5165\u4e0d\u540c\u7684 key \u800c\u4ea7\u751f\u76f8\u540c\u8f93\u51fa\u7684\u60c5\u51b5\uff0c\u8fd9\u79cd\u60c5\u51b5\u88ab\u79f0\u4e3a\u300c\u54c8\u5e0c\u51b2\u7a81 Hash Collision\u300d\u3002\u54c8\u5e0c\u51b2\u7a81\u4f1a\u5bfc\u81f4\u67e5\u8be2\u7ed3\u679c\u9519\u8bef\uff0c\u4ece\u800c\u4e25\u91cd\u5f71\u54cd\u54c8\u5e0c\u8868\u7684\u53ef\u7528\u6027\u3002

    \u90a3\u4e48\uff0c\u4e3a\u4ec0\u4e48\u4f1a\u51fa\u73b0\u54c8\u5e0c\u51b2\u7a81\u5462\uff1f\u672c\u8d28\u4e0a\u770b\uff0c\u7531\u4e8e\u54c8\u5e0c\u51fd\u6570\u7684\u8f93\u5165\u7a7a\u95f4\u5f80\u5f80\u8fdc\u5927\u4e8e\u8f93\u51fa\u7a7a\u95f4\uff0c\u56e0\u6b64\u4e0d\u53ef\u907f\u514d\u5730\u4f1a\u51fa\u73b0\u591a\u4e2a\u8f93\u5165\u4ea7\u751f\u76f8\u540c\u8f93\u51fa\u7684\u60c5\u51b5\uff0c\u5373\u4e3a\u54c8\u5e0c\u51b2\u7a81\u3002\u6bd4\u5982\uff0c\u8f93\u5165\u7a7a\u95f4\u662f\u5168\u4f53\u6574\u6570\uff0c\u8f93\u51fa\u7a7a\u95f4\u662f\u4e00\u4e2a\u56fa\u5b9a\u5927\u5c0f\u7684\u6876\uff08\u6570\u7ec4\uff09\u7684\u7d22\u5f15\u8303\u56f4\uff0c\u90a3\u4e48\u5fc5\u5b9a\u4f1a\u6709\u591a\u4e2a\u6574\u6570\u540c\u65f6\u6620\u5c04\u5230\u4e00\u4e2a\u6876\u7d22\u5f15\u3002

    \u4e3a\u4e86\u7f13\u89e3\u54c8\u5e0c\u51b2\u7a81\uff0c\u4e00\u65b9\u9762\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u54c8\u5e0c\u8868\u6269\u5bb9\u6765\u51cf\u5c0f\u51b2\u7a81\u6982\u7387\u3002\u6781\u7aef\u60c5\u51b5\u4e0b\uff0c\u5f53\u8f93\u5165\u7a7a\u95f4\u548c\u8f93\u51fa\u7a7a\u95f4\u5927\u5c0f\u76f8\u7b49\u65f6\uff0c\u54c8\u5e0c\u8868\u5c31\u7b49\u4ef7\u4e8e\u6570\u7ec4\u4e86\uff0c\u53ef\u8c13\u201c\u5927\u529b\u51fa\u5947\u8ff9\u201d\u3002

    \u53e6\u4e00\u65b9\u9762\uff0c\u8003\u8651\u901a\u8fc7\u4f18\u5316\u54c8\u5e0c\u8868\u7684\u8868\u793a\u65b9\u5f0f\u4ee5\u7f13\u89e3\u54c8\u5e0c\u51b2\u7a81\uff0c\u5e38\u89c1\u7684\u65b9\u6cd5\u6709\u300c\u94fe\u5f0f\u5730\u5740\u300d\u548c\u300c\u5f00\u653e\u5bfb\u5740\u300d\u3002

    "},{"location":"chapter_hashing/hash_collision/#621","title":"6.2.1. \u00a0 \u54c8\u5e0c\u8868\u6269\u5bb9","text":"

    \u300c\u8d1f\u8f7d\u56e0\u5b50 Load Factor\u300d\u5b9a\u4e49\u4e3a \u54c8\u5e0c\u8868\u4e2d\u5143\u7d20\u6570\u91cf\u9664\u4ee5\u6876\u69fd\u6570\u91cf\uff08\u5373\u6570\u7ec4\u5927\u5c0f\uff09\uff0c\u4ee3\u8868\u54c8\u5e0c\u51b2\u7a81\u7684\u4e25\u91cd\u7a0b\u5ea6\u3002

    \u8d1f\u8f7d\u56e0\u5b50\u5e38\u7528\u4f5c\u54c8\u5e0c\u8868\u6269\u5bb9\u7684\u89e6\u53d1\u6761\u4ef6\u3002\u6bd4\u5982\u5728 Java \u4e2d\uff0c\u5f53\u8d1f\u8f7d\u56e0\u5b50 \\(> 0.75\\) \u65f6\u5219\u89e6\u53d1\u6269\u5bb9\uff0c\u5c06 HashMap \u5927\u5c0f\u6269\u5145\u81f3\u539f\u5148\u7684 \\(2\\) \u500d\u3002

    \u4e0e\u6570\u7ec4\u6269\u5bb9\u7c7b\u4f3c\uff0c\u54c8\u5e0c\u8868\u6269\u5bb9\u64cd\u4f5c\u7684\u5f00\u9500\u5f88\u5927\uff0c\u56e0\u4e3a\u9700\u8981\u5c06\u6240\u6709\u952e\u503c\u5bf9\u4ece\u539f\u54c8\u5e0c\u8868\u4f9d\u6b21\u79fb\u52a8\u81f3\u65b0\u54c8\u5e0c\u8868\u3002

    "},{"location":"chapter_hashing/hash_collision/#622","title":"6.2.2. \u00a0 \u94fe\u5f0f\u5730\u5740","text":"

    \u5728\u539f\u59cb\u54c8\u5e0c\u8868\u4e2d\uff0c\u6876\u5185\u7684\u6bcf\u4e2a\u5730\u5740\u53ea\u80fd\u5b58\u50a8\u4e00\u4e2a\u5143\u7d20\uff08\u5373\u952e\u503c\u5bf9\uff09\u3002\u8003\u8651\u5c06\u5355\u4e2a\u5143\u7d20\u8f6c\u5316\u6210\u4e00\u4e2a\u94fe\u8868\uff0c\u5c06\u6240\u6709\u51b2\u7a81\u5143\u7d20\u90fd\u5b58\u50a8\u5728\u4e00\u4e2a\u94fe\u8868\u4e2d\u3002

    Fig. \u94fe\u5f0f\u5730\u5740

    \u94fe\u5f0f\u5730\u5740\u4e0b\uff0c\u54c8\u5e0c\u8868\u64cd\u4f5c\u65b9\u6cd5\u4e3a\uff1a

    • \u67e5\u8be2\u5143\u7d20\uff1a\u5148\u5c06 key \u8f93\u5165\u5230\u54c8\u5e0c\u51fd\u6570\u5f97\u5230\u6876\u5185\u7d22\u5f15\uff0c\u5373\u53ef\u8bbf\u95ee\u94fe\u8868\u5934\u7ed3\u70b9\uff0c\u518d\u901a\u8fc7\u904d\u5386\u94fe\u8868\u67e5\u627e\u5bf9\u5e94 value \u3002
    • \u6dfb\u52a0\u5143\u7d20\uff1a\u5148\u901a\u8fc7\u54c8\u5e0c\u51fd\u6570\u8bbf\u95ee\u94fe\u8868\u5934\u90e8\uff0c\u518d\u5c06\u7ed3\u70b9\uff08\u5373\u952e\u503c\u5bf9\uff09\u6dfb\u52a0\u5230\u94fe\u8868\u5934\u90e8\u5373\u53ef\u3002
    • \u5220\u9664\u5143\u7d20\uff1a\u540c\u6837\u5148\u6839\u636e\u54c8\u5e0c\u51fd\u6570\u7ed3\u679c\u8bbf\u95ee\u94fe\u8868\u5934\u90e8\uff0c\u518d\u904d\u5386\u94fe\u8868\u67e5\u627e\u5bf9\u5e94\u7ed3\u70b9\uff0c\u5220\u9664\u4e4b\u5373\u53ef\u3002

    \u94fe\u5f0f\u5730\u5740\u867d\u7136\u89e3\u51b3\u4e86\u54c8\u5e0c\u51b2\u7a81\u95ee\u9898\uff0c\u4f46\u4ecd\u5b58\u5728\u5c40\u9650\u6027\uff0c\u5305\u62ec\uff1a

    • \u5360\u7528\u7a7a\u95f4\u53d8\u5927\uff0c\u56e0\u4e3a\u94fe\u8868\u6216\u4e8c\u53c9\u6811\u5305\u542b\u7ed3\u70b9\u6307\u9488\uff0c\u76f8\u6bd4\u4e8e\u6570\u7ec4\u66f4\u52a0\u8017\u8d39\u5185\u5b58\u7a7a\u95f4\uff1b
    • \u67e5\u8be2\u6548\u7387\u964d\u4f4e\uff0c\u56e0\u4e3a\u9700\u8981\u7ebf\u6027\u904d\u5386\u94fe\u8868\u6765\u67e5\u627e\u5bf9\u5e94\u5143\u7d20\uff1b

    \u4e3a\u4e86\u63d0\u5347\u64cd\u4f5c\u6548\u7387\uff0c\u53ef\u4ee5\u628a\u300c\u94fe\u8868\u300d\u8f6c\u5316\u4e3a\u300cAVL \u6811\u300d\u6216\u300c\u7ea2\u9ed1\u6811\u300d\uff0c\u5c06\u67e5\u8be2\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4f18\u5316\u81f3 \\(O(\\log n)\\) \u3002

    "},{"location":"chapter_hashing/hash_collision/#623","title":"6.2.3. \u00a0 \u5f00\u653e\u5bfb\u5740","text":"

    \u300c\u5f00\u653e\u5bfb\u5740\u300d\u4e0d\u5f15\u5165\u989d\u5916\u6570\u636e\u7ed3\u6784\uff0c\u800c\u662f\u901a\u8fc7\u201c\u591a\u6b21\u63a2\u6d4b\u201d\u6765\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002\u6839\u636e\u63a2\u6d4b\u65b9\u6cd5\u7684\u4e0d\u540c\uff0c\u4e3b\u8981\u5206\u4e3a \u7ebf\u6027\u63a2\u6d4b\u3001\u5e73\u65b9\u63a2\u6d4b\u3001\u591a\u6b21\u54c8\u5e0c\u3002

    "},{"location":"chapter_hashing/hash_collision/#_1","title":"\u7ebf\u6027\u63a2\u6d4b","text":"

    \u300c\u7ebf\u6027\u63a2\u6d4b\u300d\u4f7f\u7528\u56fa\u5b9a\u6b65\u957f\u7684\u7ebf\u6027\u67e5\u627e\u6765\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002

    \u63d2\u5165\u5143\u7d20\uff1a\u5982\u679c\u51fa\u73b0\u54c8\u5e0c\u51b2\u7a81\uff0c\u5219\u4ece\u51b2\u7a81\u4f4d\u7f6e\u5411\u540e\u7ebf\u6027\u904d\u5386\uff08\u6b65\u957f\u4e00\u822c\u53d6 1 \uff09\uff0c\u76f4\u5230\u627e\u5230\u4e00\u4e2a\u7a7a\u4f4d\uff0c\u5219\u5c06\u5143\u7d20\u63d2\u5165\u5230\u8be5\u7a7a\u4f4d\u4e2d\u3002

    \u67e5\u627e\u5143\u7d20\uff1a\u82e5\u51fa\u73b0\u54c8\u5e0c\u51b2\u7a81\uff0c\u5219\u4f7f\u7528\u76f8\u540c\u6b65\u957f\u6267\u884c\u7ebf\u6027\u67e5\u627e\uff0c\u4f1a\u9047\u5230\u4e24\u79cd\u60c5\u51b5\uff1a

    1. \u627e\u5230\u5bf9\u5e94\u5143\u7d20\uff0c\u8fd4\u56de value \u5373\u53ef\uff1b
    2. \u82e5\u9047\u5230\u7a7a\u4f4d\uff0c\u5219\u8bf4\u660e\u67e5\u627e\u952e\u503c\u5bf9\u4e0d\u5728\u54c8\u5e0c\u8868\u4e2d\uff1b

    Fig. \u7ebf\u6027\u63a2\u6d4b

    \u7ebf\u6027\u63a2\u6d4b\u5b58\u5728\u4ee5\u4e0b\u7f3a\u9677\uff1a

    • \u4e0d\u80fd\u76f4\u63a5\u5220\u9664\u5143\u7d20\u3002\u5220\u9664\u5143\u7d20\u4f1a\u5bfc\u81f4\u6876\u5185\u51fa\u73b0\u4e00\u4e2a\u7a7a\u4f4d\uff0c\u5728\u67e5\u627e\u5176\u4ed6\u5143\u7d20\u65f6\uff0c\u8be5\u7a7a\u4f4d\u6709\u53ef\u80fd\u5bfc\u81f4\u7a0b\u5e8f\u8ba4\u4e3a\u5143\u7d20\u4e0d\u5b58\u5728\uff08\u5373\u4e0a\u8ff0\u7b2c 2. \u79cd\u60c5\u51b5\uff09\u3002\u56e0\u6b64\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u6807\u5fd7\u4f4d\u6765\u6807\u8bb0\u5220\u9664\u5143\u7d20\u3002
    • \u5bb9\u6613\u4ea7\u751f\u805a\u96c6\u3002\u6876\u5185\u88ab\u5360\u7528\u7684\u8fde\u7eed\u4f4d\u7f6e\u8d8a\u957f\uff0c\u8fd9\u4e9b\u8fde\u7eed\u4f4d\u7f6e\u53d1\u751f\u54c8\u5e0c\u51b2\u7a81\u7684\u53ef\u80fd\u6027\u8d8a\u5927\uff0c\u4ece\u800c\u8fdb\u4e00\u6b65\u4fc3\u8fdb\u8fd9\u4e00\u4f4d\u7f6e\u7684\u201c\u805a\u5806\u751f\u957f\u201d\uff0c\u6700\u7ec8\u5bfc\u81f4\u589e\u5220\u67e5\u6539\u64cd\u4f5c\u6548\u7387\u7684\u52a3\u5316\u3002
    "},{"location":"chapter_hashing/hash_collision/#_2","title":"\u591a\u6b21\u54c8\u5e0c","text":"

    \u987e\u540d\u601d\u4e49\uff0c\u300c\u591a\u6b21\u54c8\u5e0c\u300d\u7684\u601d\u8def\u662f\u4f7f\u7528\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570 \\(f_1(x)\\) , \\(f_2(x)\\) , \\(f_3(x)\\) , \\(\\cdots\\) \u8fdb\u884c\u63a2\u6d4b\u3002

    \u63d2\u5165\u5143\u7d20\uff1a\u82e5\u54c8\u5e0c\u51fd\u6570 \\(f_1(x)\\) \u51fa\u73b0\u51b2\u7a81\uff0c\u5219\u5c1d\u8bd5 \\(f_2(x)\\) \uff0c\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026\u76f4\u5230\u627e\u5230\u7a7a\u4f4d\u540e\u63d2\u5165\u5143\u7d20\u3002

    \u67e5\u627e\u5143\u7d20\uff1a\u4ee5\u76f8\u540c\u7684\u54c8\u5e0c\u51fd\u6570\u987a\u5e8f\u67e5\u627e\uff0c\u5b58\u5728\u4e24\u79cd\u60c5\u51b5\uff1a

    1. \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u5219\u8fd4\u56de\u4e4b\uff1b
    2. \u5230\u7a7a\u4f4d\u6216\u5df2\u5c1d\u8bd5\u6240\u6709\u54c8\u5e0c\u51fd\u6570\uff0c\u8bf4\u660e\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64\u5143\u7d20\uff1b

    \u76f8\u6bd4\u4e8e\u300c\u7ebf\u6027\u63a2\u6d4b\u300d\uff0c\u300c\u591a\u6b21\u54c8\u5e0c\u300d\u65b9\u6cd5\u66f4\u4e0d\u5bb9\u6613\u4ea7\u751f\u805a\u96c6\uff0c\u4ee3\u4ef7\u662f\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570\u589e\u52a0\u4e86\u989d\u5916\u8ba1\u7b97\u91cf\u3002

    \u5de5\u4e1a\u754c\u65b9\u6848

    Java \u91c7\u7528\u300c\u94fe\u5f0f\u5730\u5740\u300d\u3002\u5728 JDK 1.8 \u4e4b\u540e\uff0cHashMap \u5185\u6570\u7ec4\u957f\u5ea6\u5927\u4e8e 64 \u65f6\uff0c\u957f\u5ea6\u5927\u4e8e 8 \u7684\u94fe\u8868\u4f1a\u88ab\u8f6c\u5316\u4e3a\u300c\u7ea2\u9ed1\u6811\u300d\uff0c\u4ee5\u63d0\u5347\u67e5\u627e\u6027\u80fd\u3002

    Python \u91c7\u7528\u300c\u5f00\u653e\u5bfb\u5740\u300d\u3002\u5b57\u5178 dict \u4f7f\u7528\u4f2a\u968f\u673a\u6570\u8fdb\u884c\u63a2\u6d4b\u3002

    "},{"location":"chapter_hashing/hash_map/","title":"6.1. \u00a0 \u54c8\u5e0c\u8868","text":"

    \u54c8\u5e0c\u8868\u901a\u8fc7\u5efa\u7acb\u300c\u952e key\u300d\u548c\u300c\u503c value\u300d\u4e4b\u95f4\u7684\u6620\u5c04\uff0c\u5b9e\u73b0\u9ad8\u6548\u7684\u5143\u7d20\u67e5\u627e\u3002\u5177\u4f53\u5730\uff0c\u8f93\u5165\u4e00\u4e2a key \uff0c\u5728\u54c8\u5e0c\u8868\u4e2d\u67e5\u8be2\u5e76\u83b7\u53d6 value \uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \u3002

    \u4f8b\u5982\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u5305\u542b \\(n\\) \u4e2a\u5b66\u751f\u7684\u6570\u636e\u5e93\uff0c\u6bcf\u4e2a\u5b66\u751f\u6709\u201c\u59d3\u540d name \u201d\u548c\u201c\u5b66\u53f7 id \u201d\u4e24\u9879\u6570\u636e\uff0c\u5e0c\u671b\u5b9e\u73b0\u4e00\u4e2a\u67e5\u8be2\u529f\u80fd\uff1a\u8f93\u5165\u4e00\u4e2a\u5b66\u53f7\uff0c\u8fd4\u56de\u5bf9\u5e94\u7684\u59d3\u540d\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u54c8\u5e0c\u8868\u5b9e\u73b0\u3002

    Fig. \u54c8\u5e0c\u8868\u7684\u62bd\u8c61\u8868\u793a

    "},{"location":"chapter_hashing/hash_map/#611","title":"6.1.1. \u00a0 \u54c8\u5e0c\u8868\u6548\u7387","text":"

    \u9664\u4e86\u54c8\u5e0c\u8868\u4e4b\u5916\uff0c\u8fd8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u6570\u636e\u7ed3\u6784\u6765\u5b9e\u73b0\u4e0a\u8ff0\u67e5\u8be2\u529f\u80fd\uff1a

    1. \u65e0\u5e8f\u6570\u7ec4\uff1a\u6bcf\u4e2a\u5143\u7d20\u4e3a [\u5b66\u53f7, \u59d3\u540d] \uff1b
    2. \u6709\u5e8f\u6570\u7ec4\uff1a\u5c06 1. \u4e2d\u7684\u6570\u7ec4\u6309\u7167\u5b66\u53f7\u4ece\u5c0f\u5230\u5927\u6392\u5e8f\uff1b
    3. \u94fe\u8868\uff1a\u6bcf\u4e2a\u7ed3\u70b9\u7684\u503c\u4e3a [\u5b66\u53f7, \u59d3\u540d] \uff1b
    4. \u4e8c\u53c9\u641c\u7d22\u6811\uff1a\u6bcf\u4e2a\u7ed3\u70b9\u7684\u503c\u4e3a [\u5b66\u53f7, \u59d3\u540d] \uff0c\u6839\u636e\u5b66\u53f7\u5927\u5c0f\u6765\u6784\u5efa\u6811\uff1b

    \u4f7f\u7528\u4e0a\u8ff0\u65b9\u6cd5\uff0c\u5404\u9879\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5982\u4e0b\u8868\u6240\u793a\uff08\u5728\u6b64\u4e0d\u505a\u8d58\u8ff0\uff0c\u8be6\u89e3\u53ef\u89c1 \u4e8c\u53c9\u641c\u7d22\u6811\u7ae0\u8282\uff09\u3002\u65e0\u8bba\u662f\u67e5\u627e\u5143\u7d20\u3001\u8fd8\u662f\u589e\u5220\u5143\u7d20\uff0c\u54c8\u5e0c\u8868\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u662f \\(O(1)\\) \uff0c\u5168\u9762\u80dc\u51fa\uff01

    \u65e0\u5e8f\u6570\u7ec4 \u6709\u5e8f\u6570\u7ec4 \u94fe\u8868 \u4e8c\u53c9\u641c\u7d22\u6811 \u54c8\u5e0c\u8868 \u67e5\u627e\u5143\u7d20 \\(O(n)\\) \\(O(\\log n)\\) \\(O(n)\\) \\(O(\\log n)\\) \\(O(1)\\) \u63d2\u5165\u5143\u7d20 \\(O(1)\\) \\(O(n)\\) \\(O(1)\\) \\(O(\\log n)\\) \\(O(1)\\) \u5220\u9664\u5143\u7d20 \\(O(n)\\) \\(O(n)\\) \\(O(n)\\) \\(O(\\log n)\\) \\(O(1)\\)"},{"location":"chapter_hashing/hash_map/#612","title":"6.1.2. \u00a0 \u54c8\u5e0c\u8868\u5e38\u7528\u64cd\u4f5c","text":"

    \u54c8\u5e0c\u8868\u7684\u57fa\u672c\u64cd\u4f5c\u5305\u62ec \u521d\u59cb\u5316\u3001\u67e5\u8be2\u64cd\u4f5c\u3001\u6dfb\u52a0\u4e0e\u5220\u9664\u952e\u503c\u5bf9\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hash_map.java
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nMap<Integer, String> map = new HashMap<>();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.put(12836, \"\u5c0f\u54c8\");   map.put(15937, \"\u5c0f\u5570\");   map.put(16750, \"\u5c0f\u7b97\");   map.put(13276, \"\u5c0f\u6cd5\");\nmap.put(10583, \"\u5c0f\u9e2d\");\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nString name = map.get(15937);\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.remove(10583);\n
    hash_map.cpp
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nunordered_map<int, string> map;\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap[12836] = \"\u5c0f\u54c8\";\nmap[15937] = \"\u5c0f\u5570\";\nmap[16750] = \"\u5c0f\u7b97\";\nmap[13276] = \"\u5c0f\u6cd5\";\nmap[10583] = \"\u5c0f\u9e2d\";\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nstring name = map[15937];\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.erase(10583);\n
    hash_map.py
    \"\"\" \u521d\u59cb\u5316\u54c8\u5e0c\u8868 \"\"\"\nmapp: Dict = {}\n\"\"\" \u6dfb\u52a0\u64cd\u4f5c \"\"\"\n# \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmapp[12836] = \"\u5c0f\u54c8\"\nmapp[15937] = \"\u5c0f\u5570\"\nmapp[16750] = \"\u5c0f\u7b97\"\nmapp[13276] = \"\u5c0f\u6cd5\"\nmapp[10583] = \"\u5c0f\u9e2d\"\n\"\"\" \u67e5\u8be2\u64cd\u4f5c \"\"\"\n# \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nname: str = mapp[15937]\n\"\"\" \u5220\u9664\u64cd\u4f5c \"\"\"\n# \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmapp.pop(10583)\n
    hash_map.go
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nmapp := make(map[int]string)\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmapp[12836] = \"\u5c0f\u54c8\"\nmapp[15937] = \"\u5c0f\u5570\"\nmapp[16750] = \"\u5c0f\u7b97\"\nmapp[13276] = \"\u5c0f\u6cd5\"\nmapp[10583] = \"\u5c0f\u9e2d\"\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nname := mapp[15937]\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\ndelete(mapp, 10583)\n
    hash_map.js
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nconst map = new ArrayHashMap();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.set(12836, '\u5c0f\u54c8');\nmap.set(15937, '\u5c0f\u5570');\nmap.set(16750, '\u5c0f\u7b97');\nmap.set(13276, '\u5c0f\u6cd5');\nmap.set(10583, '\u5c0f\u9e2d');\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nlet name = map.get(15937);\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.delete(10583);\n
    hash_map.ts
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nconst map = new Map<number, string>();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.set(12836, '\u5c0f\u54c8');\nmap.set(15937, '\u5c0f\u5570');\nmap.set(16750, '\u5c0f\u7b97');\nmap.set(13276, '\u5c0f\u6cd5');\nmap.set(10583, '\u5c0f\u9e2d');\nconsole.info('\\n\u6dfb\u52a0\u5b8c\u6210\u540e\uff0c\u54c8\u5e0c\u8868\u4e3a\\nKey -> Value');\nconsole.info(map);\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nlet name = map.get(15937);\nconsole.info('\\n\u8f93\u5165\u5b66\u53f7 15937 \uff0c\u67e5\u8be2\u5230\u59d3\u540d ' + name);\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.delete(10583);\nconsole.info('\\n\u5220\u9664 10583 \u540e\uff0c\u54c8\u5e0c\u8868\u4e3a\\nKey -> Value');\nconsole.info(map);\n
    hash_map.c
    \n
    hash_map.cs
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nDictionary<int, String> map = new ();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.Add(12836, \"\u5c0f\u54c8\");\nmap.Add(15937, \"\u5c0f\u5570\");\nmap.Add(16750, \"\u5c0f\u7b97\");\nmap.Add(13276, \"\u5c0f\u6cd5\");\nmap.Add(10583, \"\u5c0f\u9e2d\");\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nString name = map[15937];\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.Remove(10583);\n
    hash_map.swift
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nvar map: [Int: String] = [:]\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap[12836] = \"\u5c0f\u54c8\"\nmap[15937] = \"\u5c0f\u5570\"\nmap[16750] = \"\u5c0f\u7b97\"\nmap[13276] = \"\u5c0f\u6cd5\"\nmap[10583] = \"\u5c0f\u9e2d\"\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nlet name = map[15937]!\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.removeValue(forKey: 10583)\n
    hash_map.zig
    \n

    \u904d\u5386\u54c8\u5e0c\u8868\u6709\u4e09\u79cd\u65b9\u5f0f\uff0c\u5373 \u904d\u5386\u952e\u503c\u5bf9\u3001\u904d\u5386\u952e\u3001\u904d\u5386\u503c\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hash_map.java
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor (Map.Entry <Integer, String> kv: map.entrySet()) {\nSystem.out.println(kv.getKey() + \" -> \" + kv.getValue());\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nfor (int key: map.keySet()) {\nSystem.out.println(key);\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nfor (String val: map.values()) {\nSystem.out.println(val);\n}\n
    hash_map.cpp
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor (auto kv: map) {\ncout << kv.first << \" -> \" << kv.second << endl;\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nfor (auto key: map) {\ncout << key.first << endl;\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nfor (auto val: map) {\ncout << val.second << endl;\n}\n
    hash_map.py
    \"\"\" \u904d\u5386\u54c8\u5e0c\u8868 \"\"\"\n# \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor key, value in mapp.items():\nprint(key, \"->\", value)\n# \u5355\u72ec\u904d\u5386\u952e key\nfor key in mapp.keys():\nprint(key)\n# \u5355\u72ec\u904d\u5386\u503c value\nfor value in mapp.values():\nprint(value)\n
    hash_map_test.go
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor key, value := range mapp {\nfmt.Println(key, \"->\", value)\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nfor key := range mapp {\nfmt.Println(key)\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nfor _, value := range mapp {\nfmt.Println(value)\n}\n
    hash_map.js
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\nconsole.info('\\n\u904d\u5386\u952e\u503c\u5bf9 Key->Value');\nfor (const [k, v] of map.entries()) {\nconsole.info(k + ' -> ' + v);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u952e Key');\nfor (const k of map.keys()) {\nconsole.info(k);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u503c Value');\nfor (const v of map.values()) {\nconsole.info(v);\n}\n
    hash_map.ts
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\nconsole.info('\\n\u904d\u5386\u952e\u503c\u5bf9 Key->Value');\nfor (const [k, v] of map.entries()) {\nconsole.info(k + ' -> ' + v);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u952e Key');\nfor (const k of map.keys()) {\nconsole.info(k);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u503c Value');\nfor (const v of map.values()) {\nconsole.info(v);\n}\n
    hash_map.c
    \n
    hash_map.cs
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 Key->Value\nforeach (var kv in map)\n{\nConsole.WriteLine(kv.Key + \" -> \" + kv.Value);\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nforeach (int key in map.Keys)\n{\nConsole.WriteLine(key);\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nforeach (String val in map.Values)\n{\nConsole.WriteLine(val);\n}\n
    hash_map.swift
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 Key->Value\nfor (key, value) in map {\nprint(\"\\(key) -> \\(value)\")\n}\n// \u5355\u72ec\u904d\u5386\u952e Key\nfor key in map.keys {\nprint(key)\n}\n// \u5355\u72ec\u904d\u5386\u503c Value\nfor value in map.values {\nprint(value)\n}\n
    hash_map.zig
    \n
    "},{"location":"chapter_hashing/hash_map/#613","title":"6.1.3. \u00a0 \u54c8\u5e0c\u51fd\u6570","text":"

    \u54c8\u5e0c\u8868\u4e2d\u5b58\u50a8\u5143\u7d20\u7684\u6570\u636e\u7ed3\u6784\u88ab\u79f0\u4e3a\u300c\u6876 Bucket\u300d\uff0c\u5e95\u5c42\u5b9e\u73b0\u53ef\u80fd\u662f\u6570\u7ec4\u3001\u94fe\u8868\u3001\u4e8c\u53c9\u6811\uff08\u7ea2\u9ed1\u6811\uff09\uff0c\u6216\u662f\u5b83\u4eec\u7684\u7ec4\u5408\u3002

    \u6700\u7b80\u5355\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u4ec5\u7528\u4e00\u4e2a\u300c\u6570\u7ec4\u300d\u6765\u5b9e\u73b0\u54c8\u5e0c\u8868\u3002\u9996\u5148\uff0c\u5c06\u6240\u6709 value \u653e\u5165\u6570\u7ec4\u4e2d\uff0c\u90a3\u4e48\u6bcf\u4e2a value \u5728\u6570\u7ec4\u4e2d\u90fd\u6709\u552f\u4e00\u7684\u300c\u7d22\u5f15\u300d\u3002\u663e\u7136\uff0c\u8bbf\u95ee value \u9700\u8981\u7ed9\u5b9a\u7d22\u5f15\uff0c\u800c\u4e3a\u4e86 \u5efa\u7acb key \u548c\u7d22\u5f15\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u300c\u54c8\u5e0c\u51fd\u6570 Hash Function\u300d\u3002

    \u8bbe\u6570\u7ec4\u4e3a bucket \uff0c\u54c8\u5e0c\u51fd\u6570\u4e3a f(x) \uff0c\u8f93\u5165\u952e\u4e3a key \u3002\u90a3\u4e48\u83b7\u53d6 value \u7684\u6b65\u9aa4\u4e3a\uff1a

    1. \u901a\u8fc7\u54c8\u5e0c\u51fd\u6570\u8ba1\u7b97\u51fa\u7d22\u5f15\uff0c\u5373 index = f(key) \uff1b
    2. \u901a\u8fc7\u7d22\u5f15\u5728\u6570\u7ec4\u4e2d\u83b7\u53d6\u503c\uff0c\u5373 value = bucket[index] \uff1b

    \u4ee5\u4e0a\u8ff0\u5b66\u751f\u6570\u636e key \u5b66\u53f7 -> value \u59d3\u540d \u4e3a\u4f8b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u300c\u54c8\u5e0c\u51fd\u6570\u300d\u8bbe\u8ba1\u4e3a

    \\[ f(x) = x \\% 100 \\]

    Fig. \u7b80\u5355\u54c8\u5e0c\u51fd\u6570\u793a\u4f8b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_hash_map.java
    /* \u952e\u503c\u5bf9 int->String */\nclass Entry {\npublic int key;\npublic String val;\npublic Entry(int key, String val) {\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate List<Entry> bucket;\npublic ArrayHashMap() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket = new ArrayList<>();\nfor (int i = 0; i < 100; i++) {\nbucket.add(null);\n}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate int hashFunc(int key) {\nint index = key % 100;\nreturn index;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\npublic String get(int key) {\nint index = hashFunc(key);\nEntry pair = bucket.get(index);\nif (pair == null) return null;\nreturn pair.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\npublic void put(int key, String val) {\nEntry pair = new Entry(key, val);\nint index = hashFunc(key);\nbucket.set(index, pair);\n}\n/* \u5220\u9664\u64cd\u4f5c */\npublic void remove(int key) {\nint index = hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nbucket.set(index, null);\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\npublic List<Entry> entrySet() {\nList<Entry> entrySet = new ArrayList<>();\nfor (Entry pair : bucket) {\nif (pair != null)\nentrySet.add(pair);\n}\nreturn entrySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\npublic List<Integer> keySet() {\nList<Integer> keySet = new ArrayList<>();\nfor (Entry pair : bucket) {\nif (pair != null)\nkeySet.add(pair.key);\n}\nreturn keySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\npublic List<String> valueSet() {\nList<String> valueSet = new ArrayList<>();\nfor (Entry pair : bucket) {\nif (pair != null)\nvalueSet.add(pair.val);\n}\nreturn valueSet;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\npublic void print() {\nfor (Entry kv: entrySet()) {\nSystem.out.println(kv.key + \" -> \" + kv.val);\n}\n}\n}\n
    array_hash_map.cpp
    /* \u952e\u503c\u5bf9 int->String */\nstruct Entry {\npublic:\nint key;\nstring val;\nEntry(int key, string val) {\nthis->key = key;\nthis->val = val;\n}\n};\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate:\nvector<Entry*> bucket;\npublic:\nArrayHashMap() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket= vector<Entry*>(100);\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nint hashFunc(int key) {\nint index = key % 100;\nreturn index;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nstring get(int key) {\nint index = hashFunc(key);\nEntry* pair = bucket[index];\nif (pair == nullptr)\nreturn nullptr;\nreturn pair->val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nvoid put(int key, string val) {\nEntry* pair = new Entry(key, val);\nint index = hashFunc(key);\nbucket[index] = pair;\n}\n/* \u5220\u9664\u64cd\u4f5c */\nvoid remove(int key) {\nint index = hashFunc(key);\n// \u7f6e\u4e3a nullptr \uff0c\u4ee3\u8868\u5220\u9664\nbucket[index] = nullptr;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\nvector<Entry*> entrySet() {\nvector<Entry*> entrySet;\nfor (Entry* pair: bucket) {\nif (pair != nullptr) {\nentrySet.push_back(pair);\n}\n}\nreturn entrySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nvector<int> keySet() {\nvector<int> keySet;\nfor (Entry* pair: bucket) {\nif (pair != nullptr) {\nkeySet.push_back(pair->key);\n}\n}\nreturn keySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nvector<string> valueSet() {\nvector<string> valueSet;\nfor (Entry* pair: bucket) {\nif (pair != nullptr){\nvalueSet.push_back(pair->val);\n}\n}\nreturn valueSet;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nvoid print() {\nfor (Entry* kv: entrySet()) {\ncout << kv->key << \" -> \" << kv->val << endl;\n}\n}\n};\n
    array_hash_map.py
    class Entry:\n\"\"\" \u952e\u503c\u5bf9 int->String \"\"\"\ndef __init__(self, key: int, val: str):\nself.key = key\nself.val = val\nclass ArrayHashMap:\n\"\"\" \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\n# \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nself.bucket: List[Optional[Entry]] = [None] * 100\ndef hash_func(self, key: int) -> int:\n\"\"\" \u54c8\u5e0c\u51fd\u6570 \"\"\"\nindex: int = key % 100\nreturn index\ndef get(self, key: int) -> str:\n\"\"\" \u67e5\u8be2\u64cd\u4f5c \"\"\"\nindex: int = self.hash_func(key)\npair: Entry = self.bucket[index]\nif pair is None:\nreturn None\nreturn pair.val\ndef put(self, key: int, val: str) -> None:\n\"\"\" \u6dfb\u52a0\u64cd\u4f5c \"\"\"\npair = Entry(key, val)\nindex: int = self.hash_func(key)\nself.bucket[index] = pair\ndef remove(self, key: int) -> None:\n\"\"\" \u5220\u9664\u64cd\u4f5c \"\"\"\nindex: int = self.hash_func(key)\n# \u7f6e\u4e3a None \uff0c\u4ee3\u8868\u5220\u9664\nself.bucket[index] = None\ndef entry_set(self) -> List[Entry]:\n\"\"\" \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 \"\"\"\nresult: List[Entry] = []\nfor pair in self.bucket:\nif pair is not None:\nresult.append(pair)\nreturn result\ndef key_set(self) -> List[int]:\n\"\"\" \u83b7\u53d6\u6240\u6709\u952e \"\"\"\nresult: List[int] = []\nfor pair in self.bucket:\nif pair is not None:\nresult.append(pair.key)\nreturn result\ndef value_set(self) -> List[str]:\n\"\"\" \u83b7\u53d6\u6240\u6709\u503c \"\"\"\nresult: List[str] = []\nfor pair in self.bucket:\nif pair is not None:\nresult.append(pair.val)\nreturn result\ndef print(self) -> None:\n\"\"\" \u6253\u5370\u54c8\u5e0c\u8868 \"\"\"\nfor pair in self.bucket:\nif pair is not None:\nprint(pair.key, \"->\", pair.val)\n
    array_hash_map.go
    /* \u952e\u503c\u5bf9 int->String */\ntype entry struct {\nkey int\nval string\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\ntype arrayHashMap struct {\nbucket []*entry\n}\n/* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nfunc newArrayHashMap() *arrayHashMap {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket := make([]*entry, 100)\nreturn &arrayHashMap{bucket: bucket}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nfunc (a *arrayHashMap) hashFunc(key int) int {\nindex := key % 100\nreturn index\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nfunc (a *arrayHashMap) get(key int) string {\nindex := a.hashFunc(key)\npair := a.bucket[index]\nif pair == nil {\nreturn \"Not Found\"\n}\nreturn pair.val\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nfunc (a *arrayHashMap) put(key int, val string) {\npair := &entry{key: key, val: val}\nindex := a.hashFunc(key)\na.bucket[index] = pair\n}\n/* \u5220\u9664\u64cd\u4f5c */\nfunc (a *arrayHashMap) remove(key int) {\nindex := a.hashFunc(key)\n// \u7f6e\u4e3a nil \uff0c\u4ee3\u8868\u5220\u9664\na.bucket[index] = nil\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u5bf9 */\nfunc (a *arrayHashMap) entrySet() []*entry {\nvar pairs []*entry\nfor _, pair := range a.bucket {\nif pair != nil {\npairs = append(pairs, pair)\n}\n}\nreturn pairs\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nfunc (a *arrayHashMap) keySet() []int {\nvar keys []int\nfor _, pair := range a.bucket {\nif pair != nil {\nkeys = append(keys, pair.key)\n}\n}\nreturn keys\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nfunc (a *arrayHashMap) valueSet() []string {\nvar values []string\nfor _, pair := range a.bucket {\nif pair != nil {\nvalues = append(values, pair.val)\n}\n}\nreturn values\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nfunc (a *arrayHashMap) print() {\nfor _, pair := range a.bucket {\nif pair != nil {\nfmt.Println(pair.key, \"->\", pair.val)\n}\n}\n}\n
    array_hash_map.js
    /* \u952e\u503c\u5bf9 Number -> String */\nclass Entry {\nconstructor(key, val) {\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\n#bucket;\nconstructor() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nthis.#bucket = new Array(100).fill(null);\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\n#hashFunc(key) {\nreturn key % 100;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nget(key) {\nlet index = this.#hashFunc(key);\nlet entry = this.#bucket[index];\nif (entry === null) return null;\nreturn entry.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nset(key, val) {\nlet index = this.#hashFunc(key);\nthis.#bucket[index] = new Entry(key, val);\n}\n/* \u5220\u9664\u64cd\u4f5c */\ndelete(key) {\nlet index = this.#hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nthis.#bucket[index] = null;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\nentries() {\nlet arr = [];\nfor (let i = 0; i < this.#bucket.length; i++) {\nif (this.#bucket[i]) {\narr.push(this.#bucket[i]);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nkeys() {\nlet arr = [];\nfor (let i = 0; i < this.#bucket.length; i++) {\nif (this.#bucket[i]) {\narr.push(this.#bucket[i]?.key);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nvalues() {\nlet arr = [];\nfor (let i = 0; i < this.#bucket.length; i++) {\nif (this.#bucket[i]) {\narr.push(this.#bucket[i]?.val);\n}\n}\nreturn arr;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nprint() {\nlet entrySet = this.entries();\nfor (const entry of entrySet) {\nif (!entry) continue;\nconsole.info(`${entry.key} -> ${entry.val}`);\n}\n}\n}\n
    array_hash_map.ts
    /* \u952e\u503c\u5bf9 Number -> String */\nclass Entry {\npublic key: number;\npublic val: string;\nconstructor(key: number, val: string) {\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate readonly bucket: (Entry | null)[];\nconstructor() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nthis.bucket = (new Array(100)).fill(null);\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate hashFunc(key: number): number {\nreturn key % 100;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\npublic get(key: number): string | null {\nlet index = this.hashFunc(key);\nlet entry = this.bucket[index];\nif (entry === null) return null;\nreturn entry.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\npublic set(key: number, val: string) {\nlet index = this.hashFunc(key);\nthis.bucket[index] = new Entry(key, val);\n}\n/* \u5220\u9664\u64cd\u4f5c */\npublic delete(key: number) {\nlet index = this.hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nthis.bucket[index] = null;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\npublic entries(): (Entry | null)[] {\nlet arr: (Entry | null)[] = [];\nfor (let i = 0; i < this.bucket.length; i++) {\nif (this.bucket[i]) {\narr.push(this.bucket[i]);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\npublic keys(): (number | undefined)[] {\nlet arr: (number | undefined)[] = [];\nfor (let i = 0; i < this.bucket.length; i++) {\nif (this.bucket[i]) {\narr.push(this.bucket[i]?.key);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\npublic values(): (string | undefined)[] {\nlet arr: (string | undefined)[] = [];\nfor (let i = 0; i < this.bucket.length; i++) {\nif (this.bucket[i]) {\narr.push(this.bucket[i]?.val);\n}\n}\nreturn arr;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\npublic print() {\nlet entrySet = this.entries();\nfor (const entry of entrySet) {\nif (!entry) continue;\nconsole.info(`${entry.key} -> ${entry.val}`);\n}\n}\n}\n
    array_hash_map.c
    [class]{entry}-[func]{}\n[class]{arrayHashMap}-[func]{}\n
    array_hash_map.cs
    /* \u952e\u503c\u5bf9 int->String */\nclass Entry\n{\npublic int key;\npublic String val;\npublic Entry(int key, String val)\n{\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap\n{\nprivate List<Entry?> bucket;\npublic ArrayHashMap()\n{\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket = new();\nfor (int i = 0; i < 100; i++)\n{\nbucket.Add(null);\n}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate int hashFunc(int key)\n{\nint index = key % 100;\nreturn index;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\npublic String? get(int key)\n{\nint index = hashFunc(key);\nEntry? pair = bucket[index];\nif (pair == null) return null;\nreturn pair.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\npublic void put(int key, String val)\n{\nEntry pair = new Entry(key, val);\nint index = hashFunc(key);\nbucket[index] = pair;\n}\n/* \u5220\u9664\u64cd\u4f5c */\npublic void remove(int key)\n{\nint index = hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nbucket[index] = null;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\npublic List<Entry> entrySet()\n{\nList<Entry> entrySet = new();\nforeach (Entry? pair in bucket)\n{\nif (pair != null)\nentrySet.Add(pair);\n}\nreturn entrySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\npublic List<int> keySet()\n{\nList<int> keySet = new();\nforeach (Entry? pair in bucket)\n{\nif (pair != null)\nkeySet.Add(pair.key);\n}\nreturn keySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\npublic List<String> valueSet()\n{\nList<String> valueSet = new();\nforeach (Entry? pair in bucket)\n{\nif (pair != null)\nvalueSet.Add(pair.val);\n}\nreturn valueSet;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\npublic void print()\n{\nforeach (Entry kv in entrySet())\n{\nConsole.WriteLine(kv.key + \" -> \" + kv.val);\n}\n}\n}\n
    array_hash_map.swift
    /* \u952e\u503c\u5bf9 int->String */\nclass Entry {\nvar key: Int\nvar val: String\ninit(key: Int, val: String) {\nself.key = key\nself.val = val\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate var bucket: [Entry?] = []\ninit() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nfor _ in 0 ..< 100 {\nbucket.append(nil)\n}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate func hashFunc(key: Int) -> Int {\nlet index = key % 100\nreturn index\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nfunc get(key: Int) -> String? {\nlet index = hashFunc(key: key)\nlet pair = bucket[index]\nreturn pair?.val\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nfunc put(key: Int, val: String) {\nlet pair = Entry(key: key, val: val)\nlet index = hashFunc(key: key)\nbucket[index] = pair\n}\n/* \u5220\u9664\u64cd\u4f5c */\nfunc remove(key: Int) {\nlet index = hashFunc(key: key)\n// \u7f6e\u4e3a nil \uff0c\u4ee3\u8868\u5220\u9664\nbucket[index] = nil\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\nfunc entrySet() -> [Entry] {\nvar entrySet: [Entry] = []\nfor pair in bucket {\nif let pair = pair {\nentrySet.append(pair)\n}\n}\nreturn entrySet\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nfunc keySet() -> [Int] {\nvar keySet: [Int] = []\nfor pair in bucket {\nif let pair = pair {\nkeySet.append(pair.key)\n}\n}\nreturn keySet\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nfunc valueSet() -> [String] {\nvar valueSet: [String] = []\nfor pair in bucket {\nif let pair = pair {\nvalueSet.append(pair.val)\n}\n}\nreturn valueSet\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nfunc print() {\nfor entry in entrySet() {\nSwift.print(\"\\(entry.key) -> \\(entry.val)\")\n}\n}\n}\n
    array_hash_map.zig
    // \u952e\u503c\u5bf9 int->String\nconst Entry = struct {\nkey: usize = undefined,\nval: []const u8 = undefined,\npub fn init(key: usize, val: []const u8) Entry {\nreturn Entry {\n.key = key,\n.val = val,\n};\n}\n};\n// \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868\nfn ArrayHashMap(comptime T: type) type {\nreturn struct {\nbucket: ?std.ArrayList(?T) = null,\nmem_allocator: std.mem.Allocator = undefined,\nconst Self = @This();\n// \u6784\u9020\u65b9\u6cd5\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nself.mem_allocator = allocator;\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nself.bucket = std.ArrayList(?T).init(self.mem_allocator);\nvar i: i32 = 0;\nwhile (i < 100) : (i += 1) {\ntry self.bucket.?.append(null);\n}\n}\n// \u6790\u6784\u65b9\u6cd5\npub fn deinit(self: *Self) void {\nif (self.bucket != null) self.bucket.?.deinit();\n}\n// \u54c8\u5e0c\u51fd\u6570\nfn hashFunc(key: usize) usize {\nvar index = key % 100;\nreturn index;\n}\n// \u67e5\u8be2\u64cd\u4f5c\npub fn get(self: *Self, key: usize) []const u8 {\nvar index = hashFunc(key);\nvar pair = self.bucket.?.items[index];\nreturn pair.?.val;\n}\n// \u6dfb\u52a0\u64cd\u4f5c\npub fn put(self: *Self, key: usize, val: []const u8) !void {\nvar pair = Entry.init(key, val);\nvar index = hashFunc(key);\nself.bucket.?.items[index] = pair;\n}\n// \u5220\u9664\u64cd\u4f5c\npub fn remove(self: *Self, key: usize) !void {\nvar index = hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nself.bucket.?.items[index] = null;\n}       // \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9\npub fn entrySet(self: *Self) !*std.ArrayList(T) {\nvar entry_set = std.ArrayList(T).init(self.mem_allocator);\nfor (self.bucket.?.items) |item| {\nif (item == null) continue;\ntry entry_set.append(item.?);\n}\nreturn &entry_set;\n}  // \u83b7\u53d6\u6240\u6709\u952e\npub fn keySet(self: *Self) !*std.ArrayList(usize) {\nvar key_set = std.ArrayList(usize).init(self.mem_allocator);\nfor (self.bucket.?.items) |item| {\nif (item == null) continue;\ntry key_set.append(item.?.key);\n}\nreturn &key_set;\n}  // \u83b7\u53d6\u6240\u6709\u503c\npub fn valueSet(self: *Self) !*std.ArrayList([]const u8) {\nvar value_set = std.ArrayList([]const u8).init(self.mem_allocator);\nfor (self.bucket.?.items) |item| {\nif (item == null) continue;\ntry value_set.append(item.?.val);\n}\nreturn &value_set;\n}\n// \u6253\u5370\u54c8\u5e0c\u8868\npub fn print(self: *Self) !void {\nvar entry_set = try self.entrySet();\ndefer entry_set.deinit();\nfor (entry_set.items) |item| {\nstd.debug.print(\"{} -> {s}\\n\", .{item.key, item.val});\n}\n}\n};\n}\n
    "},{"location":"chapter_hashing/hash_map/#614","title":"6.1.4. \u00a0 \u54c8\u5e0c\u51b2\u7a81","text":"

    \u7ec6\u5fc3\u7684\u540c\u5b66\u53ef\u80fd\u4f1a\u53d1\u73b0\uff0c\u54c8\u5e0c\u51fd\u6570 \\(f(x) = x \\% 100\\) \u4f1a\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u5931\u6548\u3002\u5177\u4f53\u5730\uff0c\u5f53\u8f93\u5165\u7684 key \u540e\u4e24\u4f4d\u76f8\u540c\u65f6\uff0c\u54c8\u5e0c\u51fd\u6570\u7684\u8ba1\u7b97\u7ed3\u679c\u4e5f\u76f8\u540c\uff0c\u6307\u5411\u540c\u4e00\u4e2a value \u3002\u4f8b\u5982\uff0c\u5206\u522b\u67e5\u8be2\u4e24\u4e2a\u5b66\u53f7 \\(12836\\) \u548c \\(20336\\) \uff0c\u5219\u6709

    \\[ f(12836) = f(20336) = 36 \\]

    \u4e24\u4e2a\u5b66\u53f7\u6307\u5411\u4e86\u540c\u4e00\u4e2a\u59d3\u540d\uff0c\u8fd9\u660e\u663e\u662f\u4e0d\u5bf9\u7684\uff0c\u6211\u4eec\u5c06\u8fd9\u79cd\u73b0\u8c61\u79f0\u4e3a\u300c\u54c8\u5e0c\u51b2\u7a81 Hash Collision\u300d\u3002\u5982\u4f55\u907f\u514d\u54c8\u5e0c\u51b2\u7a81\u7684\u95ee\u9898\u5c06\u88ab\u7559\u5728\u4e0b\u7ae0\u8ba8\u8bba\u3002

    Fig. \u54c8\u5e0c\u51b2\u7a81\u793a\u4f8b

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u4e00\u4e2a\u4f18\u79c0\u7684\u300c\u54c8\u5e0c\u51fd\u6570\u300d\u5e94\u8be5\u5177\u5907\u4ee5\u4e0b\u7279\u6027\uff1a

    • \u5c3d\u91cf\u5c11\u5730\u53d1\u751f\u54c8\u5e0c\u51b2\u7a81\uff1b
    • \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff0c\u8ba1\u7b97\u5c3d\u53ef\u80fd\u9ad8\u6548\uff1b
    • \u7a7a\u95f4\u4f7f\u7528\u7387\u9ad8\uff0c\u5373\u201c\u952e\u503c\u5bf9\u5360\u7528\u7a7a\u95f4 / \u54c8\u5e0c\u8868\u603b\u5360\u7528\u7a7a\u95f4\u201d\u5c3d\u53ef\u80fd\u5927\uff1b
    "},{"location":"chapter_hashing/summary/","title":"6.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u5411\u54c8\u5e0c\u8868\u4e2d\u8f93\u5165\u4e00\u4e2a\u952e key \uff0c\u67e5\u8be2\u5230\u503c value \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u975e\u5e38\u9ad8\u6548\u3002
    • \u54c8\u5e0c\u8868\u7684\u5e38\u7528\u64cd\u4f5c\u5305\u62ec\u67e5\u8be2\u3001\u6dfb\u52a0\u4e0e\u5220\u9664\u952e\u503c\u5bf9\u3001\u904d\u5386\u952e\u503c\u5bf9\u7b49\u3002
    • \u54c8\u5e0c\u51fd\u6570\u5c06 key \u6620\u5c04\u5230\u6876\uff08\u6570\u7ec4\uff09\u7d22\u5f15\uff0c\u4ece\u800c\u8bbf\u95ee\u5230\u5bf9\u5e94\u7684\u503c value \u3002
    • \u4e24\u4e2a\u4e0d\u540c\u7684 key \u7ecf\u8fc7\u54c8\u5e0c\u51fd\u6570\u53ef\u80fd\u5f97\u5230\u76f8\u540c\u7684\u6876\u7d22\u5f15\uff0c\u8fdb\u800c\u53d1\u751f\u54c8\u5e0c\u51b2\u7a81\uff0c\u5bfc\u81f4\u67e5\u8be2\u9519\u8bef\u3002
    • \u7f13\u89e3\u54c8\u5e0c\u51b2\u7a81\u7684\u9014\u5f84\u6709\u4e24\u79cd\uff1a\u54c8\u5e0c\u8868\u6269\u5bb9\u3001\u4f18\u5316\u54c8\u5e0c\u8868\u7684\u8868\u793a\u65b9\u5f0f\u3002
    • \u8d1f\u8f7d\u56e0\u5b50\u5b9a\u4e49\u4e3a\u54c8\u5e0c\u8868\u4e2d\u5143\u7d20\u6570\u91cf\u9664\u4ee5\u6876\u69fd\u6570\u91cf\uff0c\u4f53\u73b0\u54c8\u5e0c\u51b2\u7a81\u7684\u4e25\u91cd\u7a0b\u5ea6\uff0c\u5e38\u7528\u4f5c\u54c8\u5e0c\u8868\u6269\u5bb9\u7684\u89e6\u53d1\u6761\u4ef6\u3002\u4e0e\u6570\u7ec4\u6269\u5bb9\u7684\u539f\u7406\u7c7b\u4f3c\uff0c\u54c8\u5e0c\u8868\u6269\u5bb9\u64cd\u4f5c\u5f00\u9500\u4e5f\u5f88\u5927\u3002
    • \u94fe\u5f0f\u5730\u5740\u8003\u8651\u5c06\u5355\u4e2a\u5143\u7d20\u8f6c\u5316\u6210\u4e00\u4e2a\u94fe\u8868\uff0c\u5c06\u6240\u6709\u51b2\u7a81\u5143\u7d20\u90fd\u5b58\u50a8\u5728\u4e00\u4e2a\u94fe\u8868\u4e2d\uff0c\u4ece\u800c\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002\u94fe\u8868\u8fc7\u957f\u4f1a\u5bfc\u81f4\u67e5\u8be2\u6548\u7387\u53d8\u4f4e\uff0c\u53ef\u4ee5\u901a\u8fc7\u628a\u94fe\u8868\u8f6c\u5316\u4e3a AVL \u6811\u6216\u7ea2\u9ed1\u6811\u6765\u89e3\u51b3\u3002
    • \u5f00\u653e\u5bfb\u5740\u901a\u8fc7\u591a\u6b21\u63a2\u6d4b\u6765\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002\u7ebf\u6027\u63a2\u6d4b\u4f7f\u7528\u56fa\u5b9a\u6b65\u957f\uff0c\u7f3a\u70b9\u662f\u4e0d\u80fd\u5220\u9664\u5143\u7d20\u4e14\u5bb9\u6613\u4ea7\u751f\u805a\u96c6\u3002\u591a\u6b21\u54c8\u5e0c\u4f7f\u7528\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570\u8fdb\u884c\u63a2\u6d4b\uff0c\u76f8\u5bf9\u7ebf\u6027\u63a2\u6d4b\u4e0d\u5bb9\u6613\u4ea7\u751f\u805a\u96c6\uff0c\u4ee3\u4ef7\u662f\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570\u589e\u52a0\u4e86\u8ba1\u7b97\u91cf\u3002
    • \u5728\u5de5\u4e1a\u754c\u4e2d\uff0cJava \u7684 HashMap \u91c7\u7528\u94fe\u5f0f\u5730\u5740\u3001Python \u7684 Dict \u91c7\u7528\u5f00\u653e\u5bfb\u5740\u3002
    "},{"location":"chapter_heap/build_heap/","title":"8.2. \u00a0 \u5efa\u5806\u64cd\u4f5c *","text":"

    \u5982\u679c\u6211\u4eec\u60f3\u8981\u6839\u636e\u8f93\u5165\u5217\u8868\u6765\u751f\u6210\u4e00\u4e2a\u5806\uff0c\u8fd9\u6837\u7684\u64cd\u4f5c\u88ab\u79f0\u4e3a\u300c\u5efa\u5806\u300d\u3002

    "},{"location":"chapter_heap/build_heap/#821","title":"8.2.1. \u00a0 \u4e24\u79cd\u5efa\u5806\u65b9\u6cd5","text":""},{"location":"chapter_heap/build_heap/#_1","title":"\u501f\u52a9\u5165\u5806\u65b9\u6cd5\u5b9e\u73b0","text":"

    \u6700\u76f4\u63a5\u5730\uff0c\u8003\u8651\u501f\u52a9\u300c\u5143\u7d20\u5165\u5806\u300d\u65b9\u6cd5\uff0c\u5148\u5efa\u7acb\u4e00\u4e2a\u7a7a\u5806\uff0c\u518d\u5c06\u5217\u8868\u5143\u7d20\u4f9d\u6b21\u5165\u5806\u5373\u53ef\u3002

    "},{"location":"chapter_heap/build_heap/#_2","title":"\u57fa\u4e8e\u5806\u5316\u64cd\u4f5c\u5b9e\u73b0","text":"

    \u7136\u800c\uff0c\u5b58\u5728\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\u7684\u5efa\u5806\u65b9\u6cd5\u3002\u8bbe\u5143\u7d20\u6570\u91cf\u4e3a \\(n\\) \uff0c\u6211\u4eec\u5148\u5c06\u5217\u8868\u6240\u6709\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\uff0c\u7136\u540e\u8fed\u4ee3\u5730\u5bf9\u5404\u4e2a\u7ed3\u70b9\u6267\u884c\u300c\u4ece\u9876\u81f3\u5e95\u5806\u5316\u300d\u3002\u5f53\u7136\uff0c\u65e0\u9700\u5bf9\u53f6\u7ed3\u70b9\u6267\u884c\u5806\u5316\uff0c\u56e0\u4e3a\u5176\u6ca1\u6709\u5b50\u7ed3\u70b9\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nMaxHeap(List<Integer> nums) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = new ArrayList<>(nums);\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (int i = parent(size() - 1); i >= 0; i--) {\nsiftDown(i);\n}\n}\n
    my_heap.cpp
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nMaxHeap(vector<int> nums) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = nums;\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (int i = parent(size() - 1); i >= 0; i--) {\nsiftDown(i);\n}\n}\n
    my_heap.py
    def __init__(self, nums: List[int]):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\n# \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nself.max_heap = nums\n# \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor i in range(self.parent(self.size() - 1), -1, -1):\nself.sift_down(i)\n
    my_heap.go
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u5207\u7247\u5efa\u5806 */\nfunc newMaxHeap(nums []any) *maxHeap {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nh := &maxHeap{data: nums}\nfor i := len(h.data) - 1; i >= 0; i-- {\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nh.siftDown(i)\n}\nreturn h\n}\n
    my_heap.js
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u5efa\u7acb\u7a7a\u5806\u6216\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nconstructor(nums) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nthis.#maxHeap = nums === undefined ? [] : [...nums];\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (let i = this.#parent(this.size() - 1); i >= 0; i--) {\nthis.#siftDown(i);\n}\n}\n
    my_heap.ts
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u5efa\u7acb\u7a7a\u5806\u6216\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nconstructor(nums?: number[]) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nthis.maxHeap = nums === undefined ? [] : [...nums];\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (let i = this.parent(this.size() - 1); i >= 0; i--) {\nthis.siftDown(i);\n}\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{newMaxHeap}\n
    my_heap.cs
    /* \u6784\u9020\u51fd\u6570\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nMaxHeap(IEnumerable<int> nums)\n{\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = new List<int>(nums);\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nvar size = parent(this.size() - 1);\nfor (int i = size; i >= 0; i--)\n{\nsiftDown(i);\n}\n}\n
    my_heap.swift
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\ninit(nums: [Int]) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = nums\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor i in stride(from: parent(i: size() - 1), through: 0, by: -1) {\nsiftDown(i: i)\n}\n}\n
    my_heap.zig
    // \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806\nfn init(self: *Self, allocator: std.mem.Allocator, nums: []const T) !void {\nif (self.maxHeap != null) return;\nself.maxHeap = std.ArrayList(T).init(allocator);\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\ntry self.maxHeap.?.appendSlice(nums);\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nvar i: usize = parent(self.size() - 1) + 1;\nwhile (i > 0) : (i -= 1) {\ntry self.siftDown(i - 1);\n}\n}\n
    "},{"location":"chapter_heap/build_heap/#822","title":"8.2.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u5bf9\u4e8e\u7b2c\u4e00\u79cd\u5efa\u5806\u65b9\u6cd5\uff0c\u5143\u7d20\u5165\u5806\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \uff0c\u800c\u5e73\u5747\u957f\u5ea6\u4e3a \\(\\frac{n}{2}\\) \uff0c\u56e0\u6b64\u8be5\u65b9\u6cd5\u7684\u603b\u4f53\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n \\log n)\\) \u3002

    \u90a3\u4e48\uff0c\u7b2c\u4e8c\u79cd\u5efa\u5806\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f\u591a\u5c11\u5462\uff1f\u6211\u4eec\u6765\u5c55\u5f00\u63a8\u7b97\u4e00\u4e0b\u3002

    • \u5b8c\u5168\u4e8c\u53c9\u6811\u4e2d\uff0c\u8bbe\u7ed3\u70b9\u603b\u6570\u4e3a \\(n\\) \uff0c\u5219\u53f6\u7ed3\u70b9\u6570\u91cf\u4e3a \\((n + 1) / 2\\) \uff0c\u5176\u4e2d \\(/\\) \u4e3a\u5411\u4e0b\u6574\u9664\u3002\u56e0\u6b64\u5728\u6392\u9664\u53f6\u7ed3\u70b9\u540e\uff0c\u9700\u8981\u5806\u5316\u7ed3\u70b9\u6570\u91cf\u4e3a \\((n - 1)/2\\) \uff0c\u5373\u4e3a \\(O(n)\\) \uff1b
    • \u4ece\u9876\u81f3\u5e95\u5806\u5316\u4e2d\uff0c\u6bcf\u4e2a\u7ed3\u70b9\u6700\u591a\u5806\u5316\u81f3\u53f6\u7ed3\u70b9\uff0c\u56e0\u6b64\u6700\u5927\u8fed\u4ee3\u6b21\u6570\u4e3a\u4e8c\u53c9\u6811\u9ad8\u5ea6 \\(O(\\log n)\\) \uff1b

    \u5c06\u4e0a\u8ff0\u4e24\u8005\u76f8\u4e58\uff0c\u53ef\u5f97\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n \\log n)\\) \u3002\u7136\u800c\uff0c\u8be5\u4f30\u7b97\u7ed3\u679c\u4ecd\u4e0d\u591f\u51c6\u786e\uff0c\u56e0\u4e3a\u6211\u4eec\u6ca1\u6709\u8003\u8651\u5230 \u4e8c\u53c9\u6811\u5e95\u5c42\u7ed3\u70b9\u8fdc\u591a\u4e8e\u9876\u5c42\u7ed3\u70b9 \u7684\u6027\u8d28\u3002

    \u4e0b\u9762\u6211\u4eec\u6765\u5c1d\u8bd5\u5c55\u5f00\u8ba1\u7b97\u3002\u4e3a\u4e86\u51cf\u5c0f\u8ba1\u7b97\u96be\u5ea6\uff0c\u6211\u4eec\u5047\u8bbe\u6811\u662f\u4e00\u4e2a\u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u300d\uff0c\u8be5\u5047\u8bbe\u4e0d\u4f1a\u5f71\u54cd\u8ba1\u7b97\u7ed3\u679c\u7684\u6b63\u786e\u6027\u3002\u8bbe\u4e8c\u53c9\u6811\uff08\u5373\u5806\uff09\u7ed3\u70b9\u6570\u91cf\u4e3a \\(n\\) \uff0c\u6811\u9ad8\u5ea6\u4e3a \\(h\\) \u3002\u4e0a\u6587\u63d0\u5230\uff0c\u7ed3\u70b9\u5806\u5316\u6700\u5927\u8fed\u4ee3\u6b21\u6570\u7b49\u4e8e\u8be5\u7ed3\u70b9\u5230\u53f6\u7ed3\u70b9\u7684\u8ddd\u79bb\uff0c\u800c\u8fd9\u6b63\u662f\u201c\u7ed3\u70b9\u9ad8\u5ea6\u201d\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u5404\u5c42\u7684\u201c\u7ed3\u70b9\u6570\u91cf \\(\\times\\) \u7ed3\u70b9\u9ad8\u5ea6\u201d\u6c42\u548c\uff0c\u5373\u53ef\u5f97\u5230\u6240\u6709\u7ed3\u70b9\u7684\u5806\u5316\u7684\u8fed\u4ee3\u6b21\u6570\u603b\u548c\u3002

    \\[ T(h) = 2^0h + 2^1(h-1) + 2^2(h-2) + \\cdots + 2^{(h-1)}\\times1 \\]

    Fig. \u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u5404\u5c42\u7ed3\u70b9\u6570\u91cf

    \u5316\u7b80\u4e0a\u5f0f\u9700\u8981\u501f\u52a9\u4e2d\u5b66\u7684\u6570\u5217\u77e5\u8bc6\uff0c\u5148\u5bf9 \\(T(h)\\) \u4e58\u4ee5 \\(2\\) \uff0c\u6613\u5f97

    \\[ \\begin{aligned} T(h) & = 2^0h + 2^1(h-1) + 2^2(h-2) + \\cdots + 2^{h-1}\\times1 \\newline 2 T(h) & = 2^1h + 2^2(h-1) + 2^3(h-2) + \\cdots + 2^{h}\\times1 \\newline \\end{aligned} \\]

    \u4f7f\u7528\u9519\u4f4d\u76f8\u51cf\u6cd5\uff0c\u4ee4\u4e0b\u5f0f \\(2 T(h)\\) \u51cf\u53bb\u4e0a\u5f0f \\(T(h)\\) \uff0c\u53ef\u5f97

    \\[ 2T(h) - T(h) = T(h) = -2^0h + 2^1 + 2^2 + \\cdots + 2^{h-1} + 2^h \\]

    \u89c2\u5bdf\u4e0a\u5f0f\uff0c\\(T(h)\\) \u662f\u4e00\u4e2a\u7b49\u6bd4\u6570\u5217\uff0c\u53ef\u76f4\u63a5\u4f7f\u7528\u6c42\u548c\u516c\u5f0f\uff0c\u5f97\u5230\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a

    \\[ \\begin{aligned} T(h) & = 2 \\frac{1 - 2^h}{1 - 2} - h \\newline & = 2^{h+1} - h \\newline & = O(2^h) \\end{aligned} \\]

    \u8fdb\u4e00\u6b65\u5730\uff0c\u9ad8\u5ea6\u4e3a \\(h\\) \u7684\u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u7ed3\u70b9\u6570\u91cf\u4e3a \\(n = 2^{h+1} - 1\\) \uff0c\u6613\u5f97\u590d\u6742\u5ea6\u4e3a \\(O(2^h) = O(n)\\)\u3002\u4ee5\u4e0a\u63a8\u7b97\u8868\u660e\uff0c\u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff0c\u975e\u5e38\u9ad8\u6548\u3002

    "},{"location":"chapter_heap/heap/","title":"8.1. \u00a0 \u5806","text":"

    \u300c\u5806 Heap\u300d\u662f\u4e00\u68f5\u9650\u5b9a\u6761\u4ef6\u4e0b\u7684\u300c\u5b8c\u5168\u4e8c\u53c9\u6811\u300d\u3002\u6839\u636e\u6210\u7acb\u6761\u4ef6\uff0c\u5806\u4e3b\u8981\u5206\u4e3a\u4e24\u79cd\u7c7b\u578b\uff1a

    • \u300c\u5927\u9876\u5806 Max Heap\u300d\uff0c\u4efb\u610f\u7ed3\u70b9\u7684\u503c \\(\\geq\\) \u5176\u5b50\u7ed3\u70b9\u7684\u503c\uff1b
    • \u300c\u5c0f\u9876\u5806 Min Heap\u300d\uff0c\u4efb\u610f\u7ed3\u70b9\u7684\u503c \\(\\leq\\) \u5176\u5b50\u7ed3\u70b9\u7684\u503c\uff1b

    Fig. \u5c0f\u9876\u5806\u4e0e\u5927\u9876\u5806

    "},{"location":"chapter_heap/heap/#811","title":"8.1.1. \u00a0 \u5806\u672f\u8bed\u4e0e\u6027\u8d28","text":"
    • \u7531\u4e8e\u5806\u662f\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u56e0\u6b64\u6700\u5e95\u5c42\u7ed3\u70b9\u9760\u5de6\u586b\u5145\uff0c\u5176\u5b83\u5c42\u7ed3\u70b9\u7686\u88ab\u586b\u6ee1\u3002
    • \u4e8c\u53c9\u6811\u4e2d\u7684\u6839\u7ed3\u70b9\u5bf9\u5e94\u300c\u5806\u9876\u300d\uff0c\u5e95\u5c42\u6700\u9760\u53f3\u7ed3\u70b9\u5bf9\u5e94\u300c\u5806\u5e95\u300d\u3002
    • \u5bf9\u4e8e\u5927\u9876\u5806 / \u5c0f\u9876\u5806\uff0c\u5176\u5806\u9876\u5143\u7d20\uff08\u5373\u6839\u7ed3\u70b9\uff09\u7684\u503c\u6700\u5927 / \u6700\u5c0f\u3002
    "},{"location":"chapter_heap/heap/#812","title":"8.1.2. \u00a0 \u5806\u5e38\u7528\u64cd\u4f5c","text":"

    \u503c\u5f97\u8bf4\u660e\u7684\u662f\uff0c\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u662f\u300c\u4f18\u5148\u961f\u5217 Priority Queue\u300d\uff0c\u5176\u662f\u4e00\u79cd\u62bd\u8c61\u6570\u636e\u7ed3\u6784\uff0c\u5b9a\u4e49\u4e3a\u5177\u6709\u51fa\u961f\u4f18\u5148\u7ea7\u7684\u961f\u5217\u3002

    \u800c\u6070\u597d\uff0c\u5806\u7684\u5b9a\u4e49\u4e0e\u4f18\u5148\u961f\u5217\u7684\u64cd\u4f5c\u903b\u8f91\u5b8c\u5168\u543b\u5408\uff0c\u5927\u9876\u5806\u5c31\u662f\u4e00\u4e2a\u5143\u7d20\u4ece\u5927\u5230\u5c0f\u51fa\u961f\u7684\u4f18\u5148\u961f\u5217\u3002\u4ece\u4f7f\u7528\u89d2\u5ea6\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u300c\u4f18\u5148\u961f\u5217\u300d\u548c\u300c\u5806\u300d\u7406\u89e3\u4e3a\u7b49\u4ef7\u7684\u6570\u636e\u7ed3\u6784\u3002\u56e0\u6b64\uff0c\u672c\u6587\u4e0e\u4ee3\u7801\u5bf9\u4e24\u8005\u4e0d\u505a\u7279\u522b\u533a\u5206\uff0c\u7edf\u4e00\u4f7f\u7528\u300c\u5806\u300d\u6765\u547d\u540d\u3002

    \u5806\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\uff08\u65b9\u6cd5\u547d\u540d\u4ee5 Java \u4e3a\u4f8b\uff09\u3002

    \u65b9\u6cd5 \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 add() \u5143\u7d20\u5165\u5806 \\(O(\\log n)\\) poll() \u5806\u9876\u5143\u7d20\u51fa\u5806 \\(O(\\log n)\\) peek() \u8bbf\u95ee\u5806\u9876\u5143\u7d20\uff08\u5927 / \u5c0f\u9876\u5806\u5206\u522b\u4e3a\u6700\u5927 / \u5c0f\u503c\uff09 \\(O(1)\\) size() \u83b7\u53d6\u5806\u7684\u5143\u7d20\u6570\u91cf \\(O(1)\\) isEmpty() \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a \\(O(1)\\)

    \u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u5806\u7c7b\uff08\u6216\u4f18\u5148\u961f\u5217\u7c7b\uff09\u3002

    Tip

    \u7c7b\u4f3c\u4e8e\u6392\u5e8f\u4e2d\u201c\u4ece\u5c0f\u5230\u5927\u6392\u5217\u201d\u548c\u201c\u4ece\u5927\u5230\u5c0f\u6392\u5217\u201d\uff0c\u201c\u5927\u9876\u5806\u201d\u548c\u201c\u5c0f\u9876\u5806\u201d\u53ef\u4ec5\u901a\u8fc7\u4fee\u6539 Comparator \u6765\u4e92\u76f8\u8f6c\u6362\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig heap.java
    /* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5c0f\u9876\u5806\nQueue<Integer> minHeap = new PriorityQueue<>();\n// \u521d\u59cb\u5316\u5927\u9876\u5806\uff08\u4f7f\u7528 lambda \u8868\u8fbe\u5f0f\u4fee\u6539 Comparator \u5373\u53ef\uff09\nQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);\n/* \u5143\u7d20\u5165\u5806 */\nmaxHeap.add(1);\nmaxHeap.add(3);\nmaxHeap.add(2);\nmaxHeap.add(5);\nmaxHeap.add(4);\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\nint peek = maxHeap.peek(); // 5\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\npeek = heap.poll();  // 5\npeek = heap.poll();  // 4\npeek = heap.poll();  // 3\npeek = heap.poll();  // 2\npeek = heap.poll();  // 1\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nint size = maxHeap.size();\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = maxHeap.isEmpty();\n/* \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 */\nminHeap = new PriorityQueue<>(Arrays.asList(1, 3, 2, 5, 4));\n
    heap.cpp
    /* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5c0f\u9876\u5806\npriority_queue<int, vector<int>, greater<int>> minHeap;\n// \u521d\u59cb\u5316\u5927\u9876\u5806\npriority_queue<int, vector<int>, less<int>> maxHeap;\n/* \u5143\u7d20\u5165\u5806 */\nmaxHeap.push(1);\nmaxHeap.push(3);\nmaxHeap.push(2);\nmaxHeap.push(5);\nmaxHeap.push(4);\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\nint peek = maxHeap.top(); // 5\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\nmaxHeap.pop(); // 5\nmaxHeap.pop(); // 4\nmaxHeap.pop(); // 3\nmaxHeap.pop(); // 2\nmaxHeap.pop(); // 1\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nint size = maxHeap.size();\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = maxHeap.empty();\n/* \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 */\nvector<int> input{1, 3, 2, 5, 4};\npriority_queue<int, vector<int>, greater<int>> minHeap(input.begin(), input.end());\n
    heap.py
    # \u521d\u59cb\u5316\u5c0f\u9876\u5806\nmin_heap, flag = [], 1\n# \u521d\u59cb\u5316\u5927\u9876\u5806\nmax_heap, flag = [], -1\n# Python \u7684 heapq \u6a21\u5757\u9ed8\u8ba4\u5b9e\u73b0\u5c0f\u9876\u5806\n# \u8003\u8651\u5c06\u201c\u5143\u7d20\u53d6\u8d1f\u201d\u540e\u518d\u5165\u5806\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5c06\u5927\u5c0f\u5173\u7cfb\u98a0\u5012\uff0c\u4ece\u800c\u5b9e\u73b0\u5927\u9876\u5806\n# \u5728\u672c\u793a\u4f8b\u4e2d\uff0cflag = 1 \u65f6\u5bf9\u5e94\u5c0f\u9876\u5806\uff0cflag = -1 \u65f6\u5bf9\u5e94\u5927\u9876\u5806\n\"\"\" \u5143\u7d20\u5165\u5806 \"\"\"\nheapq.heappush(max_heap, flag * 1)\nheapq.heappush(max_heap, flag * 3)\nheapq.heappush(max_heap, flag * 2)\nheapq.heappush(max_heap, flag * 5)\nheapq.heappush(max_heap, flag * 4)\n\"\"\" \u83b7\u53d6\u5806\u9876\u5143\u7d20 \"\"\"\npeek: int = flag * max_heap[0] # 5\n\"\"\" \u5806\u9876\u5143\u7d20\u51fa\u5806 \"\"\"\n# \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\nval = flag * heapq.heappop(max_heap) # 5\nval = flag * heapq.heappop(max_heap) # 4\nval = flag * heapq.heappop(max_heap) # 3\nval = flag * heapq.heappop(max_heap) # 2\nval = flag * heapq.heappop(max_heap) # 1\n\"\"\" \u83b7\u53d6\u5806\u5927\u5c0f \"\"\"\nsize: int = len(max_heap)\n\"\"\" \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = not max_heap\n\"\"\" \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 \"\"\"\nmin_heap: List[int] = [1, 3, 2, 5, 4]\nheapq.heapify(min_heap)\n
    heap.go
    // Go \u8bed\u8a00\u4e2d\u53ef\u4ee5\u901a\u8fc7\u5b9e\u73b0 heap.Interface \u6765\u6784\u5efa\u6574\u6570\u5927\u9876\u5806\n// \u5b9e\u73b0 heap.Interface \u9700\u8981\u540c\u65f6\u5b9e\u73b0 sort.Interface\ntype intHeap []any\n// Push heap.Interface \u7684\u65b9\u6cd5\uff0c\u5b9e\u73b0\u63a8\u5165\u5143\u7d20\u5230\u5806\nfunc (h *intHeap) Push(x any) {\n// Push \u548c Pop \u4f7f\u7528 pointer receiver \u4f5c\u4e3a\u53c2\u6570\n// \u56e0\u4e3a\u5b83\u4eec\u4e0d\u4ec5\u4f1a\u5bf9\u5207\u7247\u7684\u5185\u5bb9\u8fdb\u884c\u8c03\u6574\uff0c\u8fd8\u4f1a\u4fee\u6539\u5207\u7247\u7684\u957f\u5ea6\u3002\n*h = append(*h, x.(int))\n}\n// Pop heap.Interface \u7684\u65b9\u6cd5\uff0c\u5b9e\u73b0\u5f39\u51fa\u5806\u9876\u5143\u7d20\nfunc (h *intHeap) Pop() any {\n// \u5f85\u51fa\u5806\u5143\u7d20\u5b58\u653e\u5728\u6700\u540e\nlast := (*h)[len(*h)-1]\n*h = (*h)[:len(*h)-1]\nreturn last\n}\n// Len sort.Interface \u7684\u65b9\u6cd5\nfunc (h *intHeap) Len() int {\nreturn len(*h)\n}\n// Less sort.Interface \u7684\u65b9\u6cd5\nfunc (h *intHeap) Less(i, j int) bool {\n// \u5982\u679c\u5b9e\u73b0\u5c0f\u9876\u5806\uff0c\u5219\u9700\u8981\u8c03\u6574\u4e3a\u5c0f\u4e8e\u53f7\nreturn (*h)[i].(int) > (*h)[j].(int)\n}\n// Swap sort.Interface \u7684\u65b9\u6cd5\nfunc (h *intHeap) Swap(i, j int) {\n(*h)[i], (*h)[j] = (*h)[j], (*h)[i]\n}\n// Top \u83b7\u53d6\u5806\u9876\u5143\u7d20\nfunc (h *intHeap) Top() any {\nreturn (*h)[0]\n}\n/* Driver Code */\nfunc TestHeap(t *testing.T) {\n/* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5927\u9876\u5806\nmaxHeap := &intHeap{}\nheap.Init(maxHeap)\n/* \u5143\u7d20\u5165\u5806 */\n// \u8c03\u7528 heap.Interface \u7684\u65b9\u6cd5\uff0c\u6765\u6dfb\u52a0\u5143\u7d20\nheap.Push(maxHeap, 1)\nheap.Push(maxHeap, 3)\nheap.Push(maxHeap, 2)\nheap.Push(maxHeap, 4)\nheap.Push(maxHeap, 5)\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\ntop := maxHeap.Top()\nfmt.Printf(\"\u5806\u9876\u5143\u7d20\u4e3a %d\\n\", top)\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u8c03\u7528 heap.Interface \u7684\u65b9\u6cd5\uff0c\u6765\u79fb\u9664\u5143\u7d20\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nsize := len(*maxHeap)\nfmt.Printf(\"\u5806\u5143\u7d20\u6570\u91cf\u4e3a %d\\n\", size)\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nisEmpty := len(*maxHeap) == 0\nfmt.Printf(\"\u5806\u662f\u5426\u4e3a\u7a7a %t\\n\", isEmpty)\n}\n
    heap.js
    // JavaScript \u672a\u63d0\u4f9b\u5185\u7f6e heap \u7c7b\n
    heap.ts
    // TypeScript \u672a\u63d0\u4f9b\u5185\u7f6e\u5806 Heap \u7c7b\n
    heap.c
    \n
    heap.cs
    /* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5c0f\u9876\u5806\nPriorityQueue<int, int> minHeap = new PriorityQueue<int, int>();\n// \u521d\u59cb\u5316\u5927\u9876\u5806\uff08\u4f7f\u7528 lambda \u8868\u8fbe\u5f0f\u4fee\u6539 Comparator \u5373\u53ef\uff09\nPriorityQueue<int, int> maxHeap = new PriorityQueue<int, int>(Comparer<int>.Create((x, y) => y - x));\n/* \u5143\u7d20\u5165\u5806 */\nmaxHeap.Enqueue(1, 1);\nmaxHeap.Enqueue(3, 3);\nmaxHeap.Enqueue(2, 2);\nmaxHeap.Enqueue(5, 5);\nmaxHeap.Enqueue(4, 4);\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\nint peek = maxHeap.Peek();//5\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\npeek = maxHeap.Dequeue();  // 5\npeek = maxHeap.Dequeue();  // 4\npeek = maxHeap.Dequeue();  // 3\npeek = maxHeap.Dequeue();  // 2\npeek = maxHeap.Dequeue();  // 1\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nint size = maxHeap.Count;\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = maxHeap.Count == 0;\n/* \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 */\nminHeap = new PriorityQueue<int, int>(new List<(int, int)> { (1, 1), (3, 3), (2, 2), (5, 5), (4, 4), });\n
    heap.swift
    // Swift \u672a\u63d0\u4f9b\u5185\u7f6e heap \u7c7b\n
    heap.zig
    \n
    "},{"location":"chapter_heap/heap/#813","title":"8.1.3. \u00a0 \u5806\u7684\u5b9e\u73b0","text":"

    \u4e0b\u6587\u5b9e\u73b0\u7684\u662f\u300c\u5927\u9876\u5806\u300d\uff0c\u82e5\u60f3\u8f6c\u6362\u4e3a\u300c\u5c0f\u9876\u5806\u300d\uff0c\u5c06\u6240\u6709\u5927\u5c0f\u903b\u8f91\u5224\u65ad\u53d6\u9006\uff08\u4f8b\u5982\u5c06 \\(\\geq\\) \u66ff\u6362\u4e3a \\(\\leq\\) \uff09\u5373\u53ef\uff0c\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u81ea\u884c\u5b9e\u73b0\u3002

    "},{"location":"chapter_heap/heap/#_1","title":"\u5806\u7684\u5b58\u50a8\u4e0e\u8868\u793a","text":"

    \u5728\u4e8c\u53c9\u6811\u7ae0\u8282\u6211\u4eec\u5b66\u8fc7\uff0c\u300c\u5b8c\u5168\u4e8c\u53c9\u6811\u300d\u975e\u5e38\u9002\u5408\u4f7f\u7528\u300c\u6570\u7ec4\u300d\u6765\u8868\u793a\uff0c\u800c\u5806\u6070\u597d\u662f\u4e00\u68f5\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u56e0\u800c\u6211\u4eec\u91c7\u7528\u300c\u6570\u7ec4\u300d\u6765\u5b58\u50a8\u300c\u5806\u300d\u3002

    \u4e8c\u53c9\u6811\u6307\u9488\u3002\u4f7f\u7528\u6570\u7ec4\u8868\u793a\u4e8c\u53c9\u6811\u65f6\uff0c\u5143\u7d20\u4ee3\u8868\u7ed3\u70b9\u503c\uff0c\u7d22\u5f15\u4ee3\u8868\u7ed3\u70b9\u5728\u4e8c\u53c9\u6811\u4e2d\u7684\u4f4d\u7f6e\uff0c\u800c\u7ed3\u70b9\u6307\u9488\u901a\u8fc7\u7d22\u5f15\u6620\u5c04\u516c\u5f0f\u6765\u5b9e\u73b0\u3002

    \u5177\u4f53\u5730\uff0c\u7ed9\u5b9a\u7d22\u5f15 \\(i\\) \uff0c\u90a3\u4e48\u5176\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 1\\) \u3001\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 2\\) \u3001\u7236\u7ed3\u70b9\u7d22\u5f15\u4e3a \\((i - 1) / 2\\) \uff08\u5411\u4e0b\u6574\u9664\uff09\u3002\u5f53\u7d22\u5f15\u8d8a\u754c\u65f6\uff0c\u4ee3\u8868\u7a7a\u7ed3\u70b9\u6216\u7ed3\u70b9\u4e0d\u5b58\u5728\u3002

    Fig. \u5806\u7684\u8868\u793a\u4e0e\u5b58\u50a8

    \u6211\u4eec\u5c06\u7d22\u5f15\u6620\u5c04\u516c\u5f0f\u5c01\u88c5\u6210\u51fd\u6570\uff0c\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint left(int i) {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint right(int i) {\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nint parent(int i) {\nreturn (i - 1) / 2; // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.cpp
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint left(int i) {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint right(int i) {\nreturn 2 * i + 2;\n} /* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nint parent(int i) {\nreturn (i - 1) / 2; // \u5411\u4e0b\u53d6\u6574\n}\n
    my_heap.py
    def left(self, i: int) -> int:\n\"\"\" \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 \"\"\"\nreturn 2 * i + 1\ndef right(self, i: int) -> int:\n\"\"\" \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 \"\"\"\nreturn 2 * i + 2\ndef parent(self, i: int) -> int:\n\"\"\" \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 \"\"\"\nreturn (i - 1) // 2  # \u5411\u4e0b\u6574\u9664\n
    my_heap.go
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc (h *maxHeap) left(i int) int {\nreturn 2*i + 1\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc (h *maxHeap) right(i int) int {\nreturn 2*i + 2\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nfunc (h *maxHeap) parent(i int) int {\n// \u5411\u4e0b\u6574\u9664\nreturn (i - 1) / 2\n}\n
    my_heap.js
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\n#left(i) {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\n#right(i) {\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\n#parent(i) {\nreturn Math.floor((i - 1) / 2); // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.ts
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nleft(i: number): number {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nright(i: number): number {\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nparent(i: number): number {\nreturn Math.floor((i - 1) / 2); // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{left}\n[class]{maxHeap}-[func]{right}\n[class]{maxHeap}-[func]{parent}\n
    my_heap.cs
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint left(int i)\n{\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint right(int i)\n{\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nint parent(int i)\n{\nreturn (i - 1) / 2; // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.swift
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc left(i: Int) -> Int {\n2 * i + 1\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc right(i: Int) -> Int {\n2 * i + 2\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nfunc parent(i: Int) -> Int {\n(i - 1) / 2 // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.zig
    // \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15\nfn left(i: usize) usize {\nreturn 2 * i + 1;\n}\n// \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15\nfn right(i: usize) usize {\nreturn 2 * i + 2;\n}\n// \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15\nfn parent(i: usize) usize {\n// return (i - 1) / 2; // \u5411\u4e0b\u6574\u9664\nreturn @divFloor(i - 1, 2);\n}\n
    "},{"location":"chapter_heap/heap/#_2","title":"\u8bbf\u95ee\u5806\u9876\u5143\u7d20","text":"

    \u5806\u9876\u5143\u7d20\u662f\u4e8c\u53c9\u6811\u7684\u6839\u7ed3\u70b9\uff0c\u5373\u5217\u8868\u9996\u5143\u7d20\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nint peek() {\nreturn maxHeap.get(0);\n}\n
    my_heap.cpp
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nint peek() {\nreturn maxHeap[0];\n}\n
    my_heap.py
    def peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u5806\u9876\u5143\u7d20 \"\"\"\nreturn self.max_heap[0]\n
    my_heap.go
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nfunc (h *maxHeap) peek() any {\nreturn h.data[0]\n}\n
    my_heap.js
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\npeek() {\nreturn this.#maxHeap[0];\n}\n
    my_heap.ts
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\npeek(): number {\nreturn this.maxHeap[0];\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{peek}\n
    my_heap.cs
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nint peek()\n{\nreturn maxHeap[0];\n}\n
    my_heap.swift
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nfunc peek() -> Int {\nmaxHeap[0]\n}\n
    my_heap.zig
    // \u8bbf\u95ee\u5806\u9876\u5143\u7d20\nfn peek(self: *Self) T {\nreturn self.maxHeap.?.items[0];\n}  
    "},{"location":"chapter_heap/heap/#_3","title":"\u5143\u7d20\u5165\u5806","text":"

    \u7ed9\u5b9a\u5143\u7d20 val \uff0c\u6211\u4eec\u5148\u5c06\u5176\u6dfb\u52a0\u5230\u5806\u5e95\u3002\u6dfb\u52a0\u540e\uff0c\u7531\u4e8e val \u53ef\u80fd\u5927\u4e8e\u5806\u4e2d\u5176\u5b83\u5143\u7d20\uff0c\u6b64\u65f6\u5806\u7684\u6210\u7acb\u6761\u4ef6\u53ef\u80fd\u5df2\u7ecf\u88ab\u7834\u574f\uff0c\u56e0\u6b64\u9700\u8981\u4fee\u590d\u4ece\u63d2\u5165\u7ed3\u70b9\u5230\u6839\u7ed3\u70b9\u8fd9\u6761\u8def\u5f84\u4e0a\u7684\u5404\u4e2a\u7ed3\u70b9\uff0c\u8be5\u64cd\u4f5c\u88ab\u79f0\u4e3a\u300c\u5806\u5316 Heapify\u300d\u3002

    \u8003\u8651\u4ece\u5165\u5806\u7ed3\u70b9\u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u6267\u884c\u5806\u5316\u3002\u5177\u4f53\u5730\uff0c\u6bd4\u8f83\u63d2\u5165\u7ed3\u70b9\u4e0e\u5176\u7236\u7ed3\u70b9\u7684\u503c\uff0c\u82e5\u63d2\u5165\u7ed3\u70b9\u66f4\u5927\u5219\u5c06\u5b83\u4eec\u4ea4\u6362\uff1b\u5e76\u5faa\u73af\u4ee5\u4e0a\u64cd\u4f5c\uff0c\u4ece\u5e95\u81f3\u9876\u5730\u4fee\u590d\u5806\u4e2d\u7684\u5404\u4e2a\u7ed3\u70b9\uff1b\u76f4\u81f3\u8d8a\u8fc7\u6839\u7ed3\u70b9\u65f6\u7ed3\u675f\uff0c\u6216\u5f53\u9047\u5230\u65e0\u9700\u4ea4\u6362\u7684\u7ed3\u70b9\u65f6\u63d0\u524d\u7ed3\u675f\u3002

    <1><2><3><4><5><6>

    \u8bbe\u7ed3\u70b9\u603b\u6570\u4e3a \\(n\\) \uff0c\u5219\u6811\u7684\u9ad8\u5ea6\u4e3a \\(O(\\log n)\\) \uff0c\u6613\u5f97\u5806\u5316\u64cd\u4f5c\u7684\u5faa\u73af\u8f6e\u6570\u6700\u591a\u4e3a \\(O(\\log n)\\) \uff0c\u56e0\u800c\u5143\u7d20\u5165\u5806\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u5143\u7d20\u5165\u5806 */\nvoid push(int val) {\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.add(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nvoid siftUp(int i) {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nint p = parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || maxHeap.get(i) <= maxHeap.get(p))\nbreak;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.cpp
    /* \u5143\u7d20\u5165\u5806 */\nvoid push(int val) {\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.push_back(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nvoid siftUp(int i) {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nint p =  parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || maxHeap[i] <= maxHeap[p])\nbreak;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(maxHeap[i], maxHeap[p]);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.py
    def push(self, val: int):\n\"\"\" \u5143\u7d20\u5165\u5806 \"\"\"\n# \u6dfb\u52a0\u7ed3\u70b9\nself.max_heap.append(val)\n# \u4ece\u5e95\u81f3\u9876\u5806\u5316\nself.sift_up(self.size() - 1)\ndef sift_up(self, i: int):\n\"\"\" \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 \"\"\"\nwhile True:\n# \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\np = self.parent(i)\n# \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif p < 0 or self.max_heap[i] <= self.max_heap[p]:\nbreak\n# \u4ea4\u6362\u4e24\u7ed3\u70b9\nself.swap(i, p)\n# \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p\n
    my_heap.go
    /* \u5143\u7d20\u5165\u5806 */\nfunc (h *maxHeap) push(val any) {\n// \u6dfb\u52a0\u7ed3\u70b9\nh.data = append(h.data, val)\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nh.siftUp(len(h.data) - 1)\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nfunc (h *maxHeap) siftUp(i int) {\nfor true {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\np := h.parent(i)\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif p < 0 || h.data[i].(int) <= h.data[p].(int) {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nh.swap(i, p)\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p\n}\n}\n
    my_heap.js
    /* \u5143\u7d20\u5165\u5806 */\npush(val) {\n// \u6dfb\u52a0\u7ed3\u70b9\nthis.#maxHeap.push(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nthis.#siftUp(this.size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\n#siftUp(i) {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nconst p = this.#parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || this.#maxHeap[i] <= this.#maxHeap[p]) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.#swap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.ts
    /* \u5143\u7d20\u5165\u5806 */\npush(val: number): void {\n// \u6dfb\u52a0\u7ed3\u70b9\nthis.maxHeap.push(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nthis.siftUp(this.size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nsiftUp(i: number): void {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nconst p = this.parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || this.maxHeap[i] <= this.maxHeap[p]) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.swap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{push}\n[class]{maxHeap}-[func]{siftUp}\n
    my_heap.cs
    /* \u5143\u7d20\u5165\u5806 */\nvoid push(int val)\n{\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.Add(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nvoid siftUp(int i)\n{\nwhile (true)\n{\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nint p = parent(i);\n// \u82e5\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\uff0c\u5219\u7ed3\u675f\u5806\u5316\nif (p < 0 || maxHeap[i] <= maxHeap[p])\nbreak;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.swift
    /* \u5143\u7d20\u5165\u5806 */\nfunc push(val: Int) {\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.append(val)\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(i: size() - 1)\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nfunc siftUp(i: Int) {\nvar i = i\nwhile true {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nlet p = parent(i: i)\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif p < 0 || maxHeap[i] <= maxHeap[p] {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i: i, j: p)\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p\n}\n}\n
    my_heap.zig
    // \u5143\u7d20\u5165\u5806\nfn push(self: *Self, val: T) !void {\n// \u6dfb\u52a0\u7ed3\u70b9\ntry self.maxHeap.?.append(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\ntry self.siftUp(self.size() - 1);\n}  // \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316\nfn siftUp(self: *Self, i_: usize) !void {\nvar i = i_;\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nvar p = parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 or self.maxHeap.?.items[i] <= self.maxHeap.?.items[p]) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\ntry self.swap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    "},{"location":"chapter_heap/heap/#_4","title":"\u5806\u9876\u5143\u7d20\u51fa\u5806","text":"

    \u5806\u9876\u5143\u7d20\u662f\u4e8c\u53c9\u6811\u6839\u7ed3\u70b9\uff0c\u5373\u5217\u8868\u9996\u5143\u7d20\uff0c\u5982\u679c\u6211\u4eec\u76f4\u63a5\u5c06\u9996\u5143\u7d20\u4ece\u5217\u8868\u4e2d\u5220\u9664\uff0c\u5219\u4e8c\u53c9\u6811\u4e2d\u6240\u6709\u7ed3\u70b9\u90fd\u4f1a\u968f\u4e4b\u53d1\u751f\u79fb\u4f4d\uff08\u7d22\u5f15\u53d1\u751f\u53d8\u5316\uff09\uff0c\u8fd9\u6837\u540e\u7eed\u4f7f\u7528\u5806\u5316\u4fee\u590d\u5c31\u5f88\u9ebb\u70e6\u4e86\u3002\u4e3a\u4e86\u5c3d\u91cf\u51cf\u5c11\u5143\u7d20\u7d22\u5f15\u53d8\u52a8\uff0c\u91c7\u53d6\u4ee5\u4e0b\u64cd\u4f5c\u6b65\u9aa4\uff1a

    1. \u4ea4\u6362\u5806\u9876\u5143\u7d20\u4e0e\u5806\u5e95\u5143\u7d20\uff08\u5373\u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff09\uff1b
    2. \u4ea4\u6362\u5b8c\u6210\u540e\uff0c\u5c06\u5806\u5e95\u4ece\u5217\u8868\u4e2d\u5220\u9664\uff08\u6ce8\u610f\uff0c\u56e0\u4e3a\u5df2\u7ecf\u4ea4\u6362\uff0c\u5b9e\u9645\u4e0a\u5220\u9664\u7684\u662f\u539f\u6765\u7684\u5806\u9876\u5143\u7d20\uff09\uff1b
    3. \u4ece\u6839\u7ed3\u70b9\u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u6267\u884c\u5806\u5316\uff1b

    \u987e\u540d\u601d\u4e49\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316\u7684\u64cd\u4f5c\u65b9\u5411\u4e0e\u4ece\u5e95\u81f3\u9876\u5806\u5316\u76f8\u53cd\uff0c\u6211\u4eec\u6bd4\u8f83\u6839\u7ed3\u70b9\u7684\u503c\u4e0e\u5176\u4e24\u4e2a\u5b50\u7ed3\u70b9\u7684\u503c\uff0c\u5c06\u6700\u5927\u7684\u5b50\u7ed3\u70b9\u4e0e\u6839\u7ed3\u70b9\u6267\u884c\u4ea4\u6362\uff0c\u5e76\u5faa\u73af\u4ee5\u4e0a\u64cd\u4f5c\uff0c\u76f4\u5230\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u65f6\u7ed3\u675f\uff0c\u6216\u5f53\u9047\u5230\u65e0\u9700\u4ea4\u6362\u7684\u7ed3\u70b9\u65f6\u63d0\u524d\u7ed3\u675f\u3002

    <1><2><3><4><5><6><7><8><9><10>

    \u4e0e\u5143\u7d20\u5165\u5806\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u5806\u9876\u5143\u7d20\u51fa\u5806\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u5143\u7d20\u51fa\u5806 */\nint poll() {\n// \u5224\u7a7a\u5904\u7406\nif (isEmpty())\nthrow new EmptyStackException();\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(0, size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nint val = maxHeap.remove(size() - 1);\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nvoid siftDown(int i) {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nint l = left(i), r = right(i), ma = i;\nif (l < size() && maxHeap.get(l) > maxHeap.get(ma))\nma = l;\nif (r < size() && maxHeap.get(r) > maxHeap.get(ma))\nma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.cpp
    /* \u5143\u7d20\u51fa\u5806 */\nvoid poll() {\n// \u5224\u7a7a\u5904\u7406\nif (empty()) {\nthrow out_of_range(\"\u5806\u4e3a\u7a7a\");\n}\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(maxHeap[0], maxHeap[size() - 1]);\n// \u5220\u9664\u7ed3\u70b9\nmaxHeap.pop_back();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(0);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nvoid siftDown(int i) {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nint l = left(i), r = right(i), ma = i;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (l < size() && maxHeap[l] > maxHeap[ma]) ma = l;\nif (r < size() && maxHeap[r] > maxHeap[ma])\nma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\nswap(maxHeap[i], maxHeap[ma]);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.py
    def poll(self) -> int:\n\"\"\" \u5143\u7d20\u51fa\u5806 \"\"\"\n# \u5224\u7a7a\u5904\u7406\nassert not self.is_empty()\n# \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nself.swap(0, self.size() - 1)\n# \u5220\u9664\u7ed3\u70b9\nval = self.max_heap.pop()\n# \u4ece\u9876\u81f3\u5e95\u5806\u5316\nself.sift_down(0)\n# \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val\ndef sift_down(self, i: int):\n\"\"\" \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 \"\"\"\nwhile True:\n# \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nl, r, ma = self.left(i), self.right(i), i\nif l < self.size() and self.max_heap[l] > self.max_heap[ma]:\nma = l\nif r < self.size() and self.max_heap[r] > self.max_heap[ma]:\nma = r\n# \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif ma == i:\nbreak\n# \u4ea4\u6362\u4e24\u7ed3\u70b9\nself.swap(i, ma)\n# \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma\n
    my_heap.go
    /* \u5143\u7d20\u51fa\u5806 */\nfunc (h *maxHeap) poll() any {\n// \u5224\u7a7a\u5904\u7406\nif h.isEmpty() {\nfmt.Println(\"error\")\nreturn nil\n}\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nh.swap(0, h.size()-1)\n// \u5220\u9664\u7ed3\u70b9\nval := h.data[len(h.data)-1]\nh.data = h.data[:len(h.data)-1]\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nh.siftDown(0)\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nfunc (h *maxHeap) siftDown(i int) {\nfor true {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a max\nl, r, max := h.left(i), h.right(i), i\nif l < h.size() && h.data[l].(int) > h.data[max].(int) {\nmax = l\n}\nif r < h.size() && h.data[r].(int) > h.data[max].(int) {\nmax = r\n}\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif max == i {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nh.swap(i, max)\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = max\n}\n}\n
    my_heap.js
    /* \u5143\u7d20\u51fa\u5806 */\npoll() {\n// \u5224\u7a7a\u5904\u7406\nif (this.isEmpty()) throw new Error(\"\u5806\u4e3a\u7a7a\");\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nthis.#swap(0, this.size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nconst val = this.#maxHeap.pop();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nthis.#siftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\n#siftDown(i) {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nconst l = this.#left(i),\nr = this.#right(i);\nlet ma = i;\nif (l < this.size() && this.#maxHeap[l] > this.#maxHeap[ma]) ma = l;\nif (r < this.size() && this.#maxHeap[r] > this.#maxHeap[ma]) ma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.#swap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.ts
    /* \u5143\u7d20\u51fa\u5806 */\npoll(): number {\n// \u5224\u7a7a\u5904\u7406\nif (this.isEmpty()) throw new RangeError('Heap is empty.');\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nthis.swap(0, this.size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nconst val = this.maxHeap.pop();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nthis.siftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nsiftDown(i: number): void {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nconst l = this.left(i),\nr = this.right(i);\nlet ma = i;\nif (l < this.size() && this.maxHeap[l] > this.maxHeap[ma]) ma = l;\nif (r < this.size() && this.maxHeap[r] > this.maxHeap[ma]) ma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.swap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{poll}\n[class]{maxHeap}-[func]{siftDown}\n
    my_heap.cs
    /* \u5143\u7d20\u51fa\u5806 */\nint poll()\n{\n// \u5224\u7a7a\u5904\u7406\nif (isEmpty())\nthrow new IndexOutOfRangeException();\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(0, size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nint val = maxHeap.Last();\nmaxHeap.RemoveAt(size() - 1);\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nvoid siftDown(int i)\n{\nwhile (true)\n{\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nint l = left(i), r = right(i), ma = i;\nif (l < size() && maxHeap[l] > maxHeap[ma])\nma = l;\nif (r < size() && maxHeap[r] > maxHeap[ma])\nma = r;\n// \u82e5\u201c\u7ed3\u70b9 i \u6700\u5927\u201d\u6216\u201c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u201d\uff0c\u5219\u7ed3\u675f\u5806\u5316\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.swift
    /* \u5143\u7d20\u51fa\u5806 */\nfunc poll() -> Int {\n// \u5224\u7a7a\u5904\u7406\nif isEmpty() {\nfatalError(\"\u5806\u4e3a\u7a7a\")\n}\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(i: 0, j: size() - 1)\n// \u5220\u9664\u7ed3\u70b9\nlet val = maxHeap.remove(at: size() - 1)\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(i: 0)\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nfunc siftDown(i: Int) {\nvar i = i\nwhile true {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nlet l = left(i: i)\nlet r = right(i: i)\nvar ma = i\nif l < size(), maxHeap[l] > maxHeap[ma] {\nma = l\n}\nif r < size(), maxHeap[r] > maxHeap[ma] {\nma = r\n}\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif ma == i {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i: i, j: ma)\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma\n}\n}\n
    my_heap.zig
    // \u5143\u7d20\u51fa\u5806\nfn poll(self: *Self) !T {\n// \u5224\u65ad\u5904\u7406\nif (self.isEmpty()) unreachable;\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\ntry self.swap(0, self.size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nvar val = self.maxHeap.?.pop();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\ntry self.siftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n} // \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316\nfn siftDown(self: *Self, i_: usize) !void {\nvar i = i_;\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nvar l = left(i);\nvar r = right(i);\nvar ma = i;\nif (l < self.size() and self.maxHeap.?.items[l] > self.maxHeap.?.items[ma]) ma = l;\nif (r < self.size() and self.maxHeap.?.items[r] > self.maxHeap.?.items[ma]) ma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\ntry self.swap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    "},{"location":"chapter_heap/heap/#814","title":"8.1.4. \u00a0 \u5806\u5e38\u89c1\u5e94\u7528","text":"
    • \u4f18\u5148\u961f\u5217\u3002\u5806\u5e38\u4f5c\u4e3a\u5b9e\u73b0\u4f18\u5148\u961f\u5217\u7684\u9996\u9009\u6570\u636e\u7ed3\u6784\uff0c\u5165\u961f\u548c\u51fa\u961f\u64cd\u4f5c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \uff0c\u5efa\u961f\u64cd\u4f5c\u4e3a \\(O(n)\\) \uff0c\u7686\u975e\u5e38\u9ad8\u6548\u3002
    • \u5806\u6392\u5e8f\u3002\u7ed9\u5b9a\u4e00\u7ec4\u6570\u636e\uff0c\u6211\u4eec\u4f7f\u7528\u5176\u5efa\u5806\uff0c\u5e76\u4f9d\u6b21\u5168\u90e8\u5f39\u51fa\uff0c\u5219\u53ef\u4ee5\u5f97\u5230\u6709\u5e8f\u7684\u5e8f\u5217\u3002\u5f53\u7136\uff0c\u5806\u6392\u5e8f\u4e00\u822c\u65e0\u9700\u5f39\u51fa\u5143\u7d20\uff0c\u4ec5\u9700\u6bcf\u8f6e\u5c06\u5806\u9876\u5143\u7d20\u4ea4\u6362\u81f3\u6570\u7ec4\u5c3e\u90e8\u5e76\u51cf\u5c0f\u5806\u7684\u957f\u5ea6\u5373\u53ef\u3002
    • \u83b7\u53d6\u6700\u5927\u7684 \\(k\\) \u4e2a\u5143\u7d20\u3002\u8fd9\u65e2\u662f\u4e00\u9053\u7ecf\u5178\u7b97\u6cd5\u9898\u76ee\uff0c\u4e5f\u662f\u4e00\u79cd\u5e38\u89c1\u5e94\u7528\uff0c\u4f8b\u5982\u9009\u53d6\u70ed\u5ea6\u524d 10 \u7684\u65b0\u95fb\u4f5c\u4e3a\u5fae\u535a\u70ed\u641c\uff0c\u9009\u53d6\u524d 10 \u9500\u91cf\u7684\u5546\u54c1\u7b49\u3002
    "},{"location":"chapter_heap/summary/","title":"8.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u5806\u662f\u4e00\u68f5\u9650\u5b9a\u6761\u4ef6\u4e0b\u7684\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u6839\u636e\u6210\u7acb\u6761\u4ef6\u53ef\u5206\u4e3a\u5927\u9876\u5806\u548c\u5c0f\u9876\u5806\u3002\u5927\uff08\u5c0f\uff09\u9876\u5806\u7684\u5806\u9876\u5143\u7d20\u6700\u5927\uff08\u5c0f\uff09\u3002
    • \u4f18\u5148\u961f\u5217\u5b9a\u4e49\u4e3a\u4e00\u79cd\u5177\u6709\u51fa\u961f\u4f18\u5148\u7ea7\u7684\u961f\u5217\u3002\u5806\u662f\u5b9e\u73b0\u4f18\u5148\u961f\u5217\u7684\u6700\u5e38\u7528\u6570\u636e\u7ed3\u6784\u3002
    • \u5806\u7684\u5e38\u7528\u64cd\u4f5c\u548c\u5bf9\u5e94\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a\u5143\u7d20\u5165\u5806 \\(O(\\log n)\\) \u3001\u5806\u9876\u5143\u7d20\u51fa\u5806 \\(O(\\log n)\\) \u3001\u8bbf\u95ee\u5806\u9876\u5143\u7d20 \\(O(1)\\) \u7b49\u3002
    • \u5b8c\u5168\u4e8c\u53c9\u6811\u975e\u5e38\u9002\u5408\u7528\u6570\u7ec4\u6765\u8868\u793a\uff0c\u56e0\u6b64\u6211\u4eec\u4e00\u822c\u7528\u6570\u7ec4\u6765\u5b58\u50a8\u5806\u3002
    • \u5806\u5316\u64cd\u4f5c\u7528\u4e8e\u4fee\u590d\u5806\u7684\u7279\u6027\uff0c\u5728\u5165\u5806\u548c\u51fa\u5806\u64cd\u4f5c\u4e2d\u90fd\u4f1a\u4f7f\u7528\u5230\u3002
    • \u8f93\u5165 \\(n\\) \u4e2a\u5143\u7d20\u5e76\u5efa\u5806\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u53ef\u4ee5\u88ab\u4f18\u5316\u81f3 \\(O(n)\\) \uff0c\u975e\u5e38\u9ad8\u6548\u3002
    "},{"location":"chapter_introduction/algorithms_are_everywhere/","title":"1.1. \u00a0 \u7b97\u6cd5\u65e0\u5904\u4e0d\u5728","text":"

    \u542c\u5230\u201c\u7b97\u6cd5\u201d\u8fd9\u4e2a\u8bcd\uff0c\u6211\u4eec\u4e00\u822c\u4f1a\u8054\u60f3\u5230\u6570\u5b66\u3002\u4f46\u5b9e\u9645\u4e0a\uff0c\u5927\u591a\u6570\u7b97\u6cd5\u5e76\u4e0d\u5305\u542b\u590d\u6742\u7684\u6570\u5b66\uff0c\u800c\u66f4\u50cf\u662f\u5728\u8003\u5bdf\u57fa\u672c\u903b\u8f91\uff0c\u800c\u8fd9\u4e9b\u903b\u8f91\u5728\u6211\u4eec\u65e5\u5e38\u751f\u6d3b\u4e2d\u5904\u5904\u53ef\u89c1\u3002

    \u5728\u6b63\u5f0f\u4ecb\u7ecd\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u60f3\u544a\u8bc9\u4f60\u4e00\u4ef6\u6709\u8da3\u7684\u4e8b\uff1a\u5176\u5b9e\uff0c\u4f60\u5728\u8fc7\u53bb\u5df2\u7ecf\u5b66\u4f1a\u4e86\u5f88\u591a\u7b97\u6cd5\uff0c\u5e76\u4e14\u5df2\u7ecf\u4e60\u60ef\u5c06\u5b83\u4eec\u5e94\u7528\u5230\u65e5\u5e38\u751f\u6d3b\u4e2d\u3002\u63a5\u4e0b\u6765\uff0c\u6211\u5c06\u4ecb\u7ecd\u4e24\u4e2a\u5177\u4f53\u4f8b\u5b50\u6765\u4f50\u8bc1\u3002

    \u4f8b\u4e00\uff1a\u62fc\u79ef\u6728\u3002\u4e00\u5957\u79ef\u6728\uff0c\u9664\u4e86\u6709\u8bb8\u591a\u90e8\u4ef6\u4e4b\u5916\uff0c\u8fd8\u4f1a\u9644\u9001\u8be6\u7ec6\u7684\u62fc\u88c5\u8bf4\u660e\u4e66\u3002\u6211\u4eec\u6309\u7167\u8bf4\u660e\u4e66\u4e0a\u4e00\u6b65\u6b65\u64cd\u4f5c\uff0c\u5373\u53ef\u62fc\u51fa\u590d\u6742\u7684\u79ef\u6728\u6a21\u578b\u3002

    \u5982\u679c\u4ece\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u89d2\u5ea6\u770b\uff0c\u5927\u5927\u5c0f\u5c0f\u7684\u300c\u79ef\u6728\u300d\u5c31\u662f\u6570\u636e\u7ed3\u6784\uff0c\u800c\u300c\u62fc\u88c5\u8bf4\u660e\u4e66\u300d\u4e0a\u7684\u4e00\u7cfb\u5217\u6b65\u9aa4\u5c31\u662f\u7b97\u6cd5\u3002

    \u4f8b\u4e8c\uff1a\u67e5\u5b57\u5178\u3002\u5728\u5b57\u5178\u4e2d\uff0c\u6bcf\u4e2a\u6c49\u5b57\u90fd\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684\u62fc\u97f3\uff0c\u800c\u5b57\u5178\u662f\u6309\u7167\u62fc\u97f3\u7684\u82f1\u6587\u5b57\u6bcd\u8868\u987a\u5e8f\u6392\u5217\u7684\u3002\u5047\u8bbe\u9700\u8981\u5728\u5b57\u5178\u4e2d\u67e5\u8be2\u4efb\u610f\u4e00\u4e2a\u62fc\u97f3\u9996\u5b57\u6bcd\u4e3a \\(r\\) \u7684\u5b57\uff0c\u4e00\u822c\u6211\u4eec\u4f1a\u8fd9\u6837\u505a\uff1a

    1. \u6253\u5f00\u5b57\u5178\u5927\u81f4\u4e00\u534a\u9875\u6570\u7684\u4f4d\u7f6e\uff0c\u67e5\u770b\u6b64\u9875\u7684\u9996\u5b57\u6bcd\u662f\u4ec0\u4e48\uff08\u5047\u8bbe\u4e3a \\(m\\) \uff09\uff1b
    2. \u7531\u4e8e\u5728\u82f1\u6587\u5b57\u6bcd\u8868\u4e2d \\(r\\) \u5728 \\(m\\) \u7684\u540e\u9762\uff0c\u56e0\u6b64\u5e94\u6392\u9664\u5b57\u5178\u524d\u534a\u90e8\u5206\uff0c\u67e5\u627e\u8303\u56f4\u4ec5\u5269\u540e\u534a\u90e8\u5206\uff1b
    3. \u5faa\u73af\u6267\u884c\u6b65\u9aa4 1-2 \uff0c\u76f4\u5230\u627e\u5230\u62fc\u97f3\u9996\u5b57\u6bcd\u4e3a \\(r\\) \u7684\u9875\u7801\u65f6\u7ec8\u6b62\u3002
    <1><2><3><4><5>

    \u67e5\u5b57\u5178\u8fd9\u4e2a\u5c0f\u5b66\u751f\u7684\u6807\u914d\u6280\u80fd\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5927\u540d\u9f0e\u9f0e\u7684\u300c\u4e8c\u5206\u67e5\u627e\u300d\u3002\u4ece\u6570\u636e\u7ed3\u6784\u89d2\u5ea6\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b57\u5178\u770b\u4f5c\u662f\u4e00\u4e2a\u5df2\u6392\u5e8f\u7684\u300c\u6570\u7ec4\u300d\uff1b\u800c\u4ece\u7b97\u6cd5\u89d2\u5ea6\uff0c\u6211\u4eec\u53ef\u5c06\u4e0a\u8ff0\u67e5\u5b57\u5178\u7684\u4e00\u7cfb\u5217\u6307\u4ee4\u770b\u4f5c\u662f\u300c\u4e8c\u5206\u67e5\u627e\u300d\u7b97\u6cd5\u3002

    \u5c0f\u5230\u70f9\u996a\u4e00\u9053\u83dc\u3001\u5927\u5230\u661f\u9645\u822a\u884c\uff0c\u51e0\u4e4e\u6240\u6709\u95ee\u9898\u7684\u89e3\u51b3\u90fd\u79bb\u4e0d\u5f00\u7b97\u6cd5\u3002\u8ba1\u7b97\u673a\u7684\u51fa\u73b0\uff0c\u4f7f\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u7f16\u7a0b\u5c06\u6570\u636e\u7ed3\u6784\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u6765\u8c03\u7528 CPU, GPU \u6267\u884c\u7b97\u6cd5\uff0c\u4ece\u800c\u5c06\u751f\u6d3b\u4e2d\u7684\u95ee\u9898\u642c\u8fd0\u5230\u8ba1\u7b97\u673a\u4e2d\uff0c\u66f4\u52a0\u9ad8\u6548\u5730\u89e3\u51b3\u5404\u5f0f\u5404\u6837\u7684\u590d\u6742\u95ee\u9898\u3002

    Tip

    \u8bfb\u5230\u8fd9\u91cc\uff0c\u5982\u679c\u4f60\u611f\u5230\u5bf9\u6570\u636e\u7ed3\u6784\u3001\u7b97\u6cd5\u3001\u6570\u7ec4\u3001\u4e8c\u5206\u67e5\u627e\u7b49\u6b64\u7c7b\u6982\u5ff5\u4e00\u77e5\u534a\u89e3\uff0c\u90a3\u4e48\u5c31\u592a\u597d\u4e86\uff01\u56e0\u4e3a\u8fd9\u6b63\u662f\u672c\u4e66\u5b58\u5728\u7684\u4ef7\u503c\uff0c\u63a5\u4e0b\u6765\uff0c\u672c\u4e66\u5c06\u4f1a\u4e00\u6b65\u6b65\u5730\u5f15\u5bfc\u4f60\u8fdb\u5165\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u77e5\u8bc6\u6bbf\u5802\u3002

    "},{"location":"chapter_introduction/summary/","title":"1.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u7b97\u6cd5\u5728\u751f\u6d3b\u4e2d\u968f\u5904\u53ef\u89c1\uff0c\u5e76\u4e0d\u9ad8\u6df1\u83ab\u6d4b\u3002\u6211\u4eec\u5df2\u7ecf\u4e0d\u77e5\u4e0d\u89c9\u5730\u5b66\u4e60\u5230\u8bb8\u591a\u201c\u7b97\u6cd5\u201d\uff0c\u7528\u4e8e\u89e3\u51b3\u751f\u6d3b\u4e2d\u5927\u5927\u5c0f\u5c0f\u7684\u95ee\u9898\u3002
    • \u201c\u67e5\u5b57\u5178\u201d\u7684\u539f\u7406\u548c\u4e8c\u5206\u67e5\u627e\u7b97\u6cd5\u4e00\u81f4\u3002\u4e8c\u5206\u4f53\u73b0\u5206\u800c\u6cbb\u4e4b\u7684\u91cd\u8981\u7b97\u6cd5\u601d\u60f3\u3002
    • \u7b97\u6cd5\u662f\u5728\u6709\u9650\u65f6\u95f4\u5185\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u7684\u4e00\u7ec4\u6307\u4ee4\u6216\u64cd\u4f5c\u6b65\u9aa4\uff0c\u6570\u636e\u7ed3\u6784\u662f\u5728\u8ba1\u7b97\u673a\u4e2d\u7ec4\u7ec7\u4e0e\u5b58\u50a8\u6570\u636e\u7684\u65b9\u5f0f\u3002
    • \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e24\u8005\u7d27\u5bc6\u8054\u7cfb\u3002\u6570\u636e\u7ed3\u6784\u662f\u7b97\u6cd5\u7684\u5e95\u5ea7\uff0c\u7b97\u6cd5\u662f\u53d1\u6325\u6570\u636e\u7ed3\u6784\u7684\u821e\u53f0\u3002
    • \u4e50\u9ad8\u79ef\u6728\u5bf9\u5e94\u6570\u636e\uff0c\u79ef\u6728\u5f62\u72b6\u548c\u8fde\u63a5\u5f62\u5f0f\u5bf9\u5e94\u6570\u636e\u7ed3\u6784\uff0c\u62fc\u88c5\u79ef\u6728\u7684\u6d41\u7a0b\u6b65\u9aa4\u5bf9\u5e94\u7b97\u6cd5\u3002
    "},{"location":"chapter_introduction/what_is_dsa/","title":"1.2. \u00a0 \u7b97\u6cd5\u662f\u4ec0\u4e48","text":""},{"location":"chapter_introduction/what_is_dsa/#121","title":"1.2.1. \u00a0 \u7b97\u6cd5\u5b9a\u4e49","text":"

    \u300c\u7b97\u6cd5 Algorithm\u300d\u662f\u5728\u6709\u9650\u65f6\u95f4\u5185\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u7684\u4e00\u7ec4\u6307\u4ee4\u6216\u64cd\u4f5c\u6b65\u9aa4\u3002\u7b97\u6cd5\u5177\u6709\u4ee5\u4e0b\u7279\u6027\uff1a

    • \u95ee\u9898\u662f\u660e\u786e\u7684\uff0c\u9700\u8981\u62e5\u6709\u660e\u786e\u7684\u8f93\u5165\u548c\u8f93\u51fa\u5b9a\u4e49\u3002
    • \u89e3\u5177\u6709\u786e\u5b9a\u6027\uff0c\u5373\u7ed9\u5b9a\u76f8\u540c\u8f93\u5165\u65f6\uff0c\u8f93\u51fa\u4e00\u5b9a\u76f8\u540c\u3002
    • \u5177\u6709\u53ef\u884c\u6027\uff0c\u53ef\u5728\u6709\u9650\u6b65\u9aa4\u3001\u6709\u9650\u65f6\u95f4\u3001\u6709\u9650\u5185\u5b58\u7a7a\u95f4\u4e0b\u5b8c\u6210\u3002
    • \u72ec\u7acb\u4e8e\u7f16\u7a0b\u8bed\u8a00\uff0c\u5373\u53ef\u7528\u591a\u79cd\u8bed\u8a00\u5b9e\u73b0\u3002
    "},{"location":"chapter_introduction/what_is_dsa/#122","title":"1.2.2. \u00a0 \u6570\u636e\u7ed3\u6784\u5b9a\u4e49","text":"

    \u300c\u6570\u636e\u7ed3\u6784 Data Structure\u300d\u662f\u5728\u8ba1\u7b97\u673a\u4e2d\u7ec4\u7ec7\u4e0e\u5b58\u50a8\u6570\u636e\u7684\u65b9\u5f0f\u3002\u4e3a\u4e86\u63d0\u9ad8\u6570\u636e\u5b58\u50a8\u548c\u64cd\u4f5c\u6027\u80fd\uff0c\u6570\u636e\u7ed3\u6784\u7684\u8bbe\u8ba1\u539f\u5219\u6709\uff1a

    • \u7a7a\u95f4\u5360\u7528\u5c3d\u53ef\u80fd\u5c0f\uff0c\u8282\u7701\u8ba1\u7b97\u673a\u5185\u5b58\u3002
    • \u6570\u636e\u64cd\u4f5c\u5c3d\u91cf\u5feb\uff0c\u5305\u62ec\u6570\u636e\u8bbf\u95ee\u3001\u6dfb\u52a0\u3001\u5220\u9664\u3001\u66f4\u65b0\u7b49\u3002
    • \u63d0\u4f9b\u7b80\u6d01\u7684\u6570\u636e\u8868\u793a\u548c\u903b\u8f91\u4fe1\u606f\uff0c\u4ee5\u4fbf\u7b97\u6cd5\u9ad8\u6548\u8fd0\u884c\u3002

    \u6570\u636e\u7ed3\u6784\u7684\u8bbe\u8ba1\u662f\u4e00\u4e2a\u5145\u6ee1\u6743\u8861\u7684\u8fc7\u7a0b\uff0c\u8fd9\u610f\u5473\u7740\u5982\u679c\u83b7\u5f97\u67d0\u65b9\u9762\u7684\u4f18\u52bf\uff0c\u5219\u5f80\u5f80\u9700\u8981\u5728\u53e6\u4e00\u65b9\u9762\u505a\u51fa\u59a5\u534f\u3002\u4f8b\u5982\uff0c\u94fe\u8868\u76f8\u5bf9\u4e8e\u6570\u7ec4\uff0c\u6570\u636e\u6dfb\u52a0\u5220\u9664\u64cd\u4f5c\u66f4\u52a0\u65b9\u4fbf\uff0c\u4f46\u727a\u7272\u4e86\u6570\u636e\u7684\u8bbf\u95ee\u901f\u5ea6\uff1b\u56fe\u76f8\u5bf9\u4e8e\u94fe\u8868\uff0c\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u903b\u8f91\u4fe1\u606f\uff0c\u4f46\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u3002

    "},{"location":"chapter_introduction/what_is_dsa/#123","title":"1.2.3. \u00a0 \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u5173\u7cfb","text":"

    \u300c\u6570\u636e\u7ed3\u6784\u300d\u4e0e\u300c\u7b97\u6cd5\u300d\u662f\u9ad8\u5ea6\u76f8\u5173\u3001\u7d27\u5bc6\u5d4c\u5408\u7684\uff0c\u4f53\u73b0\u5728\uff1a

    • \u6570\u636e\u7ed3\u6784\u662f\u7b97\u6cd5\u7684\u5e95\u5ea7\u3002\u6570\u636e\u7ed3\u6784\u4e3a\u7b97\u6cd5\u63d0\u4f9b\u7ed3\u6784\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u4ee5\u53ca\u64cd\u4f5c\u6570\u636e\u7684\u5bf9\u5e94\u65b9\u6cd5\u3002
    • \u7b97\u6cd5\u662f\u6570\u636e\u7ed3\u6784\u53d1\u6325\u7684\u821e\u53f0\u3002\u6570\u636e\u7ed3\u6784\u4ec5\u5b58\u50a8\u6570\u636e\u4fe1\u606f\uff0c\u7ed3\u5408\u7b97\u6cd5\u624d\u53ef\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u3002
    • \u7b97\u6cd5\u6709\u5bf9\u5e94\u6700\u4f18\u7684\u6570\u636e\u7ed3\u6784\u3002\u7ed9\u5b9a\u7b97\u6cd5\uff0c\u4e00\u822c\u53ef\u57fa\u4e8e\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u5b9e\u73b0\uff0c\u800c\u6700\u7ec8\u6267\u884c\u6548\u7387\u5f80\u5f80\u76f8\u5dee\u5f88\u5927\u3002

    Fig. \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u5173\u7cfb

    \u5982\u679c\u5c06\u300cLEGO \u4e50\u9ad8\u300d\u7c7b\u6bd4\u5230\u300c\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u300d\uff0c\u90a3\u4e48\u53ef\u4ee5\u5f97\u5230\u4e0b\u8868\u6240\u793a\u7684\u5bf9\u5e94\u5173\u7cfb\u3002

    \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5 LEGO \u4e50\u9ad8 \u8f93\u5165\u6570\u636e \u672a\u62fc\u88c5\u7684\u79ef\u6728 \u6570\u636e\u7ed3\u6784 \u79ef\u6728\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u5305\u62ec\u5f62\u72b6\u3001\u5927\u5c0f\u3001\u8fde\u63a5\u65b9\u5f0f\u7b49 \u7b97\u6cd5 \u628a\u79ef\u6728\u62fc\u6210\u76ee\u6807\u5f62\u6001\u7684\u4e00\u7cfb\u5217\u64cd\u4f5c\u6b65\u9aa4 \u8f93\u51fa\u6570\u636e \u79ef\u6728\u6a21\u578b

    \u7ea6\u5b9a\u4fd7\u6210\u7684\u7b80\u79f0

    \u5728\u5b9e\u9645\u8ba8\u8bba\u4e2d\uff0c\u6211\u4eec\u901a\u5e38\u4f1a\u5c06\u300c\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u300d\u76f4\u63a5\u7b80\u79f0\u4e3a\u300c\u7b97\u6cd5\u300d\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u719f\u79f0\u7684 LeetCode \u7b97\u6cd5\u9898\u76ee\uff0c\u5b9e\u9645\u4e0a\u540c\u65f6\u8003\u5bdf\u4e86\u6570\u636e\u7ed3\u6784\u548c\u7b97\u6cd5\u4e24\u90e8\u5206\u77e5\u8bc6\u3002

    "},{"location":"chapter_preface/about_the_book/","title":"0.1. \u00a0 \u5173\u4e8e\u672c\u4e66","text":"

    \u672c\u9879\u76ee\u81f4\u529b\u4e8e\u6784\u5efa\u4e00\u672c\u5f00\u6e90\u514d\u8d39\u3001\u65b0\u624b\u53cb\u597d\u7684\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5165\u95e8\u4e66\u3002

    • \u5168\u4e66\u91c7\u7528\u52a8\u753b\u56fe\u89e3\uff0c\u7ed3\u6784\u5316\u5730\u8bb2\u89e3\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u77e5\u8bc6\uff0c\u5185\u5bb9\u6e05\u6670\u6613\u61c2\u3001\u5b66\u4e60\u66f2\u7ebf\u5e73\u6ed1\uff1b
    • \u7b97\u6cd5\u6e90\u4ee3\u7801\u7686\u53ef\u4e00\u952e\u8fd0\u884c\uff0c\u652f\u6301 Java, C++, Python, Go, JS, TS, C#, Swift, Zig \u7b49\u8bed\u8a00\uff1b
    • \u9f13\u52b1\u8bfb\u8005\u5728\u7ae0\u8282\u8ba8\u8bba\u533a\u4e92\u5e2e\u4e92\u52a9\u3001\u5171\u540c\u8fdb\u6b65\uff0c\u63d0\u95ee\u4e0e\u8bc4\u8bba\u4e00\u822c\u80fd\u5728\u4e24\u65e5\u5185\u5f97\u5230\u56de\u590d\uff1b
    "},{"location":"chapter_preface/about_the_book/#011","title":"0.1.1. \u00a0 \u8bfb\u8005\u5bf9\u8c61","text":"

    \u5982\u679c\u60a8\u662f\u300c\u7b97\u6cd5\u521d\u5b66\u8005\u300d\uff0c\u5b8c\u5168\u6ca1\u6709\u63a5\u89e6\u8fc7\u7b97\u6cd5\uff0c\u6216\u8005\u5df2\u7ecf\u6709\u5c11\u91cf\u5237\u9898\uff0c\u5bf9\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u6709\u6726\u80e7\u7684\u7406\u89e3\uff0c\u5728\u4f1a\u4e0e\u4e0d\u4f1a\u4e4b\u95f4\u53cd\u590d\u6a2a\u8df3\uff0c\u90a3\u4e48\u8fd9\u672c\u4e66\u5c31\u662f\u4e3a\u4f60\u800c\u5199\uff01

    \u5982\u679c\u60a8\u662f\u300c\u7b97\u6cd5\u8001\u624b\u300d\uff0c\u5df2\u7ecf\u79ef\u7d2f\u4e00\u5b9a\u5237\u9898\u91cf\uff0c\u63a5\u89e6\u8fc7\u5927\u591a\u6570\u9898\u578b\uff0c\u90a3\u4e48\u672c\u4e66\u53ef\u4ee5\u5e2e\u52a9\u4f60\u56de\u987e\u4e0e\u68b3\u7406\u7b97\u6cd5\u77e5\u8bc6\u4f53\u7cfb\uff0c\u4ed3\u5e93\u6e90\u4ee3\u7801\u53ef\u4ee5\u88ab\u5f53\u4f5c\u201c\u5237\u9898\u5de5\u5177\u5e93\u201d\u6216\u201c\u7b97\u6cd5\u5b57\u5178\u201d\u6765\u4f7f\u7528\u3002

    \u5982\u679c\u60a8\u662f\u300c\u7b97\u6cd5\u5927\u4f6c\u300d\uff0c\u5e0c\u671b\u53ef\u4ee5\u5f97\u5230\u4f60\u7684\u5b9d\u8d35\u610f\u89c1\u5efa\u8bae\uff0c\u6216\u8005\u4e00\u8d77\u53c2\u4e0e\u521b\u4f5c\u3002

    \u524d\u7f6e\u6761\u4ef6

    \u60a8\u9700\u8981\u81f3\u5c11\u5177\u5907\u4efb\u4e00\u8bed\u8a00\u7684\u7f16\u7a0b\u57fa\u7840\uff0c\u80fd\u591f\u9605\u8bfb\u548c\u7f16\u5199\u7b80\u5355\u4ee3\u7801\u3002

    "},{"location":"chapter_preface/about_the_book/#012","title":"0.1.2. \u00a0 \u5185\u5bb9\u7ed3\u6784","text":"

    \u672c\u4e66\u4e3b\u8981\u5185\u5bb9\u6709\uff1a

    • \u590d\u6742\u5ea6\u5206\u6790\uff1a\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u8bc4\u4ef7\u7ef4\u5ea6\u3001\u7b97\u6cd5\u6548\u7387\u7684\u8bc4\u4f30\u65b9\u6cd5\u3002\u65f6\u95f4\u590d\u6742\u5ea6\u3001\u7a7a\u95f4\u590d\u6742\u5ea6\uff0c\u5305\u62ec\u63a8\u7b97\u65b9\u6cd5\u3001\u5e38\u89c1\u7c7b\u578b\u3001\u793a\u4f8b\u7b49\u3002
    • \u6570\u636e\u7ed3\u6784\uff1a\u5e38\u7528\u7684\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff0c\u6570\u636e\u5728\u5185\u5b58\u4e2d\u7684\u5b58\u50a8\u65b9\u5f0f\u3001\u6570\u636e\u7ed3\u6784\u5206\u7c7b\u65b9\u6cd5\u3002\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\u3001\u6563\u5217\u8868\u3001\u6811\u3001\u5806\u3001\u56fe\u7b49\u6570\u636e\u7ed3\u6784\uff0c\u5185\u5bb9\u5305\u62ec\u5b9a\u4e49\u3001\u4f18\u52a3\u52bf\u3001\u5e38\u7528\u64cd\u4f5c\u3001\u5e38\u89c1\u7c7b\u578b\u3001\u5178\u578b\u5e94\u7528\u3001\u5b9e\u73b0\u65b9\u6cd5\u7b49\u3002
    • \u7b97\u6cd5\uff1a\u67e5\u627e\u7b97\u6cd5\u3001\u6392\u5e8f\u7b97\u6cd5\u3001\u641c\u7d22\u4e0e\u56de\u6eaf\u3001\u52a8\u6001\u89c4\u5212\u3001\u5206\u6cbb\u7b97\u6cd5\uff0c\u5185\u5bb9\u5305\u62ec\u5b9a\u4e49\u3001\u4f7f\u7528\u573a\u666f\u3001\u4f18\u52a3\u52bf\u3001\u65f6\u7a7a\u6548\u7387\u3001\u5b9e\u73b0\u65b9\u6cd5\u3001\u793a\u4f8b\u9898\u76ee\u7b49\u3002

    Fig. Hello \u7b97\u6cd5\u5185\u5bb9\u7ed3\u6784

    "},{"location":"chapter_preface/about_the_book/#013","title":"0.1.3. \u00a0 \u81f4\u8c22","text":"

    \u672c\u4e66\u7684\u6210\u4e66\u8fc7\u7a0b\u4e2d\uff0c\u6211\u83b7\u5f97\u4e86\u8bb8\u591a\u4eba\u7684\u5e2e\u52a9\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a

    • \u611f\u8c22\u6211\u5728\u516c\u53f8\u7684\u5bfc\u5e08\u674e\u6c50\u535a\u58eb\uff0c\u5728\u4e00\u6b21\u7545\u8c08\u65f6\u60a8\u544a\u8bc9\u6211\u201c\u89c9\u5f97\u5e94\u8be5\u505a\u5c31\u53bb\u505a\u201d\uff0c\u575a\u5b9a\u4e86\u6211\u5199\u8fd9\u672c\u4e66\u7684\u51b3\u5fc3\u3002
    • \u611f\u8c22\u6211\u7684\u5973\u670b\u53cb\u6ce1\u6ce1\u62c5\u4efb\u672c\u4e66\u7684\u9996\u4f4d\u8bfb\u8005\uff0c\u4ece\u7b97\u6cd5\u5c0f\u767d\u7684\u89c6\u89d2\u63d0\u51fa\u4e86\u8bb8\u591a\u5efa\u8bae\uff0c\u4f7f\u8fd9\u672c\u4e66\u66f4\u52a0\u9002\u5408\u521d\u5b66\u8005\u6765\u9605\u8bfb\u3002
    • \u611f\u8c22\u817e\u5b9d\u3001\u7426\u5b9d\u3001\u98de\u5b9d\u4e3a\u672c\u4e66\u8d77\u4e86\u4e2a\u597d\u542c\u53c8\u6709\u6897\u540d\u5b57\uff0c\u76f4\u63a5\u5524\u8d77\u6211\u6700\u521d\u6572\u4e0b\u7b2c\u4e00\u884c\u4ee3\u7801 \"Hello World!\" \u7684\u56de\u5fc6\u3002
    • \u611f\u8c22\u82cf\u6f7c\u4e3a\u672c\u4e66\u8bbe\u8ba1\u4e86\u5c01\u9762\u548c LOGO \uff0c\u5728\u6211\u7684\u5f3a\u8feb\u75c7\u4e0b\u524d\u540e\u591a\u6b21\u5e2e\u5fd9\u4fee\u6539\uff0c\u8c22\u8c22\u4f60\u7684\u8010\u5fc3\u3002
    • \u611f\u8c22 @squidfunk \u7ed9\u51fa\u7684\u5199\u4f5c\u6392\u7248\u5efa\u8bae\uff0c\u4ee5\u53ca\u4f18\u79c0\u5f00\u6e90\u9879\u76ee Material-for-MkDocs \u3002

    \u672c\u4e66\u9f13\u52b1\u201c\u624b\u8111\u5e76\u7528\u201d\u7684\u5b66\u4e60\u65b9\u5f0f\uff0c\u5728\u8fd9\u70b9\u4e0a\u53d7\u5230\u4e86\u300a\u52a8\u624b\u5b66\u6df1\u5ea6\u5b66\u4e60\u300b\u5f88\u5927\u5f71\u54cd\uff0c\u4e5f\u5728\u6b64\u5411\u5404\u4f4d\u540c\u5b66\u5f3a\u70c8\u63a8\u8350\u8fd9\u672c\u8457\u4f5c\uff0c\u5305\u62ec\u4e2d\u6587\u7248\u3001\u82f1\u6587\u7248\u3001\u674e\u6c90\u8001\u5e08 bilibili \u4e3b\u9875\u3002

    \u5728\u5199\u4f5c\u8fc7\u7a0b\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8bb8\u591a\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u6559\u6750\u4e0e\u6587\u7ae0\uff0c\u8fd9\u4e9b\u8457\u4f5c\u4e3a\u672c\u4e66\u4f5c\u51fa\u4e86\u5f88\u597d\u7684\u699c\u6837\uff0c\u4fdd\u8bc1\u4e86\u672c\u4e66\u5185\u5bb9\u7684\u6b63\u786e\u6027\u4e0e\u8d28\u91cf\uff0c\u611f\u8c22\u5404\u4f4d\u8001\u5e08\u4e0e\u524d\u8f88\u7684\u7cbe\u5f69\u521b\u4f5c\uff01

    \u611f\u8c22\u7236\u6bcd\uff0c\u4f60\u4eec\u4e00\u8d2f\u7684\u652f\u6301\u4e0e\u9f13\u52b1\u7ed9\u4e86\u6211\u81ea\u7531\u5ea6\u6765\u505a\u8fd9\u4e9b\u6709\u8da3\u7684\u4e8b\u3002

    "},{"location":"chapter_preface/suggestions/","title":"0.2. \u00a0 \u5982\u4f55\u4f7f\u7528\u672c\u4e66","text":"

    \u5efa\u8bae\u901a\u8bfb\u672c\u8282\u5185\u5bb9\uff0c\u4ee5\u83b7\u53d6\u6700\u4f73\u9605\u8bfb\u4f53\u9a8c\u3002

    "},{"location":"chapter_preface/suggestions/#021","title":"0.2.1. \u00a0 \u7b97\u6cd5\u5b66\u4e60\u8def\u7ebf","text":"

    \u603b\u4f53\u4e0a\u770b\uff0c\u6211\u8ba4\u4e3a\u53ef\u5c06\u5b66\u4e60\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u8fc7\u7a0b\u5206\u4e3a\u4e09\u4e2a\u9636\u6bb5\u3002

    1. \u7b97\u6cd5\u5165\u95e8\u3002\u719f\u6089\u5404\u79cd\u6570\u636e\u7ed3\u6784\u7684\u7279\u70b9\u3001\u7528\u6cd5\uff0c\u5b66\u4e60\u5404\u79cd\u7b97\u6cd5\u7684\u539f\u7406\u3001\u6d41\u7a0b\u3001\u7528\u9014\u3001\u6548\u7387\u7b49\u3002
    2. \u5237\u7b97\u6cd5\u9898\u3002\u53ef\u4ee5\u5148\u4ece\u70ed\u95e8\u9898\u5355\u5f00\u5237\uff0c\u63a8\u8350\u5251\u6307 Offer\u3001LeetCode Hot 100\uff0c\u5148\u79ef\u7d2f\u81f3\u5c11 100 \u9053\u9898\u91cf\uff0c\u719f\u6089\u5927\u591a\u6570\u7684\u7b97\u6cd5\u95ee\u9898\u3002\u521a\u5f00\u59cb\u5237\u9898\u65f6\uff0c\u201c\u9057\u5fd8\u201d\u662f\u6700\u5927\u7684\u56f0\u6270\u70b9\uff0c\u4f46\u8fd9\u662f\u5f88\u6b63\u5e38\u7684\uff0c\u8bf7\u4e0d\u8981\u62c5\u5fc3\u3002\u5b66\u4e60\u4e2d\u6709\u4e00\u79cd\u6982\u5ff5\u53eb\u201c\u5468\u671f\u6027\u56de\u987e\u201d\uff0c\u540c\u4e00\u9053\u9898\u9694\u6bb5\u65f6\u95f4\u505a\u4e00\u6b21\uff0c\u5728\u91cd\u590d 3 \u8f6e\u4ee5\u4e0a\u540e\uff0c\u5f80\u5f80\u5c31\u80fd\u7262\u8bb0\u4e8e\u5fc3\u4e86\u3002
    3. \u642d\u5efa\u77e5\u8bc6\u4f53\u7cfb\u3002\u5728\u5b66\u4e60\u65b9\u9762\uff0c\u53ef\u4ee5\u9605\u8bfb\u7b97\u6cd5\u4e13\u680f\u6587\u7ae0\u3001\u89e3\u9898\u6846\u67b6\u3001\u7b97\u6cd5\u6559\u6750\uff0c\u4e0d\u65ad\u5730\u4e30\u5bcc\u77e5\u8bc6\u4f53\u7cfb\u3002\u5728\u5237\u9898\u65b9\u9762\uff0c\u53ef\u4ee5\u5f00\u59cb\u91c7\u7528\u8fdb\u9636\u5237\u9898\u65b9\u6848\uff0c\u4f8b\u5982\u6309\u4e13\u9898\u5206\u7c7b\u3001\u4e00\u9898\u591a\u89e3\u3001\u4e00\u89e3\u591a\u9898\u7b49\uff0c\u76f8\u5173\u5237\u9898\u5fc3\u5f97\u53ef\u4ee5\u5728\u5404\u4e2a\u793e\u533a\u4e2d\u627e\u5230\u3002

    \u4f5c\u4e3a\u4e00\u672c\u5165\u95e8\u6559\u7a0b\uff0c\u672c\u4e66\u5185\u5bb9\u4e3b\u8981\u5bf9\u5e94\u201c\u7b2c\u4e00\u9636\u6bb5\u201d\uff0c\u81f4\u529b\u4e8e\u5e2e\u52a9\u4f60\u66f4\u9ad8\u6548\u5730\u5f00\u5c55\u7b2c\u4e8c\u3001\u4e09\u9636\u6bb5\u7684\u5b66\u4e60\u3002

    Fig. \u7b97\u6cd5\u5b66\u4e60\u8def\u7ebf

    "},{"location":"chapter_preface/suggestions/#022","title":"0.2.2. \u00a0 \u884c\u6587\u98ce\u683c\u7ea6\u5b9a","text":"

    \u6807\u9898\u540e\u6807\u6ce8 * \u7684\u662f\u9009\u8bfb\u7ae0\u8282\uff0c\u5185\u5bb9\u76f8\u5bf9\u8f83\u96be\u3002\u5982\u679c\u4f60\u7684\u65f6\u95f4\u6709\u9650\uff0c\u5efa\u8bae\u53ef\u4ee5\u5148\u8df3\u8fc7\u3002

    \u6587\u7ae0\u4e2d\u7684\u91cd\u8981\u540d\u8bcd\u4f1a\u7528 \u300c\u62ec\u53f7\u300d \u6807\u6ce8\uff0c\u4f8b\u5982 \u300c\u6570\u7ec4 Array\u300d \u3002\u5efa\u8bae\u8bb0\u4f4f\u8fd9\u4e9b\u540d\u8bcd\uff0c\u5305\u62ec\u82f1\u6587\u7ffb\u8bd1\uff0c\u4ee5\u4fbf\u540e\u7eed\u9605\u8bfb\u6587\u732e\u65f6\u4f7f\u7528\u3002

    \u91cd\u70b9\u5185\u5bb9\u3001\u603b\u8d77\u53e5\u3001\u603b\u7ed3\u53e5\u4f1a\u88ab \u52a0\u7c97 \uff0c\u6b64\u7c7b\u6587\u5b57\u503c\u5f97\u7279\u522b\u5173\u6ce8\u3002

    \u4e13\u6709\u540d\u8bcd\u548c\u6709\u7279\u6307\u542b\u4e49\u7684\u8bcd\u53e5\u4f1a\u4f7f\u7528 \u201c\u53cc\u5f15\u53f7\u201d \u6807\u6ce8\uff0c\u4ee5\u907f\u514d\u6b67\u4e49\u3002

    \u672c\u4e66\u90e8\u5206\u653e\u5f03\u4e86\u7f16\u7a0b\u8bed\u8a00\u7684\u6ce8\u91ca\u89c4\u8303\uff0c\u4ee5\u6362\u53d6\u66f4\u52a0\u7d27\u51d1\u7684\u5185\u5bb9\u6392\u7248\u3002\u6ce8\u91ca\u4e3b\u8981\u5206\u4e3a\u4e09\u79cd\u7c7b\u578b\uff1a\u6807\u9898\u6ce8\u91ca\u3001\u5185\u5bb9\u6ce8\u91ca\u3001\u591a\u884c\u6ce8\u91ca\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    \"\"\" \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 \"\"\"\n# \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n\"\"\"\n\u591a\u884c\n\u6ce8\u91ca\n\"\"\"\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    // \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n// \u591a\u884c\n// \u6ce8\u91ca\n
    "},{"location":"chapter_preface/suggestions/#023","title":"0.2.3. \u00a0 \u5728\u52a8\u753b\u56fe\u89e3\u4e2d\u9ad8\u6548\u5b66\u4e60","text":"

    \u89c6\u9891\u548c\u56fe\u7247\u76f8\u6bd4\u4e8e\u6587\u5b57\u7684\u4fe1\u606f\u5bc6\u5ea6\u548c\u7ed3\u6784\u5316\u7a0b\u5ea6\u66f4\u9ad8\uff0c\u66f4\u5bb9\u6613\u7406\u89e3\u3002\u5728\u672c\u4e66\u4e2d\uff0c\u77e5\u8bc6\u91cd\u96be\u70b9\u4f1a\u4e3b\u8981\u4ee5\u52a8\u753b\u3001\u56fe\u89e3\u7684\u5f62\u5f0f\u5448\u73b0\uff0c\u800c\u6587\u5b57\u7684\u4f5c\u7528\u5219\u662f\u4f5c\u4e3a\u52a8\u753b\u548c\u56fe\u7684\u89e3\u91ca\u4e0e\u8865\u5145\u3002

    \u9605\u8bfb\u672c\u4e66\u65f6\uff0c\u82e5\u53d1\u73b0\u67d0\u6bb5\u5185\u5bb9\u63d0\u4f9b\u4e86\u52a8\u753b\u6216\u56fe\u89e3\uff0c\u5efa\u8bae\u4f60\u4ee5\u56fe\u4e3a\u4e3b\u7ebf\uff0c\u5c06\u6587\u5b57\u5185\u5bb9\uff08\u4e00\u822c\u5728\u56fe\u7684\u4e0a\u65b9\uff09\u5bf9\u9f50\u5230\u56fe\u4e2d\u5185\u5bb9\uff0c\u7efc\u5408\u6765\u7406\u89e3\u3002

    Fig. \u52a8\u753b\u56fe\u89e3\u793a\u4f8b

    "},{"location":"chapter_preface/suggestions/#024","title":"0.2.4. \u00a0 \u5728\u4ee3\u7801\u5b9e\u8df5\u4e2d\u52a0\u6df1\u7406\u89e3","text":"

    \u672c\u4e66\u7684\u914d\u5957\u4ee3\u7801\u6258\u7ba1\u5728GitHub \u4ed3\u5e93\uff0c\u6e90\u4ee3\u7801\u5305\u542b\u8be6\u7ec6\u6ce8\u91ca\uff0c\u914d\u6709\u6d4b\u8bd5\u6837\u4f8b\uff0c\u53ef\u4ee5\u76f4\u63a5\u8fd0\u884c\u3002

    • \u82e5\u5b66\u4e60\u65f6\u95f4\u7d27\u5f20\uff0c\u5efa\u8bae\u81f3\u5c11\u5c06\u6240\u6709\u4ee3\u7801\u901a\u8bfb\u5e76\u8fd0\u884c\u4e00\u904d\u3002
    • \u82e5\u65f6\u95f4\u5141\u8bb8\uff0c\u5f3a\u70c8\u5efa\u8bae\u5bf9\u7167\u7740\u4ee3\u7801\u81ea\u5df1\u6572\u4e00\u904d\u3002\u76f8\u6bd4\u4e8e\u8bfb\u4ee3\u7801\uff0c\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u5f80\u5f80\u80fd\u5e26\u6765\u65b0\u7684\u6536\u83b7\u3002

    Fig. \u8fd0\u884c\u4ee3\u7801\u793a\u4f8b

    \u7b2c\u4e00\u6b65\uff1a\u5b89\u88c5\u672c\u5730\u7f16\u7a0b\u73af\u5883\u3002\u53c2\u7167\u9644\u5f55\u6559\u7a0b\uff0c\u5982\u679c\u5df2\u6709\u53ef\u76f4\u63a5\u8df3\u8fc7\u3002

    \u7b2c\u4e8c\u6b65\uff1a\u4e0b\u8f7d\u4ee3\u7801\u4ed3\u3002\u5982\u679c\u5df2\u7ecf\u5b89\u88c5 Git \uff0c\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u514b\u9686\u4ee3\u7801\u4ed3\u3002

    git clone https://github.com/krahets/hello-algo.git\n

    \u5f53\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u70b9\u51fb\u201cDownload ZIP\u201d\u76f4\u63a5\u4e0b\u8f7d\u4ee3\u7801\u538b\u7f29\u5305\uff0c\u672c\u5730\u89e3\u538b\u5373\u53ef\u3002

    Fig. \u514b\u9686\u4ed3\u5e93\u4e0e\u4e0b\u8f7d\u4ee3\u7801

    \u7b2c\u4e09\u6b65\uff1a\u8fd0\u884c\u6e90\u4ee3\u7801\u3002\u82e5\u4ee3\u7801\u5757\u7684\u9876\u90e8\u6807\u6709\u6587\u4ef6\u540d\u79f0\uff0c\u5219\u53ef\u5728\u4ed3\u5e93 codes \u6587\u4ef6\u5939\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 \u6e90\u4ee3\u7801\u6587\u4ef6\u3002\u6e90\u4ee3\u7801\u6587\u4ef6\u53ef\u4ee5\u5e2e\u52a9\u4f60\u7701\u53bb\u4e0d\u5fc5\u8981\u7684\u8c03\u8bd5\u65f6\u95f4\uff0c\u5c06\u7cbe\u529b\u96c6\u4e2d\u5728\u5b66\u4e60\u5185\u5bb9\u4e0a\u3002

    Fig. \u4ee3\u7801\u5757\u4e0e\u5bf9\u5e94\u7684\u6e90\u4ee3\u7801\u6587\u4ef6

    "},{"location":"chapter_preface/suggestions/#025","title":"0.2.5. \u00a0 \u5728\u63d0\u95ee\u8ba8\u8bba\u4e2d\u5171\u540c\u6210\u957f","text":"

    \u9605\u8bfb\u672c\u4e66\u65f6\uff0c\u8bf7\u4e0d\u8981\u201c\u60ef\u7740\u201d\u90a3\u4e9b\u5f04\u4e0d\u660e\u767d\u7684\u77e5\u8bc6\u70b9\u3002\u6b22\u8fce\u5728\u8bc4\u8bba\u533a\u7559\u4e0b\u4f60\u7684\u95ee\u9898\uff0c\u5c0f\u4f19\u4f34\u4eec\u548c\u6211\u90fd\u4f1a\u7ed9\u4e88\u89e3\u7b54\uff0c\u60a8\u4e00\u822c 2 \u65e5\u5185\u4f1a\u5f97\u5230\u56de\u590d\u3002

    \u540c\u65f6\uff0c\u4e5f\u5e0c\u671b\u4f60\u53ef\u4ee5\u591a\u82b1\u65f6\u95f4\u901b\u901b\u8bc4\u8bba\u533a\u3002\u4e00\u65b9\u9762\uff0c\u53ef\u4ee5\u770b\u770b\u5927\u5bb6\u9047\u5230\u4e86\u4ec0\u4e48\u95ee\u9898\uff0c\u53cd\u8fc7\u6765\u67e5\u6f0f\u8865\u7f3a\uff0c\u8fd9\u5f80\u5f80\u53ef\u4ee5\u5f15\u8d77\u66f4\u52a0\u6df1\u5ea6\u7684\u601d\u8003\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u4e5f\u5e0c\u671b\u4f60\u53ef\u4ee5\u6177\u6168\u5730\u89e3\u7b54\u5c0f\u4f19\u4f34\u4eec\u7684\u95ee\u9898\u3001\u5206\u4eab\u81ea\u5df1\u7684\u89c1\u89e3\uff0c\u5927\u5bb6\u4e92\u76f8\u5b66\u4e60\u4e0e\u8fdb\u6b65\uff01

    Fig. \u8bc4\u8bba\u533a\u793a\u4f8b

    "},{"location":"chapter_preface/summary/","title":"0.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u672c\u4e66\u4e3b\u8981\u9762\u5411\u7b97\u6cd5\u521d\u5b66\u8005\u3002\u5bf9\u4e8e\u5df2\u7ecf\u6709\u4e00\u5b9a\u79ef\u7d2f\u7684\u540c\u5b66\uff0c\u8fd9\u672c\u4e66\u53ef\u4ee5\u5e2e\u52a9\u4f60\u7cfb\u7edf\u56de\u987e\u7b97\u6cd5\u77e5\u8bc6\uff0c\u6e90\u4ee3\u7801\u53ef\u88ab\u5f53\u4f5c\u201c\u5237\u9898\u5de5\u5177\u5e93\u201d\u6765\u4f7f\u7528\u3002
    • \u4e66\u4e2d\u5185\u5bb9\u4e3b\u8981\u5206\u4e3a\u590d\u6742\u5ea6\u5206\u6790\u3001\u6570\u636e\u7ed3\u6784\u3001\u7b97\u6cd5\u4e09\u90e8\u5206\uff0c\u8986\u76d6\u4e86\u8be5\u9886\u57df\u7684\u5927\u90e8\u5206\u4e3b\u9898\u3002
    • \u5bf9\u4e8e\u7b97\u6cd5\u5c0f\u767d\uff0c\u5728\u521d\u5b66\u9636\u6bb5\u9605\u8bfb\u4e00\u672c\u5165\u95e8\u4e66\u662f\u975e\u5e38\u6709\u5fc5\u8981\u7684\uff0c\u53ef\u4ee5\u5c11\u8d70\u8bb8\u591a\u5f2f\u8def\u3002
    • \u4e66\u5185\u7684\u52a8\u753b\u548c\u56fe\u89e3\u5f80\u5f80\u4ecb\u7ecd\u7684\u662f\u91cd\u70b9\u548c\u96be\u70b9\u77e5\u8bc6\uff0c\u5728\u9605\u8bfb\u65f6\u5e94\u8be5\u591a\u52a0\u5173\u6ce8\u3002
    • \u5b9e\u8df5\u662f\u5b66\u4e60\u7f16\u7a0b\u7684\u6700\u4f73\u65b9\u5f0f\uff0c\u5f3a\u70c8\u63a8\u8350\u8fd0\u884c\u6e90\u4ee3\u7801\uff0c\u52a8\u624b\u6572\u4ee3\u7801\u3002
    • \u672c\u4e66\u63d0\u4f9b\u4e86\u8ba8\u8bba\u533a\uff0c\u9047\u5230\u7591\u60d1\u53ef\u4ee5\u968f\u65f6\u63d0\u95ee\u3002
    "},{"location":"chapter_reference/","title":"\u53c2\u8003\u6587\u732e","text":"

    [1] Thomas H. Cormen, et al. Introduction to Algorithms (3rd Edition).

    [2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

    [3] \u4e25\u851a\u654f. \u6570\u636e\u7ed3\u6784\uff08 C \u8bed\u8a00\u7248\uff09.

    [4] \u9093\u4fca\u8f89. \u6570\u636e\u7ed3\u6784\uff08 C++ \u8bed\u8a00\u7248\uff0c\u7b2c\u4e09\u7248\uff09.

    [5] \u9a6c\u514b\u00b7\u827e\u4f26\u00b7\u7ef4\u65af\u8457\uff0c\u9648\u8d8a\u8bd1. \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5206\u6790\uff1aJava\u8bed\u8a00\u63cf\u8ff0\uff08\u7b2c\u4e09\u7248\uff09.

    [6] \u7a0b\u6770. \u5927\u8bdd\u6570\u636e\u7ed3\u6784.

    [7] \u738b\u4e89. \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e4b\u7f8e.

    [8] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

    [9] Aston Zhang, et al. Dive into Deep Learning.

    "},{"location":"chapter_searching/binary_search/","title":"10.2. \u00a0 \u4e8c\u5206\u67e5\u627e","text":"

    \u300c\u4e8c\u5206\u67e5\u627e Binary Search\u300d\u5229\u7528\u6570\u636e\u7684\u6709\u5e8f\u6027\uff0c\u901a\u8fc7\u6bcf\u8f6e\u7f29\u5c0f\u4e00\u534a\u641c\u7d22\u533a\u95f4\u6765\u67e5\u627e\u76ee\u6807\u5143\u7d20\u3002

    \u4f7f\u7528\u4e8c\u5206\u67e5\u627e\u6709\u4e24\u4e2a\u524d\u7f6e\u6761\u4ef6\uff1a

    • \u8981\u6c42\u8f93\u5165\u6570\u636e\u662f\u6709\u5e8f\u7684\uff0c\u8fd9\u6837\u624d\u80fd\u901a\u8fc7\u5224\u65ad\u5927\u5c0f\u5173\u7cfb\u6765\u6392\u9664\u4e00\u534a\u7684\u641c\u7d22\u533a\u95f4\uff1b
    • \u4e8c\u5206\u67e5\u627e\u4ec5\u9002\u7528\u4e8e\u6570\u7ec4\uff0c\u800c\u5728\u94fe\u8868\u4e2d\u4f7f\u7528\u6548\u7387\u5f88\u4f4e\uff0c\u56e0\u4e3a\u5176\u5728\u5faa\u73af\u4e2d\u9700\u8981\u8df3\u8dc3\u5f0f\uff08\u975e\u8fde\u7eed\u5730\uff09\u8bbf\u95ee\u5143\u7d20\u3002
    "},{"location":"chapter_searching/binary_search/#1021","title":"10.2.1. \u00a0 \u7b97\u6cd5\u5b9e\u73b0","text":"

    \u7ed9\u5b9a\u4e00\u4e2a\u957f\u5ea6\u4e3a \\(n\\) \u7684\u6392\u5e8f\u6570\u7ec4 nums \uff0c\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\u3002\u6570\u7ec4\u7684\u7d22\u5f15\u53d6\u503c\u8303\u56f4\u4e3a

    \\[ 0, 1, 2, \\cdots, n-1 \\]

    \u4f7f\u7528\u300c\u533a\u95f4\u300d\u6765\u8868\u793a\u8fd9\u4e2a\u53d6\u503c\u8303\u56f4\u7684\u65b9\u6cd5\u4e3b\u8981\u6709\u4e24\u79cd\uff1a

    1. \u53cc\u95ed\u533a\u95f4 \\([0, n-1]\\) \uff0c\u5373\u4e24\u4e2a\u8fb9\u754c\u90fd\u5305\u542b\u81ea\u8eab\uff1b\u6b64\u65b9\u6cd5\u4e0b\uff0c\u533a\u95f4 \\([0, 0]\\) \u4ecd\u5305\u542b\u4e00\u4e2a\u5143\u7d20\uff1b
    2. \u5de6\u95ed\u53f3\u5f00 \\([0, n)\\) \uff0c\u5373\u5de6\u8fb9\u754c\u5305\u542b\u81ea\u8eab\u3001\u53f3\u8fb9\u754c\u4e0d\u5305\u542b\u81ea\u8eab\uff1b\u6b64\u65b9\u6cd5\u4e0b\uff0c\u533a\u95f4 \\([0, 0)\\) \u4e3a\u7a7a\uff1b
    "},{"location":"chapter_searching/binary_search/#_1","title":"\u201c\u53cc\u95ed\u533a\u95f4\u201d\u5b9e\u73b0","text":"

    \u9996\u5148\uff0c\u6211\u4eec\u5148\u91c7\u7528\u201c\u53cc\u95ed\u533a\u95f4\u201d\u7684\u8868\u793a\uff0c\u5728\u6570\u7ec4 nums \u4e2d\u67e5\u627e\u76ee\u6807\u5143\u7d20 target \u7684\u5bf9\u5e94\u7d22\u5f15\u3002

    <1><2><3><4><5><6><7>

    \u4e8c\u5206\u67e5\u627e\u201c\u53cc\u95ed\u533a\u95f4\u201d\u8868\u793a\u4e0b\u7684\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search.java
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nint binarySearch(int[] nums, int target) {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nint i = 0, j = nums.length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.cpp
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nint binarySearch(vector<int>& nums, int target) {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nint i = 0, j = nums.size() - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.py
    def binary_search(nums: List[int], target: int) -> int:\n\"\"\" \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 \"\"\"\n# \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\ni, j = 0, len(nums) - 1\nwhile i <= j:\nm = (i + j) // 2        # \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target:    # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1\nelif nums[m] > target:  # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1\nelse:\nreturn m            # \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn -1                   # \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n
    binary_search.go
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunc binarySearch(nums []int, target int) int {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\ni, j := 0, len(nums)-1\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nfor i <= j {\nm := (i + j) / 2      // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.js
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunction binarySearch(nums, target) {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nlet i = 0, j = nums.length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nconst m = parseInt((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m \uff0c\u5728 JS \u4e2d\u9700\u4f7f\u7528 parseInt \u51fd\u6570\u53d6\u6574\nif (nums[m] < target)          // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target)     // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse\nreturn m;                  // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.ts
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunction binarySearch(nums: number[], target: number): number {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nlet i = 0, j = nums.length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nconst m = Math.floor((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target) {        // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\n} else if (nums[m] > target) { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\n} else {                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n}\nreturn -1; // \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n}\n
    binary_search.c
    [class]{}-[func]{binarySearch}\n
    binary_search.cs
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nint binarySearch(int[] nums, int target)\n{\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nint i = 0, j = nums.Length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j)\n{\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.swift
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunc binarySearch(nums: [Int], target: Int) -> Int {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nvar i = 0\nvar j = nums.count - 1\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile i <= j {\nlet m = (i + j) / 2 // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.zig
    // \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09\nfn binarySearch(comptime T: type, nums: std.ArrayList(T), target: T) T {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nvar i: usize = 0;\nvar j: usize = nums.items.len - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nvar m = (i + j) / 2;                    // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums.items[m] < target) {           // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\n} else if (nums.items[m] > target) {    // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\n} else {                                // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn @intCast(T, m);\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    "},{"location":"chapter_searching/binary_search/#_2","title":"\u201c\u5de6\u95ed\u53f3\u5f00\u201d\u5b9e\u73b0","text":"

    \u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528\u201c\u5de6\u95ed\u53f3\u5f00\u201d\u7684\u8868\u793a\u65b9\u6cd5\uff0c\u5199\u51fa\u76f8\u540c\u529f\u80fd\u7684\u4e8c\u5206\u67e5\u627e\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search.java
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nint binarySearch1(int[] nums, int target) {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nint i = 0, j = nums.length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.cpp
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nint binarySearch1(vector<int>& nums, int target) {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nint i = 0, j = nums.size();\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.py
    def binary_search1(nums: List[int], target: int) -> int:\n\"\"\" \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 \"\"\"\n# \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\ni, j = 0, len(nums)\n# \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile i < j:\nm = (i + j) // 2        # \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target:    # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1\nelif nums[m] > target:  # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m\nelse:                   # \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\nreturn -1                   # \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n
    binary_search.go
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunc binarySearch1(nums []int, target int) int {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\ni, j := 0, len(nums)\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nfor i < j {\nm := (i + j) / 2      // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.js
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunction binarySearch1(nums, target) {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nlet i = 0, j = nums.length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nconst m = parseInt((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m \uff0c\u5728 JS \u4e2d\u9700\u4f7f\u7528 parseInt \u51fd\u6570\u53d6\u6574\nif (nums[m] < target)          // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target)     // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                           // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.ts
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunction binarySearch1(nums: number[], target: number): number {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nlet i = 0, j = nums.length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nconst m = Math.floor((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target) {        // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\n} else if (nums[m] > target) { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\n} else {                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n}\nreturn -1; // \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n}\n
    binary_search.c
    [class]{}-[func]{binarySearch1}\n
    binary_search.cs
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nint binarySearch1(int[] nums, int target)\n{\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nint i = 0, j = nums.Length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j)\n{\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.swift
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunc binarySearch1(nums: [Int], target: Int) -> Int {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nvar i = 0\nvar j = nums.count\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile i < j {\nlet m = (i + j) / 2 // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.zig
    // \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09\nfn binarySearch1(comptime T: type, nums: std.ArrayList(T), target: T) T {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nvar i: usize = 0;\nvar j: usize = nums.items.len;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nvar m = (i + j) / 2;                    // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums.items[m] < target) {           // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\n} else if (nums.items[m] > target) {    // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\n} else {                                // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn @intCast(T, m);\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    "},{"location":"chapter_searching/binary_search/#_3","title":"\u4e24\u79cd\u8868\u793a\u5bf9\u6bd4","text":"

    \u5bf9\u6bd4\u4e0b\u6765\uff0c\u4e24\u79cd\u8868\u793a\u7684\u4ee3\u7801\u5199\u6cd5\u6709\u4ee5\u4e0b\u4e0d\u540c\u70b9\uff1a

    \u8868\u793a\u65b9\u6cd5 \u521d\u59cb\u5316\u6307\u9488 \u7f29\u5c0f\u533a\u95f4 \u5faa\u73af\u7ec8\u6b62\u6761\u4ef6 \u53cc\u95ed\u533a\u95f4 \\([0, n-1]\\) \\(i = 0\\) , \\(j = n-1\\) \\(i = m + 1\\) , \\(j = m - 1\\) \\(i > j\\) \u5de6\u95ed\u53f3\u5f00 \\([0, n)\\) \\(i = 0\\) , \\(j = n\\) \\(i = m + 1\\) , \\(j = m\\) \\(i = j\\)

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5728\u201c\u53cc\u95ed\u533a\u95f4\u201d\u8868\u793a\u4e2d\uff0c\u7531\u4e8e\u5bf9\u5de6\u53f3\u4e24\u8fb9\u754c\u7684\u5b9a\u4e49\u662f\u76f8\u540c\u7684\uff0c\u56e0\u6b64\u7f29\u5c0f\u533a\u95f4\u7684 \\(i\\) , \\(j\\) \u5904\u7406\u65b9\u6cd5\u4e5f\u662f\u5bf9\u79f0\u7684\uff0c\u8fd9\u6837\u66f4\u4e0d\u5bb9\u6613\u51fa\u9519\u3002\u7efc\u4e0a\u6240\u8ff0\uff0c\u5efa\u8bae\u4f60\u91c7\u7528\u201c\u53cc\u95ed\u533a\u95f4\u201d\u7684\u5199\u6cd5\u3002

    "},{"location":"chapter_searching/binary_search/#_4","title":"\u5927\u6570\u8d8a\u754c\u5904\u7406","text":"

    \u5f53\u6570\u7ec4\u957f\u5ea6\u5f88\u5927\u65f6\uff0c\u52a0\u6cd5 \\(i + j\\) \u7684\u7ed3\u679c\u6709\u53ef\u80fd\u4f1a\u8d85\u51fa int \u7c7b\u578b\u7684\u53d6\u503c\u8303\u56f4\u3002\u5728\u6b64\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u6362\u4e00\u79cd\u8ba1\u7b97\u4e2d\u70b9\u7684\u5199\u6cd5\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nint m = (i + j) / 2;\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nint m = i + (j - i) / 2;\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nint m = (i + j) / 2;\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nint m = i + (j - i) / 2;\n
    # Python \u4e2d\u7684\u6570\u5b57\u7406\u8bba\u4e0a\u53ef\u4ee5\u65e0\u9650\u5927\uff08\u53d6\u51b3\u4e8e\u5185\u5b58\u5927\u5c0f\uff09\n# \u56e0\u6b64\u65e0\u9700\u8003\u8651\u5927\u6570\u8d8a\u754c\u95ee\u9898\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nm := (i + j) / 2\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nm := i + (j - i) / 2\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nlet m = parseInt((i + j) / 2);\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nlet m = parseInt(i + (j - i) / 2);\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa Number \u7684\u53d6\u503c\u8303\u56f4\nlet m = Math.floor((i + j) / 2);\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nlet m = Math.floor(i + (j - i) / 2);\n
    \n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nint m = (i + j) / 2;\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nint m = i + (j - i) / 2;\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nlet m = (i + j) / 2\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nlet m = i + (j - 1) / 2\n
    \n
    "},{"location":"chapter_searching/binary_search/#1022","title":"10.2.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(\\log n)\\) \uff1a\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u957f\u5ea6\uff1b\u6bcf\u8f6e\u6392\u9664\u4e00\u534a\u7684\u533a\u95f4\uff0c\u56e0\u6b64\u5faa\u73af\u8f6e\u6570\u4e3a \\(\\log_2 n\\) \uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u6307\u9488 i , j \u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u7a7a\u95f4\u3002

    "},{"location":"chapter_searching/binary_search/#1023","title":"10.2.3. \u00a0 \u4f18\u70b9\u4e0e\u7f3a\u70b9","text":"

    \u4e8c\u5206\u67e5\u627e\u6548\u7387\u5f88\u9ad8\uff0c\u4f53\u73b0\u5728\uff1a

    • \u4e8c\u5206\u67e5\u627e\u65f6\u95f4\u590d\u6742\u5ea6\u4f4e\u3002\u5bf9\u6570\u9636\u5728\u6570\u636e\u91cf\u5f88\u5927\u65f6\u5177\u6709\u5de8\u5927\u4f18\u52bf\uff0c\u4f8b\u5982\uff0c\u5f53\u6570\u636e\u5927\u5c0f \\(n = 2^{20}\\) \u65f6\uff0c\u7ebf\u6027\u67e5\u627e\u9700\u8981 \\(2^{20} = 1048576\\) \u8f6e\u5faa\u73af\uff0c\u800c\u4e8c\u5206\u67e5\u627e\u4ec5\u9700\u8981 \\(\\log_2 2^{20} = 20\\) \u8f6e\u5faa\u73af\u3002
    • \u4e8c\u5206\u67e5\u627e\u4e0d\u9700\u8981\u989d\u5916\u7a7a\u95f4\u3002\u76f8\u5bf9\u4e8e\u501f\u52a9\u989d\u5916\u6570\u636e\u7ed3\u6784\u6765\u5b9e\u73b0\u67e5\u627e\u7684\u7b97\u6cd5\u6765\u8bf4\uff0c\u5176\u66f4\u52a0\u8282\u7ea6\u7a7a\u95f4\u4f7f\u7528\u3002

    \u4f46\u5e76\u4e0d\u610f\u5473\u7740\u6240\u6709\u60c5\u51b5\u4e0b\u90fd\u5e94\u4f7f\u7528\u4e8c\u5206\u67e5\u627e\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    • \u4e8c\u5206\u67e5\u627e\u4ec5\u9002\u7528\u4e8e\u6709\u5e8f\u6570\u636e\u3002\u5982\u679c\u8f93\u5165\u6570\u636e\u662f\u65e0\u5e8f\u7684\uff0c\u4e3a\u4e86\u4f7f\u7528\u4e8c\u5206\u67e5\u627e\u800c\u4e13\u95e8\u6267\u884c\u6570\u636e\u6392\u5e8f\uff0c\u90a3\u4e48\u662f\u5f97\u4e0d\u507f\u5931\u7684\uff0c\u56e0\u4e3a\u6392\u5e8f\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e00\u822c\u4e3a \\(O(n \\log n)\\) \uff0c\u6bd4\u7ebf\u6027\u67e5\u627e\u548c\u4e8c\u5206\u67e5\u627e\u90fd\u66f4\u5dee\u3002\u518d\u4f8b\u5982\uff0c\u5bf9\u4e8e\u9891\u7e41\u63d2\u5165\u5143\u7d20\u7684\u573a\u666f\uff0c\u4e3a\u4e86\u4fdd\u6301\u6570\u7ec4\u7684\u6709\u5e8f\u6027\uff0c\u9700\u8981\u5c06\u5143\u7d20\u63d2\u5165\u5230\u7279\u5b9a\u4f4d\u7f6e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff0c\u4e5f\u662f\u975e\u5e38\u6602\u8d35\u7684\u3002
    • \u4e8c\u5206\u67e5\u627e\u4ec5\u9002\u7528\u4e8e\u6570\u7ec4\u3002\u7531\u4e8e\u5728\u4e8c\u5206\u67e5\u627e\u4e2d\uff0c\u8bbf\u95ee\u7d22\u5f15\u662f \u201c\u975e\u8fde\u7eed\u201d \u7684\uff0c\u56e0\u6b64\u94fe\u8868\u6216\u8005\u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u90fd\u65e0\u6cd5\u4f7f\u7528\u3002
    • \u5728\u5c0f\u6570\u636e\u91cf\u4e0b\uff0c\u7ebf\u6027\u67e5\u627e\u7684\u6027\u80fd\u66f4\u597d\u3002\u5728\u7ebf\u6027\u67e5\u627e\u4e2d\uff0c\u6bcf\u8f6e\u53ea\u9700\u8981 1 \u6b21\u5224\u65ad\u64cd\u4f5c\uff1b\u800c\u5728\u4e8c\u5206\u67e5\u627e\u4e2d\uff0c\u9700\u8981 1 \u6b21\u52a0\u6cd5\u30011 \u6b21\u9664\u6cd5\u30011 ~ 3 \u6b21\u5224\u65ad\u64cd\u4f5c\u30011 \u6b21\u52a0\u6cd5\uff08\u51cf\u6cd5\uff09\uff0c\u5171 4 ~ 6 \u4e2a\u5355\u5143\u64cd\u4f5c\uff1b\u56e0\u6b64\uff0c\u5728\u6570\u636e\u91cf \\(n\\) \u8f83\u5c0f\u65f6\uff0c\u7ebf\u6027\u67e5\u627e\u53cd\u800c\u6bd4\u4e8c\u5206\u67e5\u627e\u66f4\u5feb\u3002
    "},{"location":"chapter_searching/hashing_search/","title":"10.3. \u00a0 \u54c8\u5e0c\u67e5\u627e","text":"

    Question

    \u5728\u6570\u636e\u91cf\u5f88\u5927\u65f6\uff0c\u300c\u7ebf\u6027\u67e5\u627e\u300d\u592a\u6162\uff1b\u800c\u300c\u4e8c\u5206\u67e5\u627e\u300d\u8981\u6c42\u6570\u636e\u5fc5\u987b\u662f\u6709\u5e8f\u7684\uff0c\u5e76\u4e14\u53ea\u80fd\u5728\u6570\u7ec4\u4e2d\u5e94\u7528\u3002\u90a3\u4e48\u662f\u5426\u6709\u65b9\u6cd5\u53ef\u4ee5\u540c\u65f6\u907f\u514d\u4e0a\u8ff0\u7f3a\u70b9\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6b64\u65b9\u6cd5\u88ab\u79f0\u4e3a\u300c\u54c8\u5e0c\u67e5\u627e\u300d\u3002

    \u300c\u54c8\u5e0c\u67e5\u627e Hash Searching\u300d\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868\u6765\u5b58\u50a8\u9700\u8981\u7684\u300c\u952e\u503c\u5bf9 Key Value Pair\u300d\uff0c\u6211\u4eec\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u4e0b\u5b9e\u73b0\u201c\u952e \\(\\rightarrow\\) \u503c\u201d\u6620\u5c04\u67e5\u627e\uff0c\u4f53\u73b0\u7740\u201c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u201d\u7684\u7b97\u6cd5\u601d\u60f3\u3002

    "},{"location":"chapter_searching/hashing_search/#1031","title":"10.3.1. \u00a0 \u7b97\u6cd5\u5b9e\u73b0","text":"

    \u5982\u679c\u6211\u4eec\u60f3\u8981\u7ed9\u5b9a\u6570\u7ec4\u4e2d\u7684\u4e00\u4e2a\u76ee\u6807\u5143\u7d20 target \uff0c\u83b7\u53d6\u8be5\u5143\u7d20\u7684\u7d22\u5f15\uff0c\u90a3\u4e48\u53ef\u4ee5\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868\u5b9e\u73b0\u67e5\u627e\u3002

    Fig. \u54c8\u5e0c\u67e5\u627e\u6570\u7ec4\u7d22\u5f15

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hashing_search.java
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint hashingSearchArray(Map<Integer, Integer> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.getOrDefault(target, -1);\n}\n
    hashing_search.cpp
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint hashingSearchArray(unordered_map<int, int> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nif (map.find(target) == map.end())\nreturn -1;\nreturn map[target];\n}\n
    hashing_search.py
    def hashing_search_array(mapp: Dict[int, int], target: int) -> int:\n\"\"\" \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 \"\"\"\n# \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n# \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn mapp.get(target, -1)\n
    hashing_search.go
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc hashingSearchArray(m map[int]int, target int) int {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nif index, ok := m[target]; ok {\nreturn index\n} else {\nreturn -1\n}\n}\n
    hashing_search.js
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunction hashingSearchArray(map, target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.has(target) ? map.get(target) : -1;\n}\n
    hashing_search.ts
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunction hashingSearchArray(map: Map<number, number>, target: number): number {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.has(target) ? (map.get(target) as number) : -1;\n}\n
    hashing_search.c
    [class]{}-[func]{hashingSearchArray}\n
    hashing_search.cs
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint hashingSearchArray(Dictionary<int, int> map, int target)\n{\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.GetValueOrDefault(target, -1);\n}\n
    hashing_search.swift
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc hashingSearchArray(map: [Int: Int], target: Int) -> Int {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map[target, default: -1]\n}\n
    hashing_search.zig
    // \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09\nfn hashingSearchArray(comptime T: type, map: std.AutoHashMap(T, T), target: T) T {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1   \nif (map.getKey(target) == null) return -1;\nreturn map.get(target).?;\n}\n

    \u518d\u6bd4\u5982\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8981\u7ed9\u5b9a\u4e00\u4e2a\u76ee\u6807\u7ed3\u70b9\u503c target \uff0c\u83b7\u53d6\u5bf9\u5e94\u7684\u94fe\u8868\u7ed3\u70b9\u5bf9\u8c61\uff0c\u90a3\u4e48\u4e5f\u53ef\u4ee5\u4f7f\u7528\u54c8\u5e0c\u67e5\u627e\u5b9e\u73b0\u3002

    Fig. \u54c8\u5e0c\u67e5\u627e\u94fe\u8868\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hashing_search.java
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode hashingSearchLinkedList(Map<Integer, ListNode> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.getOrDefault(target, null);\n}\n
    hashing_search.cpp
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode* hashingSearchLinkedList(unordered_map<int, ListNode*> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de nullptr\nif (map.find(target) == map.end())\nreturn nullptr;\nreturn map[target];\n}\n
    hashing_search.py
    def hashing_search_linkedlist(mapp: Dict[int, ListNode], target: int) -> Optional[ListNode]:\n\"\"\" \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 \"\"\"\n# \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n# \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de None\nreturn mapp.get(target, None)\n
    hashing_search.go
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc hashingSearchLinkedList(m map[int]*ListNode, target int) *ListNode {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de nil\nif node, ok := m[target]; ok {\nreturn node\n} else {\nreturn nil\n}\n}\n
    hashing_search.js
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunction hashingSearchLinkedList(map, target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.has(target) ? map.get(target) : null;\n}\n
    hashing_search.ts
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunction hashingSearchLinkedList(map: Map<number, ListNode>, target: number): ListNode | null {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.has(target) ? (map.get(target) as ListNode) : null;\n}\n
    hashing_search.c
    [class]{}-[func]{hashingSearchLinkedList}\n
    hashing_search.cs
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode? hashingSearchLinkedList(Dictionary<int, ListNode> map, int target)\n{\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.GetValueOrDefault(target);\n}\n
    hashing_search.swift
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc hashingSearchLinkedList(map: [Int: ListNode], target: Int) -> ListNode? {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map[target]\n}\n
    hashing_search.zig
    // \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09\nfn hashingSearchLinkedList(comptime T: type, map: std.AutoHashMap(T, *inc.ListNode(T)), target: T) ?*inc.ListNode(T) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null \nif (map.getKey(target) == null) return null;\nreturn map.get(target);\n}\n
    "},{"location":"chapter_searching/hashing_search/#1032","title":"10.3.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u54c8\u5e0c\u8868\u7684\u67e5\u627e\u64cd\u4f5c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u957f\u5ea6\u3002

    "},{"location":"chapter_searching/hashing_search/#1033","title":"10.3.3. \u00a0 \u4f18\u70b9\u4e0e\u7f3a\u70b9","text":"

    \u5728\u54c8\u5e0c\u8868\u4e2d\uff0c\u67e5\u627e\u3001\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u7684\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(1)\\) \uff0c\u8fd9\u610f\u5473\u7740\u65e0\u8bba\u662f\u9ad8\u9891\u589e\u5220\u8fd8\u662f\u9ad8\u9891\u67e5\u627e\u573a\u666f\uff0c\u54c8\u5e0c\u67e5\u627e\u7684\u6027\u80fd\u8868\u73b0\u90fd\u975e\u5e38\u597d\u3002\u5f53\u7136\uff0c\u4e00\u5207\u7684\u524d\u63d0\u662f\u4fdd\u8bc1\u54c8\u5e0c\u8868\u672a\u9000\u5316\u3002

    \u5373\u4f7f\u5982\u6b64\uff0c\u54c8\u5e0c\u67e5\u627e\u4ecd\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u9700\u8981\u6839\u636e\u60c5\u51b5\u7075\u6d3b\u9009\u62e9\u65b9\u6cd5\u3002

    • \u8f85\u52a9\u54c8\u5e0c\u8868 \u9700\u8981\u4f7f\u7528 \\(O(n)\\) \u7684\u989d\u5916\u7a7a\u95f4\uff0c\u610f\u5473\u7740\u9700\u8981\u9884\u7559\u66f4\u591a\u7684\u8ba1\u7b97\u673a\u5185\u5b58\uff1b
    • \u5efa\u7acb\u548c\u7ef4\u62a4\u54c8\u5e0c\u8868\u9700\u8981\u65f6\u95f4\uff0c\u56e0\u6b64\u54c8\u5e0c\u67e5\u627e \u4e0d\u9002\u5408\u9ad8\u9891\u589e\u5220\u3001\u4f4e\u9891\u67e5\u627e\u7684\u4f7f\u7528\u573a\u666f\uff1b
    • \u5f53\u54c8\u5e0c\u51b2\u7a81\u4e25\u91cd\u65f6\uff0c\u54c8\u5e0c\u8868\u4f1a\u9000\u5316\u4e3a\u94fe\u8868\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n)\\) \uff1b
    • \u5f53\u6570\u636e\u91cf\u5f88\u5c0f\u65f6\uff0c\u7ebf\u6027\u67e5\u627e\u6bd4\u54c8\u5e0c\u67e5\u627e\u66f4\u5feb\u3002\u8fd9\u662f\u56e0\u4e3a\u8ba1\u7b97\u54c8\u5e0c\u6620\u5c04\u51fd\u6570\u53ef\u80fd\u6bd4\u904d\u5386\u4e00\u4e2a\u5c0f\u578b\u6570\u7ec4\u66f4\u6162\uff1b
    "},{"location":"chapter_searching/linear_search/","title":"10.1. \u00a0 \u7ebf\u6027\u67e5\u627e","text":"

    \u300c\u7ebf\u6027\u67e5\u627e Linear Search\u300d\u662f\u4e00\u79cd\u6700\u57fa\u7840\u7684\u67e5\u627e\u65b9\u6cd5\uff0c\u5176\u4ece\u6570\u636e\u7ed3\u6784\u7684\u4e00\u7aef\u5f00\u59cb\uff0c\u4f9d\u6b21\u8bbf\u95ee\u6bcf\u4e2a\u5143\u7d20\uff0c\u76f4\u5230\u53e6\u4e00\u7aef\u540e\u505c\u6b62\u3002

    "},{"location":"chapter_searching/linear_search/#1011","title":"10.1.1. \u00a0 \u7b97\u6cd5\u5b9e\u73b0","text":"

    \u7ebf\u6027\u67e5\u627e\u5b9e\u8d28\u4e0a\u5c31\u662f\u904d\u5386\u6570\u636e\u7ed3\u6784 + \u5224\u65ad\u6761\u4ef6\u3002\u6bd4\u5982\uff0c\u6211\u4eec\u60f3\u8981\u5728\u6570\u7ec4 nums \u4e2d\u67e5\u627e\u76ee\u6807\u5143\u7d20 target \u7684\u5bf9\u5e94\u7d22\u5f15\uff0c\u90a3\u4e48\u53ef\u4ee5\u5728\u6570\u7ec4\u4e2d\u8fdb\u884c\u7ebf\u6027\u67e5\u627e\u3002

    Fig. \u5728\u6570\u7ec4\u4e2d\u7ebf\u6027\u67e5\u627e\u5143\u7d20

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linear_search.java
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint linearSearchArray(int[] nums, int target) {\n// \u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.length; i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] == target)\nreturn i;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.cpp
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint linearSearchArray(vector<int>& nums, int target) {\n// \u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.size(); i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] == target)\nreturn i;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.py
    def linear_search_array(nums: List[int], target: int) -> int:\n\"\"\" \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 \"\"\"\n# \u904d\u5386\u6570\u7ec4\nfor i in range(len(nums)):\nif nums[i] == target:  # \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn i\nreturn -1                  # \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n
    linear_search.go
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc linearSearchArray(nums []int, target int) int {\n// \u904d\u5386\u6570\u7ec4\nfor i := 0; i < len(nums); i++ {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif nums[i] == target {\nreturn i\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    linear_search.js
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunction linearSearchArray(nums, target) {\n// \u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] === target) {\nreturn i;\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1; }\n
    linear_search.ts
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09*/\nfunction linearSearchArray(nums: number[], target: number): number {\n// \u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] === target) {\nreturn i;\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.c
    [class]{}-[func]{linearSearchArray}\n
    linear_search.cs
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint linearSearchArray(int[] nums, int target)\n{\n// \u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.Length; i++)\n{\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] == target)\nreturn i;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.swift
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc linearSearchArray(nums: [Int], target: Int) -> Int {\n// \u904d\u5386\u6570\u7ec4\nfor i in nums.indices {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif nums[i] == target {\nreturn i\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    linear_search.zig
    // \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09\nfn linearSearchArray(comptime T: type, nums: std.ArrayList(T), target: T) T {\n// \u904d\u5386\u6570\u7ec4\nfor (nums.items) |num, i| {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c \u8fd4\u56de\u5176\u7d22\u5f15\nif (num == target) {\nreturn @intCast(T, i);\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n

    \u518d\u6bd4\u5982\uff0c\u6211\u4eec\u60f3\u8981\u5728\u7ed9\u5b9a\u4e00\u4e2a\u76ee\u6807\u7ed3\u70b9\u503c target \uff0c\u8fd4\u56de\u6b64\u7ed3\u70b9\u5bf9\u8c61\uff0c\u4e5f\u53ef\u4ee5\u5728\u94fe\u8868\u4e2d\u8fdb\u884c\u7ebf\u6027\u67e5\u627e\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linear_search.java
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode linearSearchLinkedList(ListNode head, int target) {\n// \u904d\u5386\u94fe\u8868\nwhile (head != null) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.val == target)\nreturn head;\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.cpp
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode* linearSearchLinkedList(ListNode* head, int target) {\n// \u904d\u5386\u94fe\u8868\nwhile (head != nullptr) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head->val == target)\nreturn head;\nhead = head->next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de nullptr\nreturn nullptr;\n}\n
    linear_search.py
    def linear_search_linkedlist(head: ListNode, target: int) -> Optional[ListNode]:\n\"\"\" \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 \"\"\"\n# \u904d\u5386\u94fe\u8868\nwhile head:\nif head.val == target: # \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nreturn head\nhead = head.next\nreturn None                # \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de None\n
    linear_search.go
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc linearSearchLinkedList(node *ListNode, target int) *ListNode {\n// \u904d\u5386\u94fe\u8868\nfor node != nil {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif node.Val == target {\nreturn node\n}\nnode = node.Next\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de nil\nreturn nil\n}\n
    linear_search.js
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09*/\nfunction linearSearchLinkedList(head, target) {\n// \u904d\u5386\u94fe\u8868\nwhile(head) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif(head.val === target) {\nreturn head;\n}\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.ts
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09*/\nfunction linearSearchLinkedList(head: ListNode | null, target: number): ListNode | null {\n// \u904d\u5386\u94fe\u8868\nwhile (head) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.val === target) {\nreturn head;\n}\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.c
    [class]{}-[func]{linearSearchLinkedList}\n
    linear_search.cs
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode? linearSearchLinkedList(ListNode head, int target)\n{\n// \u904d\u5386\u94fe\u8868\nwhile (head != null)\n{\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.val == target)\nreturn head;\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.swift
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc linearSearchLinkedList(head: ListNode?, target: Int) -> ListNode? {\nvar head = head\n// \u904d\u5386\u94fe\u8868\nwhile head != nil {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif head?.val == target {\nreturn head\n}\nhead = head?.next\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn nil\n}\n
    linear_search.zig
    // \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09\nfn linearSearchLinkedList(comptime T: type, node: ?*inc.ListNode(T), target: T) ?*inc.ListNode(T) {\nvar head = node;\n// \u904d\u5386\u94fe\u8868\nwhile (head != null) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.?.val == target) return head;\nhead = head.?.next;\n}\nreturn null;\n}\n
    "},{"location":"chapter_searching/linear_search/#1012","title":"10.1.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u957f\u5ea6\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u65e0\u9700\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\u3002

    "},{"location":"chapter_searching/linear_search/#1013","title":"10.1.3. \u00a0 \u4f18\u70b9\u4e0e\u7f3a\u70b9","text":"

    \u7ebf\u6027\u67e5\u627e\u7684\u901a\u7528\u6027\u6781\u4f73\u3002\u7531\u4e8e\u7ebf\u6027\u67e5\u627e\u662f\u4f9d\u6b21\u8bbf\u95ee\u5143\u7d20\u7684\uff0c\u5373\u6ca1\u6709\u8df3\u8dc3\u8bbf\u95ee\u5143\u7d20\uff0c\u56e0\u6b64\u6570\u7ec4\u6216\u94fe\u8868\u7686\u9002\u7528\u3002

    \u7ebf\u6027\u67e5\u627e\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u592a\u9ad8\u3002\u5728\u6570\u636e\u91cf \\(n\\) \u5f88\u5927\u65f6\uff0c\u67e5\u627e\u6548\u7387\u5f88\u4f4e\u3002

    "},{"location":"chapter_searching/summary/","title":"10.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u7ebf\u6027\u67e5\u627e\u662f\u4e00\u79cd\u6700\u57fa\u7840\u7684\u67e5\u627e\u65b9\u6cd5\uff0c\u901a\u8fc7\u904d\u5386\u6570\u636e\u7ed3\u6784 + \u5224\u65ad\u6761\u4ef6\u5b9e\u73b0\u67e5\u627e\u3002
    • \u4e8c\u5206\u67e5\u627e\u5229\u7528\u6570\u636e\u7684\u6709\u5e8f\u6027\uff0c\u901a\u8fc7\u5faa\u73af\u4e0d\u65ad\u7f29\u5c0f\u4e00\u534a\u641c\u7d22\u533a\u95f4\u6765\u5b9e\u73b0\u67e5\u627e\uff0c\u5176\u8981\u6c42\u8f93\u5165\u6570\u636e\u662f\u6709\u5e8f\u7684\uff0c\u5e76\u4e14\u4ec5\u9002\u7528\u4e8e\u6570\u7ec4\u6216\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u3002
    • \u54c8\u5e0c\u67e5\u627e\u501f\u52a9\u54c8\u5e0c\u8868\u6765\u5b9e\u73b0\u5e38\u6570\u9636\u65f6\u95f4\u590d\u6742\u5ea6\u7684\u67e5\u627e\u64cd\u4f5c\uff0c\u4f53\u73b0\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u7684\u7b97\u6cd5\u601d\u60f3\u3002
    • \u4e0b\u8868\u603b\u7ed3\u5bf9\u6bd4\u4e86\u67e5\u627e\u7b97\u6cd5\u7684\u5404\u79cd\u7279\u6027\u548c\u65f6\u95f4\u590d\u6742\u5ea6\u3002
    \u7ebf\u6027\u67e5\u627e \u4e8c\u5206\u67e5\u627e \u54c8\u5e0c\u67e5\u627e \u9002\u7528\u6570\u636e\u7ed3\u6784 \u6570\u7ec4\u3001\u94fe\u8868 \u6570\u7ec4 \u6570\u7ec4\u3001\u94fe\u8868 \u8f93\u5165\u6570\u636e\u8981\u6c42 \u65e0 \u6709\u5e8f \u65e0 \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u67e5\u627e / \u63d2\u5165 / \u5220\u9664 \\(O(n)\\) / \\(O(1)\\) / \\(O(n)\\) \\(O(\\log n)\\) / \\(O(n)\\) / \\(O(n)\\) \\(O(1)\\) / \\(O(1)\\) / \\(O(1)\\) \u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u67e5\u627e / \u63d2\u5165 / \u5220\u9664 \\(O(n)\\) / \\(O(1)\\) / \\(O(n)\\) \\(O(\\log n)\\) / \\(O(n)\\) / \\(O(n)\\) \\(O(n)\\) / \\(O(n)\\) / \\(O(n)\\) \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \\(O(1)\\) \\(O(n)\\)"},{"location":"chapter_sorting/bubble_sort/","title":"11.2. \u00a0 \u5192\u6ce1\u6392\u5e8f","text":"

    \u300c\u5192\u6ce1\u6392\u5e8f Bubble Sort\u300d\u662f\u4e00\u79cd\u6700\u57fa\u7840\u7684\u6392\u5e8f\u7b97\u6cd5\uff0c\u975e\u5e38\u9002\u5408\u4f5c\u4e3a\u7b2c\u4e00\u4e2a\u5b66\u4e60\u7684\u6392\u5e8f\u7b97\u6cd5\u3002\u987e\u540d\u601d\u4e49\uff0c\u300c\u5192\u6ce1\u300d\u662f\u8be5\u7b97\u6cd5\u7684\u6838\u5fc3\u64cd\u4f5c\u3002

    \u4e3a\u4ec0\u4e48\u53eb\u201c\u5192\u6ce1\u201d

    \u5728\u6c34\u4e2d\uff0c\u8d8a\u5927\u7684\u6ce1\u6ce1\u6d6e\u529b\u8d8a\u5927\uff0c\u6240\u4ee5\u6700\u5927\u7684\u6ce1\u6ce1\u4f1a\u6700\u5148\u6d6e\u5230\u6c34\u9762\u3002

    \u300c\u5192\u6ce1\u300d\u64cd\u4f5c\u5219\u662f\u5728\u6a21\u62df\u4e0a\u8ff0\u8fc7\u7a0b\uff0c\u5177\u4f53\u505a\u6cd5\u4e3a\uff1a\u4ece\u6570\u7ec4\u6700\u5de6\u7aef\u5f00\u59cb\u5411\u53f3\u904d\u5386\uff0c\u4f9d\u6b21\u5bf9\u6bd4\u76f8\u90bb\u5143\u7d20\u5927\u5c0f\uff0c\u82e5 \u5de6\u5143\u7d20 > \u53f3\u5143\u7d20 \u5219\u5c06\u5b83\u4fe9\u4ea4\u6362\uff0c\u6700\u7ec8\u53ef\u5c06\u6700\u5927\u5143\u7d20\u79fb\u52a8\u81f3\u6570\u7ec4\u6700\u53f3\u7aef\u3002

    \u5b8c\u6210\u6b64\u6b21\u5192\u6ce1\u64cd\u4f5c\u540e\uff0c\u6570\u7ec4\u6700\u5927\u5143\u7d20\u5df2\u5728\u6b63\u786e\u4f4d\u7f6e\uff0c\u63a5\u4e0b\u6765\u53ea\u9700\u6392\u5e8f\u5269\u4f59 \\(n - 1\\) \u4e2a\u5143\u7d20\u3002

    <1><2><3><4><5><6><7>

    "},{"location":"chapter_sorting/bubble_sort/#1121","title":"11.2.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"
    1. \u8bbe\u6570\u7ec4\u957f\u5ea6\u4e3a \\(n\\) \uff0c\u5b8c\u6210\u7b2c\u4e00\u8f6e\u300c\u5192\u6ce1\u300d\u540e\uff0c\u6570\u7ec4\u6700\u5927\u5143\u7d20\u5df2\u5728\u6b63\u786e\u4f4d\u7f6e\uff0c\u63a5\u4e0b\u6765\u53ea\u9700\u6392\u5e8f\u5269\u4f59 \\(n - 1\\) \u4e2a\u5143\u7d20\u3002
    2. \u540c\u7406\uff0c\u5bf9\u5269\u4f59 \\(n - 1\\) \u4e2a\u5143\u7d20\u6267\u884c\u300c\u5192\u6ce1\u300d\uff0c\u53ef\u5c06\u7b2c\u4e8c\u5927\u5143\u7d20\u4ea4\u6362\u81f3\u6b63\u786e\u4f4d\u7f6e\uff0c\u56e0\u800c\u5f85\u6392\u5e8f\u5143\u7d20\u53ea\u5269 \\(n - 2\\) \u4e2a\u3002
    3. \u4ee5\u6b64\u7c7b\u63a8\u2026\u2026 \u5faa\u73af \\(n - 1\\) \u8f6e\u300c\u5192\u6ce1\u300d\uff0c\u5373\u53ef\u5b8c\u6210\u6574\u4e2a\u6570\u7ec4\u7684\u6392\u5e8f\u3002

    Fig. \u5192\u6ce1\u6392\u5e8f\u6d41\u7a0b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig bubble_sort.java
    /* \u5192\u6ce1\u6392\u5e8f */\nvoid bubbleSort(int[] nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.cpp
    /* \u5192\u6ce1\u6392\u5e8f */\nvoid bubbleSort(vector<int>& nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.size() - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\n// \u8fd9\u91cc\u4f7f\u7528\u4e86 std::swap() \u51fd\u6570\nswap(nums[j], nums[j + 1]);\n}\n}\n}\n}\n
    bubble_sort.py
    def bubble_sort(nums: List[int]) -> None:\n\"\"\" \u5192\u6ce1\u6392\u5e8f \"\"\"\nn: int = len(nums)\n# \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in range(n - 1, 0, -1):\n# \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in range(i):\nif nums[j] > nums[j + 1]:\n# \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j + 1] = nums[j + 1], nums[j]\n
    bubble_sort.go
    /* \u5192\u6ce1\u6392\u5e8f */\nfunc bubbleSort(nums []int) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := len(nums) - 1; i > 0; i-- {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j := 0; j < i; j++ {\nif nums[j] > nums[j+1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j+1] = nums[j+1], nums[j]\n}\n}\n}\n}\n
    bubble_sort.js
    /* \u5192\u6ce1\u6392\u5e8f */\nfunction bubbleSort(nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.ts
    /* \u5192\u6ce1\u6392\u5e8f */\nfunction bubbleSort(nums: number[]): void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.c
    [class]{}-[func]{bubbleSort}\n
    bubble_sort.cs
    /* \u5192\u6ce1\u6392\u5e8f */\nvoid bubbleSort(int[] nums)\n{\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.Length - 1; i > 0; i--)\n{\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++)\n{\nif (nums[j] > nums[j + 1])\n{\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.swift
    /* \u5192\u6ce1\u6392\u5e8f */\nfunc bubbleSort(nums: inout [Int]) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in stride(from: nums.count - 1, to: 0, by: -1) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in stride(from: 0, to: i, by: 1) {\nif nums[j] > nums[j + 1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\n}\n}\n}\n}\n
    bubble_sort.zig
    // \u5192\u6ce1\u6392\u5e8f\nfn bubbleSort(nums: []i32) void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nvar i: usize = nums.len - 1;\nwhile (i > 0) : (i -= 1) {\nvar j: usize = 0;\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nwhile (j < i) : (j += 1) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nvar tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    "},{"location":"chapter_sorting/bubble_sort/#1122","title":"11.2.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n^2)\\) \uff1a\u5404\u8f6e\u300c\u5192\u6ce1\u300d\u904d\u5386\u7684\u6570\u7ec4\u957f\u5ea6\u4e3a \\(n - 1\\) , \\(n - 2\\) , \\(\\cdots\\) , \\(2\\) , \\(1\\) \u6b21\uff0c\u6c42\u548c\u4e3a \\(\\frac{(n - 1) n}{2}\\) \uff0c\u56e0\u6b64\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u6307\u9488 \\(i\\) , \\(j\\) \u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u7684\u989d\u5916\u7a7a\u95f4\u3002

    \u539f\u5730\u6392\u5e8f\uff1a\u6307\u9488\u53d8\u91cf\u4ec5\u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u989d\u5916\u7a7a\u95f4\u3002

    \u7a33\u5b9a\u6392\u5e8f\uff1a\u4e0d\u4ea4\u6362\u76f8\u7b49\u5143\u7d20\u3002

    \u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u5f15\u5165 flag \u4f18\u5316\u540e\uff08\u89c1\u4e0b\u6587\uff09\uff0c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \u3002

    "},{"location":"chapter_sorting/bubble_sort/#1123","title":"11.2.3. \u00a0 \u6548\u7387\u4f18\u5316","text":"

    \u6211\u4eec\u53d1\u73b0\uff0c\u82e5\u5728\u67d0\u8f6e\u300c\u5192\u6ce1\u300d\u4e2d\u672a\u6267\u884c\u4efb\u4f55\u4ea4\u6362\u64cd\u4f5c\uff0c\u5219\u8bf4\u660e\u6570\u7ec4\u5df2\u7ecf\u5b8c\u6210\u6392\u5e8f\uff0c\u53ef\u76f4\u63a5\u8fd4\u56de\u7ed3\u679c\u3002\u8003\u8651\u53ef\u4ee5\u589e\u52a0\u4e00\u4e2a\u6807\u5fd7\u4f4d flag \u6765\u76d1\u542c\u8be5\u60c5\u51b5\uff0c\u82e5\u51fa\u73b0\u5219\u76f4\u63a5\u8fd4\u56de\u3002

    \u4f18\u5316\u540e\uff0c\u5192\u6ce1\u6392\u5e8f\u7684\u6700\u5dee\u548c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u4ecd\u4e3a \\(O(n^2)\\) \uff1b\u800c\u5728\u8f93\u5165\u6570\u7ec4 \u5df2\u6392\u5e8f \u65f6\uff0c\u8fbe\u5230 \u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig bubble_sort.java
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nvoid bubbleSortWithFlag(int[] nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.length - 1; i > 0; i--) {\nboolean flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.cpp
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nvoid bubbleSortWithFlag(vector<int>& nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.size() - 1; i > 0; i--) {\nbool flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\n// \u8fd9\u91cc\u4f7f\u7528\u4e86 std::swap() \u51fd\u6570\nswap(nums[j], nums[j + 1]);\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.py
    def bubble_sort_with_flag(nums: List[int]) -> None:\n\"\"\" \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09 \"\"\"\nn: int = len(nums)\n# \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in range(n - 1, 0, -1):\nflag: bool = False  # \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n# \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in range(i):\nif nums[j] > nums[j + 1]:\n# \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j + 1] = nums[j + 1], nums[j]\nflag = True  # \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\nif not flag:\nbreak            # \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n
    bubble_sort.go
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunc bubbleSortWithFlag(nums []int) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := len(nums) - 1; i > 0; i-- {\nflag := false // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j := 0; j < i; j++ {\nif nums[j] > nums[j+1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j+1] = nums[j+1], nums[j]\nflag = true // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif flag == false { // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\nbreak\n}\n}\n}\n
    bubble_sort.js
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunction bubbleSortWithFlag(nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\nlet flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.ts
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunction bubbleSortWithFlag(nums: number[]): void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\nlet flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true; // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break; // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.c
    [class]{}-[func]{bubbleSortWithFlag}\n
    bubble_sort.cs
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nvoid bubbleSortWithFlag(int[] nums)\n{\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.Length - 1; i > 0; i--)\n{\nbool flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++)\n{\nif (nums[j] > nums[j + 1])\n{\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.swift
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunc bubbleSortWithFlag(nums: inout [Int]) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in stride(from: nums.count - 1, to: 0, by: -1) {\nvar flag = false // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\nfor j in stride(from: 0, to: i, by: 1) {\nif nums[j] > nums[j + 1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\nflag = true // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif !flag { // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\nbreak\n}\n}\n}\n
    bubble_sort.zig
    // \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09\nfn bubbleSortWithFlag(nums: []i32) void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nvar i: usize = nums.len - 1;\nwhile (i > 0) : (i -= 1) {\nvar flag = false;   // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\nvar j: usize = 0;\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nwhile (j < i) : (j += 1) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nvar tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;\n}\n}\nif (!flag) break;   // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    "},{"location":"chapter_sorting/insertion_sort/","title":"11.3. \u00a0 \u63d2\u5165\u6392\u5e8f","text":"

    \u300c\u63d2\u5165\u6392\u5e8f Insertion Sort\u300d\u662f\u4e00\u79cd\u57fa\u4e8e \u6570\u7ec4\u63d2\u5165\u64cd\u4f5c \u7684\u6392\u5e8f\u7b97\u6cd5\u3002

    \u300c\u63d2\u5165\u64cd\u4f5c\u300d\u539f\u7406\uff1a\u9009\u5b9a\u67d0\u4e2a\u5f85\u6392\u5e8f\u5143\u7d20\u4e3a\u57fa\u51c6\u6570 base\uff0c\u5c06 base \u4e0e\u5176\u5de6\u4fa7\u5df2\u6392\u5e8f\u533a\u95f4\u5143\u7d20\u4f9d\u6b21\u5bf9\u6bd4\u5927\u5c0f\uff0c\u5e76\u63d2\u5165\u5230\u6b63\u786e\u4f4d\u7f6e\u3002

    \u56de\u5fc6\u6570\u7ec4\u63d2\u5165\u64cd\u4f5c\uff0c\u6211\u4eec\u9700\u8981\u5c06\u4ece\u76ee\u6807\u7d22\u5f15\u5230 base \u4e4b\u95f4\u7684\u6240\u6709\u5143\u7d20\u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\uff0c\u7136\u540e\u518d\u5c06 base \u8d4b\u503c\u7ed9\u76ee\u6807\u7d22\u5f15\u3002

    Fig. \u5355\u6b21\u63d2\u5165\u64cd\u4f5c

    "},{"location":"chapter_sorting/insertion_sort/#1131","title":"11.3.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"
    1. \u7b2c 1 \u8f6e\u5148\u9009\u53d6\u6570\u7ec4\u7684 \u7b2c 2 \u4e2a\u5143\u7d20 \u4e3a base \uff0c\u6267\u884c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u540e\uff0c\u6570\u7ec4\u524d 2 \u4e2a\u5143\u7d20\u5df2\u5b8c\u6210\u6392\u5e8f\u3002
    2. \u7b2c 2 \u8f6e\u9009\u53d6 \u7b2c 3 \u4e2a\u5143\u7d20 \u4e3a base \uff0c\u6267\u884c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u540e\uff0c\u6570\u7ec4\u524d 3 \u4e2a\u5143\u7d20\u5df2\u5b8c\u6210\u6392\u5e8f\u3002
    3. \u4ee5\u6b64\u7c7b\u63a8\u2026\u2026\u6700\u540e\u4e00\u8f6e\u9009\u53d6 \u6570\u7ec4\u5c3e\u5143\u7d20 \u4e3a base \uff0c\u6267\u884c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u540e\uff0c\u6240\u6709\u5143\u7d20\u5df2\u5b8c\u6210\u6392\u5e8f\u3002

    Fig. \u63d2\u5165\u6392\u5e8f\u6d41\u7a0b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig insertion_sort.java
    /* \u63d2\u5165\u6392\u5e8f */\nvoid insertionSort(int[] nums) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (int i = 1; i < nums.length; i++) {\nint base = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.cpp
    /* \u63d2\u5165\u6392\u5e8f */\nvoid insertionSort(vector<int>& nums) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (int i = 1; i < nums.size(); i++) {\nint base = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.py
    def insertion_sort(nums: List[int]) -> None:\n\"\"\" \u63d2\u5165\u6392\u5e8f \"\"\"\n# \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]   \nfor i in range(1, len(nums)):\nbase: int = nums[i]\nj: int = i - 1\n# \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile j >= 0 and nums[j] > base:\nnums[j + 1] = nums[j]  # 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj -= 1\nnums[j + 1] = base         # 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n
    insertion_sort.go
    /* \u63d2\u5165\u6392\u5e8f */\nfunc insertionSort(nums []int) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := 1; i < len(nums); i++ {\nbase := nums[i]\nj := i - 1\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nfor j >= 0 && nums[j] > base {\nnums[j+1] = nums[j] // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--\n}\nnums[j+1] = base // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.js
    /* \u63d2\u5165\u6392\u5e8f */\nfunction insertionSort(nums) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (let i = 1; i < nums.length; i++) {\nlet base = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.ts
    /* \u63d2\u5165\u6392\u5e8f */\nfunction insertionSort(nums: number[]): void {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (let i = 1; i < nums.length; i++) {\nconst base = nums[i];\nlet j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j]; // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base; // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.c
    [class]{}-[func]{insertionSort}\n
    insertion_sort.cs
    /* \u63d2\u5165\u6392\u5e8f */\nvoid insertionSort(int[] nums)\n{\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (int i = 1; i < nums.Length; i++)\n{\nint bas = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > bas)\n{\nnums[j + 1] = nums[j]; // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = bas;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.swift
    /* \u63d2\u5165\u6392\u5e8f */\nfunc insertionSort(nums: inout [Int]) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor i in stride(from: 1, to: nums.count, by: 1) {\nlet base = nums[i]\nvar j = i - 1\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile j >= 0, nums[j] > base {\nnums[j + 1] = nums[j] // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj -= 1\n}\nnums[j + 1] = base // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.zig
    // \u63d2\u5165\u6392\u5e8f\nfn insertionSort(nums: []i32) void {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nvar i: usize = 1;\nwhile (i < nums.len) : (i += 1) {\nvar base = nums[i];\nvar j: usize = i;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 1 and nums[j - 1] > base) : (j -= 1) {\nnums[j] = nums[j - 1];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\n}\nnums[j] = base;             // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    "},{"location":"chapter_sorting/insertion_sort/#1132","title":"11.3.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n^2)\\) \uff1a\u6700\u5dee\u60c5\u51b5\u4e0b\uff0c\u5404\u8f6e\u63d2\u5165\u64cd\u4f5c\u5faa\u73af \\(n - 1\\) , \\(n-2\\) , \\(\\cdots\\) , \\(2\\) , \\(1\\) \u6b21\uff0c\u6c42\u548c\u4e3a \\(\\frac{(n - 1) n}{2}\\) \uff0c\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u6307\u9488 \\(i\\) , \\(j\\) \u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u7684\u989d\u5916\u7a7a\u95f4\u3002

    \u539f\u5730\u6392\u5e8f\uff1a\u6307\u9488\u53d8\u91cf\u4ec5\u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u989d\u5916\u7a7a\u95f4\u3002

    \u7a33\u5b9a\u6392\u5e8f\uff1a\u4e0d\u4ea4\u6362\u76f8\u7b49\u5143\u7d20\u3002

    \u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u6700\u4f73\u60c5\u51b5\u4e0b\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \u3002

    "},{"location":"chapter_sorting/insertion_sort/#1133-vs","title":"11.3.3. \u00a0 \u63d2\u5165\u6392\u5e8f vs \u5192\u6ce1\u6392\u5e8f","text":"

    Question

    \u867d\u7136\u300c\u63d2\u5165\u6392\u5e8f\u300d\u548c\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u4e3a \\(O(n^2)\\) \uff0c\u4f46\u5b9e\u9645\u8fd0\u884c\u901f\u5ea6\u5374\u6709\u5f88\u5927\u5dee\u522b\uff0c\u8fd9\u662f\u4e3a\u4ec0\u4e48\u5462\uff1f

    \u56de\u987e\u590d\u6742\u5ea6\u5206\u6790\uff0c\u4e24\u4e2a\u65b9\u6cd5\u7684\u5faa\u73af\u6b21\u6570\u90fd\u662f \\(\\frac{(n - 1) n}{2}\\) \u3002\u4f46\u4e0d\u540c\u7684\u662f\uff0c\u300c\u5192\u6ce1\u64cd\u4f5c\u300d\u662f\u5728\u505a \u5143\u7d20\u4ea4\u6362\uff0c\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u4e34\u65f6\u53d8\u91cf\u5b9e\u73b0\uff0c\u5171 3 \u4e2a\u5355\u5143\u64cd\u4f5c\uff1b\u800c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u662f\u5728\u505a \u8d4b\u503c\uff0c\u53ea\u9700 1 \u4e2a\u5355\u5143\u64cd\u4f5c\uff1b\u56e0\u6b64\uff0c\u53ef\u4ee5\u7c97\u7565\u4f30\u8ba1\u51fa\u5192\u6ce1\u6392\u5e8f\u7684\u8ba1\u7b97\u5f00\u9500\u7ea6\u4e3a\u63d2\u5165\u6392\u5e8f\u7684 3 \u500d\u3002

    \u63d2\u5165\u6392\u5e8f\u8fd0\u884c\u901f\u5ea6\u5feb\uff0c\u5e76\u4e14\u5177\u6709\u539f\u5730\u3001\u7a33\u5b9a\u3001\u81ea\u9002\u5e94\u7684\u4f18\u70b9\uff0c\u56e0\u6b64\u5f88\u53d7\u6b22\u8fce\u3002\u5b9e\u9645\u4e0a\uff0c\u5305\u62ec Java \u5728\u5185\u7684\u8bb8\u591a\u7f16\u7a0b\u8bed\u8a00\u7684\u6392\u5e8f\u5e93\u51fd\u6570\u7684\u5b9e\u73b0\u90fd\u7528\u5230\u4e86\u63d2\u5165\u6392\u5e8f\u3002\u5e93\u51fd\u6570\u7684\u5927\u81f4\u601d\u8def\uff1a

    • \u5bf9\u4e8e \u957f\u6570\u7ec4\uff0c\u91c7\u7528\u57fa\u4e8e\u5206\u6cbb\u7684\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u300c\u5feb\u901f\u6392\u5e8f\u300d\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n \\log n)\\) \uff1b
    • \u5bf9\u4e8e \u77ed\u6570\u7ec4\uff0c\u76f4\u63a5\u4f7f\u7528\u300c\u63d2\u5165\u6392\u5e8f\u300d\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \uff1b

    \u5728\u6570\u7ec4\u8f83\u77ed\u65f6\uff0c\u590d\u6742\u5ea6\u4e2d\u7684\u5e38\u6570\u9879\uff08\u5373\u6bcf\u8f6e\u4e2d\u7684\u5355\u5143\u64cd\u4f5c\u6570\u91cf\uff09\u5360\u4e3b\u5bfc\u4f5c\u7528\uff0c\u6b64\u65f6\u63d2\u5165\u6392\u5e8f\u8fd0\u884c\u5730\u66f4\u5feb\u3002\u8fd9\u4e2a\u73b0\u8c61\u4e0e\u300c\u7ebf\u6027\u67e5\u627e\u300d\u548c\u300c\u4e8c\u5206\u67e5\u627e\u300d\u7684\u60c5\u51b5\u7c7b\u4f3c\u3002

    "},{"location":"chapter_sorting/intro_to_sort/","title":"11.1. \u00a0 \u6392\u5e8f\u7b80\u4ecb","text":"

    \u300c\u6392\u5e8f\u7b97\u6cd5 Sorting Algorithm\u300d\u4f7f\u5f97\u5217\u8868\u4e2d\u7684\u6240\u6709\u5143\u7d20\u6309\u7167\u4ece\u5c0f\u5230\u5927\u7684\u987a\u5e8f\u6392\u5217\u3002

    • \u5f85\u6392\u5e8f\u7684\u5217\u8868\u7684 \u5143\u7d20\u7c7b\u578b \u53ef\u4ee5\u662f\u6574\u6570\u3001\u6d6e\u70b9\u6570\u3001\u5b57\u7b26\u3001\u6216\u5b57\u7b26\u4e32\uff1b
    • \u6392\u5e8f\u7b97\u6cd5\u53ef\u4ee5\u6839\u636e\u9700\u8981\u8bbe\u5b9a \u5224\u65ad\u89c4\u5219\uff0c\u4f8b\u5982\u6570\u5b57\u5927\u5c0f\u3001\u5b57\u7b26 ASCII \u7801\u987a\u5e8f\u3001\u81ea\u5b9a\u4e49\u89c4\u5219\uff1b

    Fig. \u6392\u5e8f\u4e2d\u4e0d\u540c\u7684\u5143\u7d20\u7c7b\u578b\u548c\u5224\u65ad\u89c4\u5219

    "},{"location":"chapter_sorting/intro_to_sort/#1111","title":"11.1.1. \u00a0 \u8bc4\u4ef7\u7ef4\u5ea6","text":"

    \u6392\u5e8f\u7b97\u6cd5\u4e3b\u8981\u53ef\u6839\u636e \u7a33\u5b9a\u6027 \u3001\u5c31\u5730\u6027 \u3001\u81ea\u9002\u5e94\u6027 \u3001\u6bd4\u8f83\u7c7b \u6765\u5206\u7c7b\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#_1","title":"\u7a33\u5b9a\u6027","text":"
    • \u300c\u7a33\u5b9a\u6392\u5e8f\u300d\u5728\u5b8c\u6210\u6392\u5e8f\u540e\uff0c\u4e0d\u6539\u53d8 \u76f8\u7b49\u5143\u7d20\u5728\u6570\u7ec4\u4e2d\u7684\u76f8\u5bf9\u987a\u5e8f\u3002
    • \u300c\u975e\u7a33\u5b9a\u6392\u5e8f\u300d\u5728\u5b8c\u6210\u6392\u5e8f\u540e\uff0c\u76f8\u7b49\u5143\u7d20\u5728\u6570\u7ec4\u4e2d\u7684\u76f8\u5bf9\u4f4d\u7f6e \u53ef\u80fd\u88ab\u6539\u53d8\u3002

    \u5047\u8bbe\u6211\u4eec\u6709\u4e00\u4e2a\u5b58\u50a8\u5b66\u751f\u4fe1\u606f\u7684\u8868\u683c\uff0c\u7b2c 1, 2 \u5217\u5206\u522b\u662f\u59d3\u540d\u548c\u5e74\u9f84\u3002\u90a3\u4e48\u5728\u4ee5\u4e0b\u793a\u4f8b\u4e2d\uff0c\u300c\u975e\u7a33\u5b9a\u6392\u5e8f\u300d\u4f1a\u5bfc\u81f4\u8f93\u5165\u6570\u636e\u7684\u6709\u5e8f\u6027\u4e22\u5931\u3002\u56e0\u6b64\u300c\u7a33\u5b9a\u6392\u5e8f\u300d\u662f\u5f88\u597d\u7684\u7279\u6027\uff0c\u5728\u591a\u7ea7\u6392\u5e8f\u4e2d\u662f\u5fc5\u987b\u7684\u3002

    # \u8f93\u5165\u6570\u636e\u662f\u6309\u7167\u59d3\u540d\u6392\u5e8f\u597d\u7684\n# (name, age)\n('A', 19)\n('B', 18)\n('C', 21)\n('D', 19)\n('E', 23)\n# \u5047\u8bbe\u4f7f\u7528\u975e\u7a33\u5b9a\u6392\u5e8f\u7b97\u6cd5\u6309\u5e74\u9f84\u6392\u5e8f\u5217\u8868\uff0c\n# \u7ed3\u679c\u4e2d ('D', 19) \u548c ('A', 19) \u7684\u76f8\u5bf9\u4f4d\u7f6e\u6539\u53d8\uff0c\n# \u8f93\u5165\u6570\u636e\u6309\u59d3\u540d\u6392\u5e8f\u7684\u6027\u8d28\u4e22\u5931\n('B', 18)\n('D', 19)\n('A', 19)\n('C', 21)\n('E', 23)\n
    "},{"location":"chapter_sorting/intro_to_sort/#_2","title":"\u5c31\u5730\u6027","text":"
    • \u300c\u539f\u5730\u6392\u5e8f\u300d\u65e0\u9700\u8f85\u52a9\u6570\u636e\uff0c\u4e0d\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff1b
    • \u300c\u975e\u539f\u5730\u6392\u5e8f\u300d\u9700\u8981\u501f\u52a9\u8f85\u52a9\u6570\u636e\uff0c\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff1b

    \u300c\u539f\u5730\u6392\u5e8f\u300d\u4e0d\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff0c\u53ef\u4ee5\u8282\u7ea6\u5185\u5b58\uff1b\u5e76\u4e14\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u7531\u4e8e\u6570\u636e\u64cd\u4f5c\u51cf\u5c11\uff0c\u539f\u5730\u6392\u5e8f\u7684\u8fd0\u884c\u6548\u7387\u4e5f\u66f4\u9ad8\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#_3","title":"\u81ea\u9002\u5e94\u6027","text":"
    • \u300c\u81ea\u9002\u5e94\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u53d7\u8f93\u5165\u6570\u636e\u5f71\u54cd\uff0c\u5373\u6700\u4f73 / \u6700\u5dee / \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u76f8\u7b49\u3002
    • \u300c\u975e\u81ea\u9002\u5e94\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u6052\u5b9a\uff0c\u4e0e\u8f93\u5165\u6570\u636e\u65e0\u5173\u3002

    \u6211\u4eec\u5e0c\u671b \u6700\u5dee = \u5e73\u5747\uff0c\u5373\u4e0d\u5e0c\u671b\u6392\u5e8f\u7b97\u6cd5\u7684\u8fd0\u884c\u6548\u7387\u5728\u67d0\u4e9b\u8f93\u5165\u6570\u636e\u4e0b\u53d1\u751f\u52a3\u5316\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#_4","title":"\u6bd4\u8f83\u7c7b","text":"
    • \u300c\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u57fa\u4e8e\u5143\u7d20\u4e4b\u95f4\u7684\u6bd4\u8f83\u7b97\u5b50\uff08\u5c0f\u4e8e\u3001\u76f8\u7b49\u3001\u5927\u4e8e\uff09\u6765\u51b3\u5b9a\u5143\u7d20\u7684\u76f8\u5bf9\u987a\u5e8f\u3002
    • \u300c\u975e\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u4e0d\u57fa\u4e8e\u5143\u7d20\u4e4b\u95f4\u7684\u6bd4\u8f83\u7b97\u5b50\u6765\u51b3\u5b9a\u5143\u7d20\u7684\u76f8\u5bf9\u987a\u5e8f\u3002

    \u300c\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u6700\u4f18\u4e3a \\(O(n \\log n)\\) \uff1b\u800c\u300c\u975e\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u53ef\u4ee5\u8fbe\u5230 \\(O(n)\\) \u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u4f46\u901a\u7528\u6027\u8f83\u5dee\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#1112","title":"11.1.2. \u00a0 \u7406\u60f3\u6392\u5e8f\u7b97\u6cd5","text":"
    • \u8fd0\u884c\u5feb\uff0c\u5373\u65f6\u95f4\u590d\u6742\u5ea6\u4f4e\uff1b
    • \u7a33\u5b9a\u6392\u5e8f\uff0c\u5373\u6392\u5e8f\u540e\u76f8\u7b49\u5143\u7d20\u7684\u76f8\u5bf9\u4f4d\u7f6e\u4e0d\u53d8\u5316\uff1b
    • \u539f\u5730\u6392\u5e8f\uff0c\u5373\u8fd0\u884c\u4e2d\u4e0d\u4f7f\u7528\u989d\u5916\u7684\u8f85\u52a9\u7a7a\u95f4\uff1b
    • \u6b63\u5411\u81ea\u9002\u5e94\u6027\uff0c\u5373\u7b97\u6cd5\u7684\u8fd0\u884c\u6548\u7387\u4e0d\u4f1a\u5728\u67d0\u4e9b\u8f93\u5165\u6570\u636e\u4e0b\u53d1\u751f\u52a3\u5316\uff1b

    \u7136\u800c\uff0c\u6ca1\u6709\u6392\u5e8f\u7b97\u6cd5\u540c\u65f6\u5177\u5907\u4ee5\u4e0a\u6240\u6709\u7279\u6027\u3002\u6392\u5e8f\u7b97\u6cd5\u7684\u9009\u578b\u4f7f\u7528\u53d6\u51b3\u4e8e\u5177\u4f53\u7684\u5217\u8868\u7c7b\u578b\u3001\u5217\u8868\u957f\u5ea6\u3001\u5143\u7d20\u5206\u5e03\u7b49\u56e0\u7d20\u3002

    "},{"location":"chapter_sorting/merge_sort/","title":"11.5. \u00a0 \u5f52\u5e76\u6392\u5e8f","text":"

    \u300c\u5f52\u5e76\u6392\u5e8f Merge Sort\u300d\u662f\u7b97\u6cd5\u4e2d\u201c\u5206\u6cbb\u601d\u60f3\u201d\u7684\u5178\u578b\u4f53\u73b0\uff0c\u5176\u6709\u300c\u5212\u5206\u300d\u548c\u300c\u5408\u5e76\u300d\u4e24\u4e2a\u9636\u6bb5\uff1a

    1. \u5212\u5206\u9636\u6bb5\uff1a\u901a\u8fc7\u9012\u5f52\u4e0d\u65ad \u5c06\u6570\u7ec4\u4ece\u4e2d\u70b9\u4f4d\u7f6e\u5212\u5206\u5f00\uff0c\u5c06\u957f\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898\u8f6c\u5316\u4e3a\u77ed\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898\uff1b
    2. \u5408\u5e76\u9636\u6bb5\uff1a\u5212\u5206\u5230\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\uff0c\u5f00\u59cb\u5411\u4e0a\u5408\u5e76\uff0c\u4e0d\u65ad\u5c06 \u5de6\u3001\u53f3\u4e24\u4e2a\u77ed\u6392\u5e8f\u6570\u7ec4 \u5408\u5e76\u4e3a \u4e00\u4e2a\u957f\u6392\u5e8f\u6570\u7ec4\uff0c\u76f4\u81f3\u5408\u5e76\u81f3\u539f\u6570\u7ec4\u65f6\u5b8c\u6210\u6392\u5e8f\uff1b

    Fig. \u5f52\u5e76\u6392\u5e8f\u7684\u5212\u5206\u4e0e\u5408\u5e76\u9636\u6bb5

    "},{"location":"chapter_sorting/merge_sort/#1151","title":"11.5.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"

    \u300c\u9012\u5f52\u5212\u5206\u300d \u4ece\u9876\u81f3\u5e95\u9012\u5f52\u5730 \u5c06\u6570\u7ec4\u4ece\u4e2d\u70b9\u5207\u4e3a\u4e24\u4e2a\u5b50\u6570\u7ec4\uff0c\u76f4\u81f3\u957f\u5ea6\u4e3a 1 \uff1b

    1. \u8ba1\u7b97\u6570\u7ec4\u4e2d\u70b9 mid \uff0c\u9012\u5f52\u5212\u5206\u5de6\u5b50\u6570\u7ec4\uff08\u533a\u95f4 [left, mid] \uff09\u548c\u53f3\u5b50\u6570\u7ec4\uff08\u533a\u95f4 [mid + 1, right] \uff09\uff1b
    2. \u9012\u5f52\u6267\u884c 1. \u6b65\u9aa4\uff0c\u76f4\u81f3\u5b50\u6570\u7ec4\u533a\u95f4\u957f\u5ea6\u4e3a 1 \u65f6\uff0c\u7ec8\u6b62\u9012\u5f52\u5212\u5206\uff1b

    \u300c\u56de\u6eaf\u5408\u5e76\u300d \u4ece\u5e95\u81f3\u9876\u5730\u5c06\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\u5408\u5e76\u4e3a\u4e00\u4e2a \u6709\u5e8f\u6570\u7ec4 \uff1b

    \u9700\u8981\u6ce8\u610f\uff0c\u7531\u4e8e\u4ece\u957f\u5ea6\u4e3a 1 \u7684\u5b50\u6570\u7ec4\u5f00\u59cb\u5408\u5e76\uff0c\u6240\u4ee5 \u6bcf\u4e2a\u5b50\u6570\u7ec4\u90fd\u662f\u6709\u5e8f\u7684\u3002\u56e0\u6b64\uff0c\u5408\u5e76\u4efb\u52a1\u672c\u8d28\u662f\u8981 \u5c06\u4e24\u4e2a\u6709\u5e8f\u5b50\u6570\u7ec4\u5408\u5e76\u4e3a\u4e00\u4e2a\u6709\u5e8f\u6570\u7ec4\u3002

    <1><2><3><4><5><6><7><8><9><10>

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5f52\u5e76\u6392\u5e8f\u7684\u9012\u5f52\u987a\u5e8f\u5c31\u662f\u4e8c\u53c9\u6811\u7684\u300c\u540e\u5e8f\u904d\u5386\u300d\u3002

    • \u540e\u5e8f\u904d\u5386\uff1a\u5148\u9012\u5f52\u5de6\u5b50\u6811\u3001\u518d\u9012\u5f52\u53f3\u5b50\u6811\u3001\u6700\u540e\u5904\u7406\u6839\u7ed3\u70b9\u3002
    • \u5f52\u5e76\u6392\u5e8f\uff1a\u5148\u9012\u5f52\u5de6\u5b50\u6811\u3001\u518d\u9012\u5f52\u53f3\u5b50\u6811\u3001\u6700\u540e\u5904\u7406\u5408\u5e76\u3002
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig merge_sort.java
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nvoid merge(int[] nums, int left, int mid, int right) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nint[] tmp = Arrays.copyOfRange(nums, left, right + 1);   // \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nint leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nint rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nint i = leftStart, j = rightStart;                // \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (int k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd)\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if (j > rightEnd || tmp[i] <= tmp[j])\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse\nnums[k] = tmp[j++];\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nvoid mergeSort(int[] nums, int left, int right) {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nint mid = (left + right) / 2;    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.cpp
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nvoid merge(vector<int>& nums, int left, int mid, int right) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nvector<int> tmp(nums.begin() + left, nums.begin() + right + 1);   // \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nint leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nint rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nint i = leftStart, j = rightStart;                // \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (int k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd)\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if (j > rightEnd || tmp[i] <= tmp[j])\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse\nnums[k] = tmp[j++];\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nvoid mergeSort(vector<int>& nums, int left, int right) {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nint mid = (left + right) / 2;    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.py
    def merge(nums: List[int], left: int, mid: int, right: int) -> None:\n\"\"\" \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 \"\"\"\n# \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n# \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\n# \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4 \u501f\u52a9 copy\u6a21\u5757\ntmp: List[int] = nums[left:right + 1].copy()\n# \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nleft_start: int = 0\nleft_end: int = mid - left\n# \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nright_start: int = mid + 1 - left\nright_end: int = right - left\n# i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\ni: int = left_start\nj: int = right_start\n# \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor k in range(left, right + 1):\n# \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif i > left_end:\nnums[k] = tmp[j]\nj += 1\n# \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelif j > right_end or tmp[i] <= tmp[j]:\nnums[k] = tmp[i]\ni += 1\n# \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse:\nnums[k] = tmp[j]\nj += 1\ndef merge_sort(nums: List[int], left: int, right: int) -> None:\n\"\"\" \u5f52\u5e76\u6392\u5e8f \"\"\"\n# \u7ec8\u6b62\u6761\u4ef6\nif left >= right:\nreturn                        # \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n# \u5212\u5206\u9636\u6bb5\nmid: int = (left + right) // 2    # \u8ba1\u7b97\u4e2d\u70b9\nmerge_sort(nums, left, mid)       # \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmerge_sort(nums, mid + 1, right)  # \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n# \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right)\n
    merge_sort.go
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunc merge(nums []int, left, mid, right int) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4 \u501f\u52a9 copy \u6a21\u5757\ntmp := make([]int, right-left+1)\nfor i := left; i <= right; i++ {\ntmp[i-left] = nums[i]\n}\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nleftStart, leftEnd := left-left, mid-left\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nrightStart, rightEnd := mid+1-left, right-left\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\ni, j := leftStart, rightStart\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor k := left; k <= right; k++ {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif i > leftEnd {\nnums[k] = tmp[j]\nj++\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if j > rightEnd || tmp[i] <= tmp[j] {\nnums[k] = tmp[i]\ni++\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j]\nj++\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunc mergeSort(nums []int, left, right int) {\n// \u7ec8\u6b62\u6761\u4ef6\nif left >= right {\nreturn\n}\n// \u5212\u5206\u9636\u6bb5\nmid := (left + right) / 2\nmergeSort(nums, left, mid)\nmergeSort(nums, mid+1, right)\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right)\n}\n
    merge_sort.js
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunction merge(nums, left, mid, right) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nlet tmp = nums.slice(left, right + 1);   // \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nlet leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nlet rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nlet i = leftStart, j = rightStart;                // \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (let k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd) {\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if (j > rightEnd || tmp[i] <= tmp[j]) {\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j++];\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunction mergeSort(nums, left, right) {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nlet mid = Math.floor((left + right) / 2);    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.ts
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunction merge(nums: number[], left: number, mid: number, right: number): void {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nlet tmp = nums.slice(left, right + 1);\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nlet i = leftStart, j = rightStart;\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (let k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd) {\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if (j > rightEnd || tmp[i] <= tmp[j]) {\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j++];\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunction mergeSort(nums: number[], left: number, right: number): void {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return; // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nlet mid = Math.floor((left + right) / 2); // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid); // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.c
    \n
    merge_sort.cs
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nvoid merge(int[] nums, int left, int mid, int right)\n{\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nint[] tmp = nums[left..(right + 1)];\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nint leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nint rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nint i = leftStart, j = rightStart;\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (int k = left; k <= right; k++)\n{\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd)\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if (j > rightEnd || tmp[i] <= tmp[j])\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse\nnums[k] = tmp[j++];\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nvoid mergeSort(int[] nums, int left, int right)\n{\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nint mid = (left + right) / 2;    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.swift
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunc merge(nums: inout [Int], left: Int, mid: Int, right: Int) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nlet tmp = Array(nums[left ..< (right + 1)])\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet leftStart = left - left\nlet leftEnd = mid - left\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet rightStart = mid + 1 - left\nlet rightEnd = right - left\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nvar i = leftStart\nvar j = rightStart\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor k in left ... right {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif i > leftEnd {\nnums[k] = tmp[j]\nj += 1\n}\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if j > rightEnd || tmp[i] <= tmp[j] {\nnums[k] = tmp[i]\ni += 1\n}\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse {\nnums[k] = tmp[j]\nj += 1\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunc mergeSort(nums: inout [Int], left: Int, right: Int) {\n// \u7ec8\u6b62\u6761\u4ef6\nif left >= right { // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nreturn\n}\n// \u5212\u5206\u9636\u6bb5\nlet mid = (left + right) / 2 // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums: &nums, left: left, right: mid) // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums: &nums, left: mid + 1, right: right) // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums: &nums, left: left, mid: mid, right: right)\n}\n
    merge_sort.zig
    // \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfn merge(nums: []i32, left: usize, mid: usize, right: usize) !void {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nvar mem_arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);\ndefer mem_arena.deinit();\nconst mem_allocator = mem_arena.allocator();\nvar tmp = try mem_allocator.alloc(i32, right + 1 - left);\nstd.mem.copy(i32, tmp, nums[left..right+1]);\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nvar leftStart = left - left;\nvar leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nvar rightStart = mid + 1 - left;\nvar rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nvar i = leftStart;\nvar j = rightStart;\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nvar k = left;\nwhile (k <= right) : (k += 1) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd) {\nnums[k] = tmp[j];\nj += 1;\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if  (j > rightEnd or tmp[i] <= tmp[j]) {\nnums[k] = tmp[i];\ni += 1;\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j];\nj += 1;\n}\n}\n}\n// \u5f52\u5e76\u6392\u5e8f\nfn mergeSort(nums: []i32, left: usize, right: usize) !void {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;              // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nvar mid = (left + right) / 2;           // \u8ba1\u7b97\u4e2d\u70b9\ntry mergeSort(nums, left, mid);         // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\ntry mergeSort(nums, mid + 1, right);    // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\ntry merge(nums, left, mid, right);\n}\n

    \u4e0b\u9762\u91cd\u70b9\u89e3\u91ca\u4e00\u4e0b\u5408\u5e76\u65b9\u6cd5 merge() \u7684\u6d41\u7a0b\uff1a

    1. \u521d\u59cb\u5316\u4e00\u4e2a\u8f85\u52a9\u6570\u7ec4 tmp \u6682\u5b58\u5f85\u5408\u5e76\u533a\u95f4 [left, right] \u5185\u7684\u5143\u7d20\uff0c\u540e\u7eed\u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u7684\u5143\u7d20\u6765\u5b9e\u73b0\u5408\u5e76\uff1b
    2. \u521d\u59cb\u5316\u6307\u9488 i , j , k \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u3001\u539f\u6570\u7ec4\u7684\u9996\u5143\u7d20\uff1b
    3. \u5faa\u73af\u5224\u65ad tmp[i] \u548c tmp[j] \u7684\u5927\u5c0f\uff0c\u5c06\u8f83\u5c0f\u7684\u5148\u8986\u76d6\u81f3 nums[k] \uff0c\u6307\u9488 i , j \u6839\u636e\u5224\u65ad\u7ed3\u679c\u4ea4\u66ff\u524d\u8fdb\uff08\u6307\u9488 k \u4e5f\u524d\u8fdb\uff09\uff0c\u76f4\u81f3\u4e24\u4e2a\u5b50\u6570\u7ec4\u90fd\u904d\u5386\u5b8c\uff0c\u5373\u53ef\u5b8c\u6210\u5408\u5e76\u3002

    \u5408\u5e76\u65b9\u6cd5 merge() \u4ee3\u7801\u4e2d\u7684\u4e3b\u8981\u96be\u70b9\uff1a

    • nums \u7684\u5f85\u5408\u5e76\u533a\u95f4\u4e3a [left, right] \uff0c\u800c\u56e0\u4e3a tmp \u53ea\u590d\u5236\u4e86 nums \u8be5\u533a\u95f4\u5143\u7d20\uff0c\u6240\u4ee5 tmp \u5bf9\u5e94\u533a\u95f4\u4e3a [0, right - left] \uff0c\u9700\u8981\u7279\u522b\u6ce8\u610f\u4ee3\u7801\u4e2d\u5404\u4e2a\u53d8\u91cf\u7684\u542b\u4e49\u3002
    • \u5224\u65ad tmp[i] \u548c tmp[j] \u7684\u5927\u5c0f\u7684\u64cd\u4f5c\u4e2d\uff0c\u8fd8 \u9700\u8003\u8651\u5f53\u5b50\u6570\u7ec4\u904d\u5386\u5b8c\u6210\u540e\u7684\u7d22\u5f15\u8d8a\u754c\u95ee\u9898\uff0c\u5373 i > leftEnd \u548c j > rightEnd \u7684\u60c5\u51b5\uff0c\u7d22\u5f15\u8d8a\u754c\u7684\u4f18\u5148\u7ea7\u662f\u6700\u9ad8\u7684\uff0c\u4f8b\u5982\u5982\u679c\u5de6\u5b50\u6570\u7ec4\u5df2\u7ecf\u88ab\u5408\u5e76\u5b8c\u4e86\uff0c\u90a3\u4e48\u4e0d\u7528\u7ee7\u7eed\u5224\u65ad\uff0c\u76f4\u63a5\u5408\u5e76\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u5373\u53ef\u3002
    "},{"location":"chapter_sorting/merge_sort/#1152","title":"11.5.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"
    • \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n \\log n)\\) \uff1a\u5212\u5206\u5f62\u6210\u9ad8\u5ea6\u4e3a \\(\\log n\\) \u7684\u9012\u5f52\u6811\uff0c\u6bcf\u5c42\u5408\u5e76\u7684\u603b\u64cd\u4f5c\u6570\u91cf\u4e3a \\(n\\) \uff0c\u603b\u4f53\u4f7f\u7528 \\(O(n \\log n)\\) \u65f6\u95f4\u3002
    • \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u9700\u501f\u52a9\u8f85\u52a9\u6570\u7ec4\u5b9e\u73b0\u5408\u5e76\uff0c\u4f7f\u7528 \\(O(n)\\) \u5927\u5c0f\u7684\u989d\u5916\u7a7a\u95f4\uff1b\u9012\u5f52\u6df1\u5ea6\u4e3a \\(\\log n\\) \uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u5927\u5c0f\u7684\u6808\u5e27\u7a7a\u95f4\u3002
    • \u975e\u539f\u5730\u6392\u5e8f\uff1a\u8f85\u52a9\u6570\u7ec4\u9700\u8981\u4f7f\u7528 \\(O(n)\\) \u989d\u5916\u7a7a\u95f4\u3002
    • \u7a33\u5b9a\u6392\u5e8f\uff1a\u5728\u5408\u5e76\u65f6\u53ef\u4fdd\u8bc1\u76f8\u7b49\u5143\u7d20\u7684\u76f8\u5bf9\u4f4d\u7f6e\u4e0d\u53d8\u3002
    • \u975e\u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u5bf9\u4e8e\u4efb\u610f\u8f93\u5165\u6570\u636e\uff0c\u5f52\u5e76\u6392\u5e8f\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u76f8\u540c\u3002
    "},{"location":"chapter_sorting/merge_sort/#1153","title":"11.5.3. \u00a0 \u94fe\u8868\u6392\u5e8f *","text":"

    \u5f52\u5e76\u6392\u5e8f\u6709\u4e00\u4e2a\u5f88\u7279\u522b\u7684\u4f18\u52bf\uff0c\u7528\u4e8e\u6392\u5e8f\u94fe\u8868\u65f6\u6709\u5f88\u597d\u7684\u6027\u80fd\u8868\u73b0\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u53ef\u88ab\u4f18\u5316\u81f3 \\(O(1)\\) \uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    • \u7531\u4e8e\u94fe\u8868\u53ef\u4ec5\u901a\u8fc7\u6539\u53d8\u6307\u9488\u6765\u5b9e\u73b0\u7ed3\u70b9\u589e\u5220\uff0c\u56e0\u6b64\u201c\u5c06\u4e24\u4e2a\u77ed\u6709\u5e8f\u94fe\u8868\u5408\u5e76\u4e3a\u4e00\u4e2a\u957f\u6709\u5e8f\u94fe\u8868\u201d\u65e0\u9700\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff0c\u5373\u56de\u6eaf\u5408\u5e76\u9636\u6bb5\u4e0d\u7528\u50cf\u6392\u5e8f\u6570\u7ec4\u4e00\u6837\u5efa\u7acb\u8f85\u52a9\u6570\u7ec4 tmp \uff1b
    • \u901a\u8fc7\u4f7f\u7528\u300c\u8fed\u4ee3\u300d\u4ee3\u66ff\u300c\u9012\u5f52\u5212\u5206\u300d\uff0c\u53ef\u7701\u53bb\u9012\u5f52\u4f7f\u7528\u7684\u6808\u5e27\u7a7a\u95f4\uff1b

    \u8be6\u60c5\u53c2\u8003\uff1a148. \u6392\u5e8f\u94fe\u8868

    "},{"location":"chapter_sorting/quick_sort/","title":"11.4. \u00a0 \u5feb\u901f\u6392\u5e8f","text":"

    \u300c\u5feb\u901f\u6392\u5e8f Quick Sort\u300d\u662f\u4e00\u79cd\u57fa\u4e8e\u201c\u5206\u6cbb\u601d\u60f3\u201d\u7684\u6392\u5e8f\u7b97\u6cd5\uff0c\u901f\u5ea6\u5f88\u5feb\u3001\u5e94\u7528\u5f88\u5e7f\u3002

    \u5feb\u901f\u6392\u5e8f\u7684\u6838\u5fc3\u64cd\u4f5c\u4e3a\u300c\u54e8\u5175\u5212\u5206\u300d\uff0c\u5176\u76ee\u6807\u4e3a\uff1a\u9009\u53d6\u6570\u7ec4\u67d0\u4e2a\u5143\u7d20\u4e3a \u57fa\u51c6\u6570\uff0c\u5c06\u6240\u6709\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\u79fb\u52a8\u81f3\u5176\u5de6\u8fb9\uff0c\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\u79fb\u52a8\u81f3\u5176\u53f3\u8fb9\u3002\u300c\u54e8\u5175\u5212\u5206\u300d\u7684\u5b9e\u73b0\u6d41\u7a0b\u4e3a\uff1a

    1. \u4ee5\u6570\u7ec4\u6700\u5de6\u7aef\u5143\u7d20\u4f5c\u4e3a\u57fa\u51c6\u6570\uff0c\u521d\u59cb\u5316\u4e24\u4e2a\u6307\u9488 i , j \u6307\u5411\u6570\u7ec4\u4e24\u7aef\uff1b
    2. \u8bbe\u7f6e\u4e00\u4e2a\u5faa\u73af\uff0c\u6bcf\u8f6e\u4e2d\u4f7f\u7528 i / j \u5206\u522b\u5bfb\u627e\u9996\u4e2a\u6bd4\u57fa\u51c6\u6570\u5927 / \u5c0f\u7684\u5143\u7d20\uff0c\u5e76\u4ea4\u6362\u6b64\u4e24\u5143\u7d20\uff1b
    3. \u4e0d\u65ad\u5faa\u73af\u6b65\u9aa4 2. \uff0c\u76f4\u81f3 i , j \u76f8\u9047\u65f6\u8df3\u51fa\uff0c\u6700\u7ec8\u628a\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u4e2a\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\uff1b

    \u300c\u54e8\u5175\u5212\u5206\u300d\u6267\u884c\u5b8c\u6bd5\u540e\uff0c\u539f\u6570\u7ec4\u88ab\u5212\u5206\u6210\u4e24\u4e2a\u90e8\u5206\uff0c\u5373 \u5de6\u5b50\u6570\u7ec4 \u548c \u53f3\u5b50\u6570\u7ec4\uff0c\u4e14\u6ee1\u8db3 \u5de6\u5b50\u6570\u7ec4\u4efb\u610f\u5143\u7d20 < \u57fa\u51c6\u6570 < \u53f3\u5b50\u6570\u7ec4\u4efb\u610f\u5143\u7d20\u3002\u56e0\u6b64\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u53ea\u9700\u8981\u6392\u5e8f\u4e24\u4e2a\u5b50\u6570\u7ec4\u5373\u53ef\u3002

    <1><2><3><4><5><6><7><8><9>

    \u5feb\u901f\u6392\u5e8f\u7684\u5206\u6cbb\u601d\u60f3

    \u54e8\u5175\u5212\u5206\u7684\u5b9e\u8d28\u662f\u5c06 \u4e00\u4e2a\u957f\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898 \u7b80\u5316\u4e3a \u4e24\u4e2a\u77ed\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u5143\u7d20\u4ea4\u6362 */\nvoid swap(int[] nums, int i, int j) {\nint tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\nint partition(int[] nums, int left, int right) {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.cpp
    /* \u5143\u7d20\u4ea4\u6362 */\nvoid swap(vector<int>& nums, int i, int j) {\nint tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\nint partition(vector<int>& nums, int left, int right) {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.py
    def partition(self, nums: List[int], left: int, right: int) -> int:\n\"\"\" \u54e8\u5175\u5212\u5206 \"\"\"\n# \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j = left, right\nwhile i < j:\nwhile i < j and nums[j] >= nums[left]:\nj -= 1  # \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile i < j and nums[i] <= nums[left]:\ni += 1  # \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n# \u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n# \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i  # \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n
    quick_sort.go
    /* \u54e8\u5175\u5212\u5206 */\nfunc (q *quickSort) partition(nums []int, left, right int) int {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j := left, right\nfor i < j {\nfor i < j && nums[j] >= nums[left] {\nj-- // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nfor i < j && nums[i] <= nums[left] {\ni++ // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n// \u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n}\n// \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.js
    /* \u5143\u7d20\u4ea4\u6362 */\nswap(nums, i, j) {\nlet tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\npartition(nums, left, right) {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) {\nj -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile (i < j && nums[i] <= nums[left]) {\ni += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n// \u5143\u7d20\u4ea4\u6362\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.ts
    /* \u5143\u7d20\u4ea4\u6362 */\nswap(nums: number[], i: number, j: number): void {\nlet tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\npartition(nums: number[], left: number, right: number): number {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) {\nj -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile (i < j && nums[i] <= nums[left]) {\ni += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n// \u5143\u7d20\u4ea4\u6362\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.c
    [class]{quickSort}-[func]{partition}\n
    quick_sort.cs
    /* \u5143\u7d20\u4ea4\u6362 */\nvoid swap(int[] nums, int i, int j)\n{\nint tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\nint partition(int[] nums, int left, int right)\n{\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j)\n{\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.swift
    /* \u5143\u7d20\u4ea4\u6362 */\nfunc swap(nums: inout [Int], i: Int, j: Int) {\nlet tmp = nums[i]\nnums[i] = nums[j]\nnums[j] = tmp\n}\n/* \u54e8\u5175\u5212\u5206 */\nfunc partition(nums: inout [Int], left: Int, right: Int) -> Int {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nvar i = left\nvar j = right\nwhile i < j {\nwhile i < j, nums[j] >= nums[left] {\nj -= 1 // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile i < j, nums[i] <= nums[left] {\ni += 1 // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nswap(nums: &nums, i: i, j: j) // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums: &nums, i: i, j: left) // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.zig
    // \u5143\u7d20\u4ea4\u6362\nfn swap(nums: []i32, i: usize, j: usize) void {\nvar tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n// \u54e8\u5175\u5212\u5206\nfn partition(nums: []i32, left: usize, right: usize) usize {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nvar i = left;\nvar j = right;\nwhile (i < j) {\nwhile (i < j and nums[j] >= nums[left]) j -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j and nums[i] <= nums[left]) i += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j);   // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);    // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;               // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    "},{"location":"chapter_sorting/quick_sort/#1141","title":"11.4.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"
    1. \u9996\u5148\uff0c\u5bf9\u6570\u7ec4\u6267\u884c\u4e00\u6b21\u300c\u54e8\u5175\u5212\u5206\u300d\uff0c\u5f97\u5230\u5f85\u6392\u5e8f\u7684 \u5de6\u5b50\u6570\u7ec4 \u548c \u53f3\u5b50\u6570\u7ec4\uff1b
    2. \u63a5\u4e0b\u6765\uff0c\u5bf9 \u5de6\u5b50\u6570\u7ec4 \u548c \u53f3\u5b50\u6570\u7ec4 \u5206\u522b \u9012\u5f52\u6267\u884c\u300c\u54e8\u5175\u5212\u5206\u300d\u2026\u2026
    3. \u76f4\u81f3\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6 \u7ec8\u6b62\u9012\u5f52\uff0c\u5373\u53ef\u5b8c\u6210\u5bf9\u6574\u4e2a\u6570\u7ec4\u7684\u6392\u5e8f\uff1b

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5feb\u901f\u6392\u5e8f\u548c\u300c\u4e8c\u5206\u67e5\u627e\u300d\u7684\u539f\u7406\u7c7b\u4f3c\uff0c\u90fd\u662f\u4ee5\u5bf9\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u6765\u7f29\u5c0f\u5904\u7406\u533a\u95f4\u3002

    Fig. \u5feb\u901f\u6392\u5e8f\u6d41\u7a0b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u5feb\u901f\u6392\u5e8f */\nvoid quickSort(int[] nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right)\nreturn;\n// \u54e8\u5175\u5212\u5206\nint pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    quick_sort.cpp
    /* \u5feb\u901f\u6392\u5e8f */\nvoid quickSort(vector<int>& nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right)\nreturn;\n// \u54e8\u5175\u5212\u5206\nint pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    quick_sort.py
    def quick_sort(self, nums: List[int], left: int, right: int) -> None:\n\"\"\" \u5feb\u901f\u6392\u5e8f \"\"\"\n# \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif left >= right:\nreturn\n# \u54e8\u5175\u5212\u5206\npivot: int = self.partition(nums, left, right)\n# \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nself.quick_sort(nums, left, pivot - 1)\nself.quick_sort(nums, pivot + 1, right)\n
    quick_sort.go
    /* \u5feb\u901f\u6392\u5e8f */\nfunc (q *quickSort) quickSort(nums []int, left, right int) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif left >= right {\nreturn\n}\n// \u54e8\u5175\u5212\u5206\npivot := q.partition(nums, left, right)\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nq.quickSort(nums, left, pivot-1)\nq.quickSort(nums, pivot+1, right)\n}\n
    quick_sort.js
    /* \u5feb\u901f\u6392\u5e8f */\nquickSort(nums, left, right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right) return;\n// \u54e8\u5175\u5212\u5206\nconst pivot = this.partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nthis.quickSort(nums, left, pivot - 1);\nthis.quickSort(nums, pivot + 1, right);\n}\n
    quick_sort.ts
    /* \u5feb\u901f\u6392\u5e8f */\nquickSort(nums: number[], left: number, right: number): void {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right) {\nreturn;\n}\n// \u54e8\u5175\u5212\u5206\nconst pivot = this.partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nthis.quickSort(nums, left, pivot - 1);\nthis.quickSort(nums, pivot + 1, right);\n}\n
    quick_sort.c
    [class]{quickSort}-[func]{quickSort}\n
    quick_sort.cs
    /* \u5feb\u901f\u6392\u5e8f */\nvoid quickSort(int[] nums, int left, int right)\n{\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right)\nreturn;\n// \u54e8\u5175\u5212\u5206\nint pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    quick_sort.swift
    /* \u5feb\u901f\u6392\u5e8f */\nfunc quickSort(nums: inout [Int], left: Int, right: Int) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif left >= right {\nreturn\n}\n// \u54e8\u5175\u5212\u5206\nlet pivot = partition(nums: &nums, left: left, right: right)\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums: &nums, left: left, right: pivot - 1)\nquickSort(nums: &nums, left: pivot + 1, right: right)\n}\n
    quick_sort.zig
    // \u5feb\u901f\u6392\u5e8f\nfn quickSort(nums: []i32, left: usize, right: usize) void {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right) return;\n// \u54e8\u5175\u5212\u5206\nvar pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    "},{"location":"chapter_sorting/quick_sort/#1142","title":"11.4.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"

    \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n \\log n)\\) \uff1a\u5e73\u5747\u60c5\u51b5\u4e0b\uff0c\u54e8\u5175\u5212\u5206\u7684\u9012\u5f52\u5c42\u6570\u4e3a \\(\\log n\\) \uff0c\u6bcf\u5c42\u4e2d\u7684\u603b\u5faa\u73af\u6570\u4e3a \\(n\\) \uff0c\u603b\u4f53\u4f7f\u7528 \\(O(n \\log n)\\) \u65f6\u95f4\u3002

    \u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n^2)\\) \uff1a\u6700\u5dee\u60c5\u51b5\u4e0b\uff0c\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u5c06\u957f\u5ea6\u4e3a \\(n\\) \u7684\u6570\u7ec4\u5212\u5206\u4e3a\u957f\u5ea6\u4e3a \\(0\\) \u548c \\(n - 1\\) \u7684\u4e24\u4e2a\u5b50\u6570\u7ec4\uff0c\u6b64\u65f6\u9012\u5f52\u5c42\u6570\u8fbe\u5230 \\(n\\) \u5c42\uff0c\u6bcf\u5c42\u4e2d\u7684\u5faa\u73af\u6570\u4e3a \\(n\\) \uff0c\u603b\u4f53\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u8f93\u5165\u6570\u7ec4\u5b8c\u5168\u5012\u5e8f\u4e0b\uff0c\u8fbe\u5230\u6700\u5dee\u9012\u5f52\u6df1\u5ea6 \\(n\\) \u3002

    \u539f\u5730\u6392\u5e8f\uff1a\u53ea\u5728\u9012\u5f52\u4e2d\u4f7f\u7528 \\(O(\\log n)\\) \u5927\u5c0f\u7684\u6808\u5e27\u7a7a\u95f4\u3002

    \u975e\u7a33\u5b9a\u6392\u5e8f\uff1a\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u53ef\u80fd\u6539\u53d8\u76f8\u7b49\u5143\u7d20\u7684\u76f8\u5bf9\u4f4d\u7f6e\u3002

    \u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u6700\u5dee\u60c5\u51b5\u4e0b\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n^2)\\) \u3002

    "},{"location":"chapter_sorting/quick_sort/#1143","title":"11.4.3. \u00a0 \u5feb\u6392\u4e3a\u4ec0\u4e48\u5feb\uff1f","text":"

    \u4ece\u547d\u540d\u80fd\u591f\u770b\u51fa\uff0c\u5feb\u901f\u6392\u5e8f\u5728\u6548\u7387\u65b9\u9762\u4e00\u5b9a\u201c\u6709\u4e24\u628a\u5237\u5b50\u201d\u3002\u5feb\u901f\u6392\u5e8f\u7684\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u867d\u7136\u4e0e\u300c\u5f52\u5e76\u6392\u5e8f\u300d\u548c\u300c\u5806\u6392\u5e8f\u300d\u4e00\u81f4\uff0c\u4f46\u5b9e\u9645 \u6548\u7387\u66f4\u9ad8\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    • \u51fa\u73b0\u6700\u5dee\u60c5\u51b5\u7684\u6982\u7387\u5f88\u4f4e\uff1a\u867d\u7136\u5feb\u901f\u6392\u5e8f\u7684\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \uff0c\u4e0d\u5982\u5f52\u5e76\u6392\u5e8f\uff0c\u4f46\u7edd\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u5feb\u901f\u6392\u5e8f\u53ef\u4ee5\u8fbe\u5230 \\(O(n \\log n)\\) \u7684\u590d\u6742\u5ea6\u3002
    • \u7f13\u5b58\u4f7f\u7528\u6548\u7387\u9ad8\uff1a\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u65f6\uff0c\u5c06\u6574\u4e2a\u5b50\u6570\u7ec4\u52a0\u8f7d\u5165\u7f13\u5b58\u4e2d\uff0c\u8bbf\u95ee\u5143\u7d20\u6548\u7387\u5f88\u9ad8\u3002\u800c\u8bf8\u5982\u300c\u5806\u6392\u5e8f\u300d\u9700\u8981\u8df3\u8dc3\u5f0f\u8bbf\u95ee\u5143\u7d20\uff0c\u56e0\u6b64\u4e0d\u5177\u6709\u6b64\u7279\u6027\u3002
    • \u590d\u6742\u5ea6\u7684\u5e38\u6570\u7cfb\u6570\u4f4e\uff1a\u5728\u63d0\u53ca\u7684\u4e09\u79cd\u7b97\u6cd5\u4e2d\uff0c\u5feb\u901f\u6392\u5e8f\u7684 \u6bd4\u8f83\u3001\u8d4b\u503c\u3001\u4ea4\u6362 \u4e09\u79cd\u64cd\u4f5c\u7684\u603b\u4f53\u6570\u91cf\u6700\u5c11\uff08\u7c7b\u4f3c\u4e8e\u300c\u63d2\u5165\u6392\u5e8f\u300d\u5feb\u4e8e\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u7684\u539f\u56e0\uff09\u3002
    "},{"location":"chapter_sorting/quick_sort/#1144","title":"11.4.4. \u00a0 \u57fa\u51c6\u6570\u4f18\u5316","text":"

    \u666e\u901a\u5feb\u901f\u6392\u5e8f\u5728\u67d0\u4e9b\u8f93\u5165\u4e0b\u7684\u65f6\u95f4\u6548\u7387\u53d8\u5dee\u3002\u4e3e\u4e2a\u6781\u7aef\u4f8b\u5b50\uff0c\u5047\u8bbe\u8f93\u5165\u6570\u7ec4\u662f\u5b8c\u5168\u5012\u5e8f\u7684\uff0c\u7531\u4e8e\u6211\u4eec\u9009\u53d6\u6700\u5de6\u7aef\u5143\u7d20\u4e3a\u57fa\u51c6\u6570\uff0c\u90a3\u4e48\u5728\u54e8\u5175\u5212\u5206\u5b8c\u6210\u540e\uff0c\u57fa\u51c6\u6570\u88ab\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u53f3\u7aef\uff0c\u4ece\u800c \u5de6\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a \\(n - 1\\)\u3001\u53f3\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a \\(0\\) \u3002\u8fd9\u6837\u8fdb\u4e00\u6b65\u9012\u5f52\u4e0b\u53bb\uff0c\u6bcf\u8f6e\u54e8\u5175\u5212\u5206\u540e\u7684\u53f3\u5b50\u6570\u7ec4\u957f\u5ea6\u90fd\u4e3a \\(0\\) \uff0c\u5206\u6cbb\u7b56\u7565\u5931\u6548\uff0c\u5feb\u901f\u6392\u5e8f\u9000\u5316\u4e3a\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u4e86\u3002

    \u4e3a\u4e86\u5c3d\u91cf\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\u53d1\u751f\uff0c\u6211\u4eec\u53ef\u4ee5\u4f18\u5316\u4e00\u4e0b\u57fa\u51c6\u6570\u7684\u9009\u53d6\u7b56\u7565\u3002\u9996\u5148\uff0c\u5728\u54e8\u5175\u5212\u5206\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5 \u968f\u673a\u9009\u53d6\u4e00\u4e2a\u5143\u7d20\u4f5c\u4e3a\u57fa\u51c6\u6570\u3002\u4f46\u5982\u679c\u8fd0\u6c14\u5f88\u5dee\uff0c\u6bcf\u6b21\u90fd\u9009\u62e9\u5230\u6bd4\u8f83\u5dee\u7684\u57fa\u51c6\u6570\uff0c\u90a3\u4e48\u6548\u7387\u4f9d\u7136\u4e0d\u597d\u3002

    \u8fdb\u4e00\u6b65\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u6570\u7ec4\u4e2d\u9009\u53d6 3 \u4e2a\u5019\u9009\u5143\u7d20\uff08\u4e00\u822c\u4e3a\u6570\u7ec4\u7684\u9996\u3001\u5c3e\u3001\u4e2d\u70b9\u5143\u7d20\uff09\uff0c\u5e76\u5c06\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\u4f5c\u4e3a\u57fa\u51c6\u6570\uff0c\u8fd9\u6837\u57fa\u51c6\u6570\u201c\u65e2\u4e0d\u5927\u4e5f\u4e0d\u5c0f\u201d\u7684\u6982\u7387\u5c31\u5927\u5927\u63d0\u5347\u4e86\u3002\u5f53\u7136\uff0c\u5982\u679c\u6570\u7ec4\u5f88\u957f\u7684\u8bdd\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u53d6\u66f4\u591a\u5019\u9009\u5143\u7d20\uff0c\u6765\u8fdb\u4e00\u6b65\u63d0\u5347\u7b97\u6cd5\u7684\u7a33\u5065\u6027\u3002\u91c7\u53d6\u8be5\u65b9\u6cd5\u540e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n^2)\\) \u7684\u6982\u7387\u6781\u4f4e\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nint medianThree(int[] nums, int left, int mid, int right) {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))\nreturn left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))\nreturn mid;\nelse\nreturn right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nint partition(int[] nums, int left, int right) {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nint med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.cpp
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nint medianThree(vector<int>& nums, int left, int mid, int right) {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))\nreturn left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))\nreturn mid;\nelse\nreturn right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nint partition(vector<int>& nums, int left, int right) {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nint med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.py
    def median_three(self, nums: List[int], left: int, mid: int, right: int) -> int:\n\"\"\" \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 \"\"\"\n# \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n# \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif (nums[left] < nums[mid]) ^ (nums[left] < nums[right]):\nreturn left\nelif (nums[mid] < nums[left]) ^ (nums[mid] < nums[right]):\nreturn mid\nreturn right\ndef partition(self, nums: List[int], left: int, right: int) -> int:\n\"\"\" \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 \"\"\"\n# \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nmed: int = self.median_three(nums, left, (left + right) // 2, right)\n# \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nnums[left], nums[med] = nums[med], nums[left]\n# \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j = left, right\nwhile i < j:\nwhile i < j and nums[j] >= nums[left]:\nj -= 1  # \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile i < j and nums[i] <= nums[left]:\ni += 1  # \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n# \u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n# \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i  # \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n
    quick_sort.go
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nfunc (q *quickSortMedian) medianThree(nums []int, left, mid, right int) int {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\uff08!= \u5728\u8fd9\u91cc\u8d77\u5230\u5f02\u6216\u7684\u4f5c\u7528\uff09\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif (nums[left] < nums[mid]) != (nums[left] < nums[right]) {\nreturn left\n} else if (nums[mid] < nums[left]) != (nums[mid] < nums[right]) {\nreturn mid\n}\nreturn right\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09*/\nfunc (q *quickSortMedian) partition(nums []int, left, right int) int {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nmed := q.medianThree(nums, left, (left+right)/2, right)\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nnums[left], nums[med] = nums[med], nums[left]\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j := left, right\nfor i < j {\nfor i < j && nums[j] >= nums[left] {\nj-- //\u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nfor i < j && nums[i] <= nums[left] {\ni++ //\u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n//\u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n}\n//\u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i //\u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.js
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nmedianThree(nums, left, mid, right) {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right])) return left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right])) return mid;\nelse return right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\npartition(nums, left, right) {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nlet med = this.medianThree(nums, left, Math.floor((left + right) / 2), right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nthis.swap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) j--; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left]) i++; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.ts
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nmedianThree(nums: number[], left: number, mid: number, right: number): number {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif (Number(nums[left] < nums[mid]) ^ Number(nums[left] < nums[right])) {\nreturn left;\n} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {\nreturn mid;\n} else {\nreturn right;\n}\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\npartition(nums: number[], left: number, right: number): number {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nlet med = this.medianThree(nums, left, Math.floor((left + right) / 2), right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nthis.swap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) {\nj--; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile (i < j && nums[i] <= nums[left]) {\ni++; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.c
    [class]{quickSortMedian}-[func]{medianThree}\n[class]{quickSortMedian}-[func]{partition}\n
    quick_sort.cs
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nint medianThree(int[] nums, int left, int mid, int right)\n{\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))\nreturn left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))\nreturn mid;\nelse\nreturn right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nint partition(int[] nums, int left, int right)\n{\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nint med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j)\n{\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.swift
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nfunc medianThree(nums: [Int], left: Int, mid: Int, right: Int) -> Int {\nif (nums[left] < nums[mid]) != (nums[left] < nums[right]) {\nreturn left\n} else if (nums[mid] < nums[left]) != (nums[mid] < nums[right]) {\nreturn mid\n} else {\nreturn right\n}\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nfunc partitionMedian(nums: inout [Int], left: Int, right: Int) -> Int {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nlet med = medianThree(nums: nums, left: left, mid: (left + right) / 2, right: right)\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums: &nums, i: left, j: med)\nreturn partition(nums: &nums, left: left, right: right)\n}\n
    quick_sort.zig
    // \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nfn medianThree(nums: []i32, left: usize, mid: usize, right: usize) usize {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) != (nums[left] < nums[right])) {\nreturn left;\n} else if ((nums[mid] < nums[left]) != (nums[mid] < nums[right])) {\nreturn mid;\n} else {\nreturn right;\n}\n}\n// \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09\nfn partition(nums: []i32, left: usize, right: usize) usize {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nvar med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nvar i = left;\nvar j = right;\nwhile (i < j) {\nwhile (i < j and nums[j] >= nums[left]) j -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j and nums[i] <= nums[left]) i += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j);   // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);    // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;               // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    "},{"location":"chapter_sorting/quick_sort/#1145","title":"11.4.5. \u00a0 \u5c3e\u9012\u5f52\u4f18\u5316","text":"

    \u666e\u901a\u5feb\u901f\u6392\u5e8f\u5728\u67d0\u4e9b\u8f93\u5165\u4e0b\u7684\u7a7a\u95f4\u6548\u7387\u53d8\u5dee\u3002\u4ecd\u7136\u4ee5\u5b8c\u5168\u5012\u5e8f\u7684\u8f93\u5165\u6570\u7ec4\u4e3a\u4f8b\uff0c\u7531\u4e8e\u6bcf\u8f6e\u54e8\u5175\u5212\u5206\u540e\u53f3\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 0 \uff0c\u90a3\u4e48\u5c06\u5f62\u6210\u4e00\u4e2a\u9ad8\u5ea6\u4e3a \\(n - 1\\) \u7684\u9012\u5f52\u6811\uff0c\u6b64\u65f6\u4f7f\u7528\u7684\u6808\u5e27\u7a7a\u95f4\u5927\u5c0f\u52a3\u5316\u81f3 \\(O(n)\\) \u3002

    \u4e3a\u4e86\u907f\u514d\u6808\u5e27\u7a7a\u95f4\u7684\u7d2f\u79ef\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u6bcf\u8f6e\u54e8\u5175\u6392\u5e8f\u5b8c\u6210\u540e\uff0c\u5224\u65ad\u4e24\u4e2a\u5b50\u6570\u7ec4\u7684\u957f\u5ea6\u5927\u5c0f\uff0c\u4ec5\u9012\u5f52\u6392\u5e8f\u8f83\u77ed\u7684\u5b50\u6570\u7ec4\u3002\u7531\u4e8e\u8f83\u77ed\u7684\u5b50\u6570\u7ec4\u957f\u5ea6\u4e0d\u4f1a\u8d85\u8fc7 \\(\\frac{n}{2}\\) \uff0c\u56e0\u6b64\u8fd9\u6837\u505a\u80fd\u4fdd\u8bc1\u9012\u5f52\u6df1\u5ea6\u4e0d\u8d85\u8fc7 \\(\\log n\\) \uff0c\u5373\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u88ab\u4f18\u5316\u81f3 \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nvoid quickSort(int[] nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nint pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nquickSort(nums, left, pivot - 1);  // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.cpp
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nvoid quickSort(vector<int>& nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nint pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nquickSort(nums, left, pivot - 1);  // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.py
    def quick_sort(self, nums: List[int], left: int, right: int) -> None:\n\"\"\" \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 \"\"\"\n# \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile left < right:\n# \u54e8\u5175\u5212\u5206\u64cd\u4f5c\npivot: int = self.partition(nums, left, right)\n# \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif pivot - left < right - pivot:\nself.quick_sort(nums, left, pivot - 1)  # \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1     # \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\nelse:\nself.quick_sort(nums, pivot + 1, right)  # \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1    # \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n
    quick_sort.go
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09*/\nfunc (q *quickSortTailCall) quickSort(nums []int, left, right int) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nfor left < right {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\npivot := q.partition(nums, left, right)\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif pivot-left < right-pivot {\nq.quickSort(nums, left, pivot-1) // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1                 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nq.quickSort(nums, pivot+1, right) // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1                 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.js
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nquickSort(nums, left, right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nlet pivot = this.partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nthis.quickSort(nums, left, pivot - 1); // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nthis.quickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.ts
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nquickSort(nums: number[], left: number, right: number): void {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nlet pivot = this.partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nthis.quickSort(nums, left, pivot - 1); // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nthis.quickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.c
    [class]{quickSortTailCall}-[func]{quickSort}\n
    quick_sort.cs
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nvoid quickSort(int[] nums, int left, int right)\n{\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right)\n{\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nint pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot)\n{\nquickSort(nums, left, pivot - 1);  // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n}\nelse\n{\nquickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.swift
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nfunc quickSortTailCall(nums: inout [Int], left: Int, right: Int) {\nvar left = left\nvar right = right\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile left < right {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nlet pivot = partition(nums: &nums, left: left, right: right)\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left) < (right - pivot) {\nquickSortTailCall(nums: &nums, left: left, right: pivot - 1) // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSortTailCall(nums: &nums, left: pivot + 1, right: right) // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.zig
    // \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09\nfn quickSort(nums: []i32, left_: usize, right_: usize) void {\nvar left = left_;\nvar right = right_;\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nvar pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nquickSort(nums, left, pivot - 1);   // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;                   // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSort(nums, pivot + 1, right);  // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1;                  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    "},{"location":"chapter_sorting/summary/","title":"11.6. \u00a0 \u5c0f\u7ed3","text":"
    • \u5192\u6ce1\u6392\u5e8f\u901a\u8fc7\u4ea4\u6362\u76f8\u90bb\u5143\u7d20\u6765\u5b9e\u73b0\u6392\u5e8f\u3002\u901a\u8fc7\u589e\u52a0\u6807\u5fd7\u4f4d\u5b9e\u73b0\u63d0\u524d\u8fd4\u56de\uff0c\u6211\u4eec\u53ef\u5c06\u5192\u6ce1\u6392\u5e8f\u7684\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u4f18\u5316\u81f3 \\(O(N)\\) \u3002
    • \u63d2\u5165\u6392\u5e8f\u6bcf\u8f6e\u5c06\u5f85\u6392\u5e8f\u533a\u95f4\u5185\u5143\u7d20\u63d2\u5165\u81f3\u5df2\u6392\u5e8f\u533a\u95f4\u7684\u6b63\u786e\u4f4d\u7f6e\uff0c\u4ece\u800c\u5b9e\u73b0\u6392\u5e8f\u3002\u63d2\u5165\u6392\u5e8f\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u867d\u4e3a \\(O(N^2)\\) \uff0c\u4f46\u56e0\u4e3a\u603b\u4f53\u64cd\u4f5c\u5c11\u800c\u5f88\u53d7\u6b22\u8fce\uff0c\u4e00\u822c\u7528\u4e8e\u5c0f\u6570\u636e\u91cf\u7684\u6392\u5e8f\u5de5\u4f5c\u3002
    • \u5feb\u901f\u6392\u5e8f\u57fa\u4e8e\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u5b9e\u73b0\u6392\u5e8f\u3002\u5728\u54e8\u5175\u5212\u5206\u4e2d\uff0c\u6709\u53ef\u80fd\u6bcf\u6b21\u90fd\u9009\u53d6\u5230\u6700\u5dee\u7684\u57fa\u51c6\u6570\uff0c\u4ece\u800c\u5bfc\u81f4\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(N^2)\\) \uff0c\u901a\u8fc7\u5f15\u5165\u4e2d\u4f4d\u6570\u57fa\u51c6\u6570\u6216\u968f\u673a\u57fa\u51c6\u6570\u53ef\u5927\u5927\u964d\u4f4e\u52a3\u5316\u6982\u7387\u3002\u5c3e\u9012\u5f52\u65b9\u6cd5\u53ef\u4ee5\u6709\u6548\u51cf\u5c0f\u9012\u5f52\u6df1\u5ea6\uff0c\u5c06\u7a7a\u95f4\u590d\u6742\u5ea6\u4f18\u5316\u81f3 \\(O(\\log N)\\) \u3002
    • \u5f52\u5e76\u6392\u5e8f\u5305\u542b\u5212\u5206\u548c\u5408\u5e76\u4e24\u4e2a\u9636\u6bb5\uff0c\u662f\u5206\u800c\u6cbb\u4e4b\u7684\u6807\u51c6\u4f53\u73b0\u3002\u5bf9\u4e8e\u5f52\u5e76\u6392\u5e8f\uff0c\u6392\u5e8f\u6570\u7ec4\u9700\u8981\u501f\u52a9\u8f85\u52a9\u6570\u7ec4\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \uff1b\u800c\u6392\u5e8f\u94fe\u8868\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u53ef\u4ee5\u88ab\u4f18\u5316\u81f3 \\(O(1)\\) \u3002
    • \u4e0b\u56fe\u603b\u7ed3\u5bf9\u6bd4\u4e86\u5404\u4e2a\u6392\u5e8f\u7b97\u6cd5\u7684\u8fd0\u884c\u6548\u7387\u4e0e\u7279\u6027\u3002\u5176\u4e2d\uff0c\u6876\u6392\u5e8f\u4e2d \\(k\\) \u4e3a\u6876\u7684\u6570\u91cf\uff1b\u57fa\u6570\u6392\u5e8f\u4ec5\u9002\u7528\u4e8e\u6b63\u6574\u6570\u3001\u5b57\u7b26\u4e32\u3001\u7279\u5b9a\u683c\u5f0f\u7684\u6d6e\u70b9\u6570\uff0c\\(k\\) \u4e3a\u6700\u5927\u6570\u5b57\u7684\u4f4d\u6570\u3002

    Fig. \u6392\u5e8f\u7b97\u6cd5\u5bf9\u6bd4

    • \u603b\u4f53\u6765\u770b\uff0c\u6211\u4eec\u8ffd\u6c42\u8fd0\u884c\u5feb\u3001\u7a33\u5b9a\u3001\u539f\u5730\u3001\u6b63\u5411\u81ea\u9002\u5e94\u6027\u7684\u6392\u5e8f\u3002\u663e\u7136\uff0c\u5982\u540c\u5176\u5b83\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e00\u6837\uff0c\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\u7684\u6392\u5e8f\u7b97\u6cd5\u5e76\u4e0d\u5b58\u5728\uff0c\u6211\u4eec\u9700\u8981\u6839\u636e\u95ee\u9898\u7279\u70b9\u6765\u9009\u62e9\u6392\u5e8f\u7b97\u6cd5\u3002
    "},{"location":"chapter_stack_and_queue/deque/","title":"5.3. \u00a0 \u53cc\u5411\u961f\u5217","text":"

    \u5bf9\u4e8e\u961f\u5217\uff0c\u6211\u4eec\u53ea\u80fd\u5728\u5934\u90e8\u5220\u9664\u6216\u5728\u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\uff0c\u800c\u300c\u53cc\u5411\u961f\u5217 Deque\u300d\u66f4\u52a0\u7075\u6d3b\uff0c\u5728\u5176\u5934\u90e8\u548c\u5c3e\u90e8\u90fd\u80fd\u6267\u884c\u5143\u7d20\u6dfb\u52a0\u6216\u5220\u9664\u64cd\u4f5c\u3002

    Fig. \u53cc\u5411\u961f\u5217\u7684\u64cd\u4f5c

    "},{"location":"chapter_stack_and_queue/deque/#531","title":"5.3.1. \u00a0 \u53cc\u5411\u961f\u5217\u5e38\u7528\u64cd\u4f5c","text":"

    \u53cc\u5411\u961f\u5217\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\uff0c\u65b9\u6cd5\u540d\u9700\u6839\u636e\u8bed\u8a00\u6765\u786e\u5b9a\uff0c\u6b64\u5904\u4ee5 Java \u4e3a\u4f8b\u3002

    \u65b9\u6cd5\u540d \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 pushFirst() \u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u961f\u9996 \\(O(1)\\) pushLast() \u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u961f\u5c3e \\(O(1)\\) pollFirst() \u5220\u9664\u961f\u9996\u5143\u7d20 \\(O(1)\\) pollLast() \u5220\u9664\u961f\u5c3e\u5143\u7d20 \\(O(1)\\) peekFirst() \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \\(O(1)\\) peekLast() \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 \\(O(1)\\)

    \u76f8\u540c\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u597d\u7684\u53cc\u5411\u961f\u5217\u7c7b\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig deque.java
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\nDeque<Integer> deque = new LinkedList<>();\n/* \u5143\u7d20\u5165\u961f */\ndeque.offerLast(2);   // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.offerLast(5);\ndeque.offerLast(4);\ndeque.offerFirst(3);  // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.offerFirst(1);\n/* \u8bbf\u95ee\u5143\u7d20 */\nint peekFirst = deque.peekFirst();  // \u961f\u9996\u5143\u7d20\nint peekLast = deque.peekLast();    // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\nint pollFirst = deque.pollFirst();  // \u961f\u9996\u5143\u7d20\u51fa\u961f\nint pollLast = deque.pollLast();    // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size = deque.size();\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = deque.isEmpty();\n
    deque.cpp
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\ndeque<int> deque;\n/* \u5143\u7d20\u5165\u961f */\ndeque.push_back(2);   // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.push_back(5);\ndeque.push_back(4);\ndeque.push_front(3);  // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.push_front(1);\n/* \u8bbf\u95ee\u5143\u7d20 */\nint front = deque.front(); // \u961f\u9996\u5143\u7d20\nint back = deque.back();   // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\ndeque.pop_front();  // \u961f\u9996\u5143\u7d20\u51fa\u961f\ndeque.pop_back();   // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size = deque.size();\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty = deque.empty();\n
    deque.py
    \"\"\" \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 \"\"\"\ndeque: Deque[int] = collections.deque()\n\"\"\" \u5143\u7d20\u5165\u961f \"\"\"\ndeque.append(2)      # \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.append(5)\ndeque.append(4)\ndeque.appendleft(3)  # \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.appendleft(1)\n\"\"\" \u8bbf\u95ee\u5143\u7d20 \"\"\"\nfront: int = deque[0]  # \u961f\u9996\u5143\u7d20\nrear: int = deque[-1]  # \u961f\u5c3e\u5143\u7d20\n\"\"\" \u5143\u7d20\u51fa\u961f \"\"\"\npop_front: int = deque.popleft()  # \u961f\u9996\u5143\u7d20\u51fa\u961f\npop_rear: int = deque.pop()       # \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nsize: int = len(deque)\n\"\"\" \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = len(deque) == 0\n
    deque_test.go
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// \u5728 Go \u4e2d\uff0c\u5c06 list \u4f5c\u4e3a\u53cc\u5411\u961f\u5217\u4f7f\u7528\ndeque := list.New()\n/* \u5143\u7d20\u5165\u961f */\ndeque.PushBack(2)      // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.PushBack(5)\ndeque.PushBack(4)\ndeque.PushFront(3)     // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.PushFront(1)\n/* \u8bbf\u95ee\u5143\u7d20 */\nfront := deque.Front() // \u961f\u9996\u5143\u7d20\nrear := deque.Back()   // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\ndeque.Remove(front)    // \u961f\u9996\u5143\u7d20\u51fa\u961f\ndeque.Remove(rear)     // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize := deque.Len()\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty := deque.Len() == 0\n
    deque.js
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// JavaScript \u6ca1\u6709\u5185\u7f6e\u7684\u53cc\u7aef\u961f\u5217\uff0c\u53ea\u80fd\u628a Array \u5f53\u4f5c\u53cc\u7aef\u961f\u5217\u6765\u4f7f\u7528\nconst deque = [];\n/* \u5143\u7d20\u5165\u961f */\ndeque.push(2);\ndeque.push(5);\ndeque.push(4);\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cunshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\ndeque.unshift(3);\ndeque.unshift(1);\nconsole.log(\"\u53cc\u5411\u961f\u5217 deque = \", deque);\n/* \u8bbf\u95ee\u5143\u7d20 */\nconst peekFirst = deque[0];\nconsole.log(\"\u961f\u9996\u5143\u7d20 peekFirst = \" + peekFirst);\nconst peekLast = deque[deque.length - 1];\nconsole.log(\"\u961f\u5c3e\u5143\u7d20 peekLast = \" + peekLast);\n/* \u5143\u7d20\u51fa\u961f */\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst popFront = deque.shift();\nconsole.log(\"\u961f\u9996\u51fa\u961f\u5143\u7d20 popFront = \" + popFront + \"\uff0c\u961f\u9996\u51fa\u961f\u540e deque = \" + deque);\nconst popBack = deque.pop();\nconsole.log(\"\u961f\u5c3e\u51fa\u961f\u5143\u7d20 popBack = \" + popBack + \"\uff0c\u961f\u5c3e\u51fa\u961f\u540e deque = \" + deque);\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nconst size = deque.length;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u957f\u5ea6 size = \" + size);\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst isEmpty = size === 0;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a = \" + isEmpty);\n
    deque.ts
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// TypeScript \u6ca1\u6709\u5185\u7f6e\u7684\u53cc\u7aef\u961f\u5217\uff0c\u53ea\u80fd\u628a Array \u5f53\u4f5c\u53cc\u7aef\u961f\u5217\u6765\u4f7f\u7528\nconst deque: number[] = [];\n/* \u5143\u7d20\u5165\u961f */\ndeque.push(2);\ndeque.push(5);\ndeque.push(4);\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cunshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\ndeque.unshift(3);\ndeque.unshift(1);\nconsole.log(\"\u53cc\u5411\u961f\u5217 deque = \", deque);\n/* \u8bbf\u95ee\u5143\u7d20 */\nconst peekFirst: number = deque[0];\nconsole.log(\"\u961f\u9996\u5143\u7d20 peekFirst = \" + peekFirst);\nconst peekLast: number = deque[deque.length - 1];\nconsole.log(\"\u961f\u5c3e\u5143\u7d20 peekLast = \" + peekLast);\n/* \u5143\u7d20\u51fa\u961f */\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst popFront: number = deque.shift() as number;\nconsole.log(\"\u961f\u9996\u51fa\u961f\u5143\u7d20 popFront = \" + popFront + \"\uff0c\u961f\u9996\u51fa\u961f\u540e deque = \" + deque);\nconst popBack: number = deque.pop() as number;\nconsole.log(\"\u961f\u5c3e\u51fa\u961f\u5143\u7d20 popBack = \" + popBack + \"\uff0c\u961f\u5c3e\u51fa\u961f\u540e deque = \" + deque);\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nconst size: number = deque.length;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u957f\u5ea6 size = \" + size);\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst isEmpty: boolean = size === 0;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a = \" + isEmpty);\n
    deque.c
    \n
    deque.cs
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// \u5728 C# \u4e2d\uff0c\u5c06\u94fe\u8868 LinkedList \u770b\u4f5c\u53cc\u5411\u961f\u5217\u6765\u4f7f\u7528\nLinkedList<int> deque = new LinkedList<int>();\n/* \u5143\u7d20\u5165\u961f */\ndeque.AddLast(2);   // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.AddLast(5);\ndeque.AddLast(4);\ndeque.AddFirst(3);  // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.AddFirst(1);\n/* \u8bbf\u95ee\u5143\u7d20 */\nint peekFirst = deque.First.Value;  // \u961f\u9996\u5143\u7d20\nint peekLast = deque.Last.Value;    // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\ndeque.RemoveFirst();  // \u961f\u9996\u5143\u7d20\u51fa\u961f\ndeque.RemoveLast();   // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size = deque.Count;\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = deque.Count == 0;\n
    deque.swift
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// Swift \u6ca1\u6709\u5185\u7f6e\u7684\u53cc\u5411\u961f\u5217\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u53cc\u5411\u961f\u5217\u6765\u4f7f\u7528\nvar deque: [Int] = []\n/* \u5143\u7d20\u5165\u961f */\ndeque.append(2) // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.append(5)\ndeque.append(4)\ndeque.insert(3, at: 0) // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.insert(1, at: 0)\n/* \u8bbf\u95ee\u5143\u7d20 */\nlet peekFirst = deque.first! // \u961f\u9996\u5143\u7d20\nlet peekLast = deque.last! // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\n// \u4f7f\u7528 Array \u6a21\u62df\u65f6 pollFirst \u7684\u590d\u6742\u5ea6\u4e3a O(n)\nlet pollFirst = deque.removeFirst() // \u961f\u9996\u5143\u7d20\u51fa\u961f\nlet pollLast = deque.removeLast() // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nlet size = deque.count\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nlet isEmpty = deque.isEmpty\n
    deque.zig
    \n
    "},{"location":"chapter_stack_and_queue/deque/#532","title":"5.3.2. \u00a0 \u53cc\u5411\u961f\u5217\u5b9e\u73b0 *","text":"

    \u4e0e\u961f\u5217\u7c7b\u4f3c\uff0c\u53cc\u5411\u961f\u5217\u540c\u6837\u53ef\u4ee5\u4f7f\u7528\u94fe\u8868\u6216\u6570\u7ec4\u6765\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/deque/#_1","title":"\u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u7684\u5b9e\u73b0","text":"

    \u56de\u5fc6\u4e0a\u8282\u5185\u5bb9\uff0c\u7531\u4e8e\u53ef\u4ee5\u65b9\u4fbf\u5730\u5220\u9664\u94fe\u8868\u5934\u7ed3\u70b9\uff08\u5bf9\u5e94\u51fa\u961f\u64cd\u4f5c\uff09\uff0c\u4ee5\u53ca\u5728\u94fe\u8868\u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0\u65b0\u7ed3\u70b9\uff08\u5bf9\u5e94\u5165\u961f\u64cd\u4f5c\uff09\uff0c\u56e0\u6b64\u6211\u4eec\u4f7f\u7528\u666e\u901a\u5355\u5411\u94fe\u8868\u6765\u5b9e\u73b0\u961f\u5217\u3002

    \u800c\u53cc\u5411\u961f\u5217\u7684\u5934\u90e8\u548c\u5c3e\u90e8\u90fd\u53ef\u4ee5\u6267\u884c\u5165\u961f\u4e0e\u51fa\u961f\u64cd\u4f5c\uff0c\u6362\u8a00\u4e4b\uff0c\u53cc\u5411\u961f\u5217\u7684\u64cd\u4f5c\u662f\u201c\u9996\u5c3e\u5bf9\u79f0\u201d\u7684\uff0c\u4e5f\u9700\u8981\u5b9e\u73b0\u53e6\u4e00\u4e2a\u5bf9\u79f0\u65b9\u5411\u7684\u64cd\u4f5c\u3002\u56e0\u6b64\uff0c\u53cc\u5411\u961f\u5217\u9700\u8981\u4f7f\u7528\u300c\u53cc\u5411\u94fe\u8868\u300d\u6765\u5b9e\u73b0\u3002

    \u6211\u4eec\u5c06\u53cc\u5411\u94fe\u8868\u7684\u5934\u7ed3\u70b9\u548c\u5c3e\u7ed3\u70b9\u5206\u522b\u770b\u4f5c\u53cc\u5411\u961f\u5217\u7684\u961f\u9996\u548c\u961f\u5c3e\uff0c\u5e76\u4e14\u5b9e\u73b0\u5728\u4e24\u7aef\u90fd\u80fd\u6dfb\u52a0\u4e0e\u5220\u9664\u7ed3\u70b9\u3002

    LinkedListDequepushLast()pushFirst()pollLast()pollFirst()

    \u4ee5\u4e0b\u662f\u5177\u4f53\u5b9e\u73b0\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linkedlist_deque.java
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nint val;       // \u7ed3\u70b9\u503c\nListNode next; // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nListNode prev; // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nListNode(int val) {\nthis.val = val;\nprev = next = null;\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate ListNode front, rear; // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear\nprivate int queSize = 0;      // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\npublic LinkedListDeque() {\nfront = rear = null;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u961f\u64cd\u4f5c */\nprivate void push(int num, boolean isFront) {\nListNode node = new ListNode(num);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (isEmpty())\nfront = rear = node;\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelse if (isFront) {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nfront.prev = node;\nnode.next = front;\nfront = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nrear.next = node;\nnode.prev = rear;\nrear = node;  // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize++; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n}\n/* \u961f\u9996\u5165\u961f */\npublic void pushFirst(int num) {\npush(num, true);\n}\n/* \u961f\u5c3e\u5165\u961f */\npublic void pushLast(int num) {\npush(num, false);\n}\n/* \u51fa\u961f\u64cd\u4f5c */\nprivate Integer poll(boolean isFront) {\n// \u82e5\u961f\u5217\u4e3a\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de null\nif (isEmpty())\nreturn null;\nint val;\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif (isFront) {\nval = front.val; // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nListNode fNext = front.next;\nif (fNext != null) {\nfNext.prev = null;\nfront.next = null;\n}\nfront = fNext;   // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\n} else {\nval = rear.val;  // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nListNode rPrev = rear.prev;\nif (rPrev != null) {\nrPrev.next = null;\nrear.prev = null;\n}\nrear = rPrev;    // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize--; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val;\n}\n/* \u961f\u9996\u51fa\u961f */\npublic Integer pollFirst() {\nreturn poll(true);\n}\n/* \u961f\u5c3e\u51fa\u961f */\npublic Integer pollLast() {\nreturn poll(false);\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic Integer peekFirst() {\nreturn isEmpty() ? null : front.val;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npublic Integer peekLast() {\nreturn isEmpty() ? null : rear.val;\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\npublic int[] toArray() {\nListNode node = front;\nint[] res = new int[size()];\nfor (int i = 0; i < res.length; i++) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_deque.cpp
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nstruct DoublyListNode {\nint val;               // \u7ed3\u70b9\u503c\nDoublyListNode *next;  // \u540e\u7ee7\u7ed3\u70b9\u6307\u9488\nDoublyListNode *prev;  // \u524d\u9a71\u7ed3\u70b9\u6307\u9488\nDoublyListNode(int val) : val(val), prev(nullptr), next(nullptr) {}\n};\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate:\nDoublyListNode *front, *rear; // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear\nint queSize = 0;              // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nLinkedListDeque() : front(nullptr), rear(nullptr) {}\n/* \u6790\u6784\u65b9\u6cd5 */\n~LinkedListDeque() {\n// \u91ca\u653e\u5185\u5b58\nDoublyListNode *pre, *cur = front;\nwhile (cur != nullptr) {\npre = cur;\ncur = cur->next;\ndelete pre;\n}\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u961f\u64cd\u4f5c */\nvoid push(int num, bool isFront) {\nDoublyListNode *node = new DoublyListNode(num);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (isEmpty())\nfront = rear = node;\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelse if (isFront) {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nfront->prev = node;\nnode->next = front;\nfront = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nrear->next = node;\nnode->prev = rear;\nrear = node;  // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize++; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n}\n/* \u961f\u9996\u5165\u961f */\nvoid pushFirst(int num) {\npush(num, true);\n}\n/* \u961f\u5c3e\u5165\u961f */\nvoid pushLast(int num) {\npush(num, false);\n}\n/* \u51fa\u961f\u64cd\u4f5c */\nint poll(bool isFront) {\n// \u82e5\u961f\u5217\u4e3a\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de -1\nif (isEmpty())\nreturn -1;\nint val;\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif (isFront) {\nval = front->val; // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nDoublyListNode *fNext = front->next;\nif (fNext != nullptr) {\nfNext->prev = nullptr;\nfront->next = nullptr;\n}\nfront = fNext;   // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\n} else {\nval = rear->val; // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nDoublyListNode *rPrev = rear->prev;\nif (rPrev != nullptr) {\nrPrev->next = nullptr;\nrear->prev = nullptr;\n}\nrear = rPrev;    // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize--; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val;\n}\n/* \u961f\u9996\u51fa\u961f */\nint pollFirst() {\nreturn poll(true);\n}\n/* \u961f\u5c3e\u51fa\u961f */\nint pollLast() {\nreturn poll(false);\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peekFirst() {\nreturn isEmpty() ? -1 : front->val;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nint peekLast() {\nreturn isEmpty() ? -1 : rear->val;\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nvector<int> toVector() {\nDoublyListNode *node = front;\nvector<int> res(size());\nfor (int i = 0; i < res.size(); i++) {\nres[i] = node->val;\nnode = node->next;\n}\nreturn res;\n}\n};\n
    linkedlist_deque.py
    class ListNode:\n\"\"\" \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 \"\"\"\ndef __init__(self, val: int) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.val: int = val\nself.next: Optional[ListNode] = None  # \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nself.prev: Optional[ListNode] = None  # \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nclass LinkedListDeque:\n\"\"\" \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 \"\"\"\ndef __init__(self) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.front: Optional[ListNode] = None # \u5934\u7ed3\u70b9 front\nself.rear: Optional[ListNode] = None  # \u5c3e\u7ed3\u70b9 rear\nself.__size: int = 0        # \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.size() == 0\ndef push(self, num: int, is_front: bool) -> None:\n\"\"\" \u5165\u961f\u64cd\u4f5c \"\"\"\nnode = ListNode(num)\n# \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif self.is_empty():\nself.front = self.rear = node\n# \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelif is_front:\n# \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nself.front.prev = node\nnode.next = self.front\nself.front = node  # \u66f4\u65b0\u5934\u7ed3\u70b9\n# \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\nelse:\n# \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nself.rear.next = node\nnode.prev = self.rear\nself.rear = node  # \u66f4\u65b0\u5c3e\u7ed3\u70b9\nself.__size += 1  # \u66f4\u65b0\u961f\u5217\u957f\u5ea6\ndef push_first(self, num: int) -> None:\n\"\"\" \u961f\u9996\u5165\u961f \"\"\"\nself.push(num, True)\ndef push_last(self, num: int) -> None:\n\"\"\" \u961f\u5c3e\u5165\u961f \"\"\"\nself.push(num, False)\ndef poll(self, is_front: bool) -> int:\n\"\"\" \u51fa\u961f\u64cd\u4f5c \"\"\"\n# \u82e5\u961f\u5217\u4e3a\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de None\nif self.is_empty():\nreturn None\n# \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif is_front:\nval: int = self.front.val  # \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n# \u5220\u9664\u5934\u7ed3\u70b9\nfnext: Optional[ListNode] = self.front.next\nif fnext != None:\nfnext.prev = None\nself.front.next = None\nself.front = fnext  # \u66f4\u65b0\u5934\u7ed3\u70b9\n# \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\nelse:\nval: int = self.rear.val  # \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n# \u5220\u9664\u5c3e\u7ed3\u70b9\nrprev: Optional[ListNode] = self.rear.prev\nif rprev != None:\nrprev.next = None\nself.rear.prev = None\nself.rear = rprev  # \u66f4\u65b0\u5c3e\u7ed3\u70b9\nself.__size -= 1  # \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val\ndef poll_first(self) -> int:\n\"\"\" \u961f\u9996\u51fa\u961f \"\"\"\nreturn self.poll(True)\ndef poll_last(self) -> int:\n\"\"\" \u961f\u5c3e\u51fa\u961f \"\"\"\nreturn self.poll(False)\ndef peek_first(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nreturn None if self.is_empty() else self.front.val\ndef peek_last(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 \"\"\"\nreturn None if self.is_empty() else self.rear.val\ndef to_array(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 \"\"\"\nnode: Optional[ListNode] = self.front\nres: List[int] = [0] * self.size()\nfor i in range(self.size()):\nres[i] = node.val\nnode = node.next\nreturn res\n
    linkedlist_deque.go
    /* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\ntype linkedListDeque struct {\n// \u4f7f\u7528\u5185\u7f6e\u5305 list\ndata *list.List\n}\n/* \u521d\u59cb\u5316\u53cc\u7aef\u961f\u5217 */\nfunc newLinkedListDeque() *linkedListDeque {\nreturn &linkedListDeque{\ndata: list.New(),\n}\n}\n/* \u961f\u9996\u5143\u7d20\u5165\u961f */\nfunc (s *linkedListDeque) pushFirst(value any) {\ns.data.PushFront(value)\n}\n/* \u961f\u5c3e\u5143\u7d20\u5165\u961f */\nfunc (s *linkedListDeque) pushLast(value any) {\ns.data.PushBack(value)\n}\n/* \u961f\u9996\u5143\u7d20\u51fa\u961f */\nfunc (s *linkedListDeque) pollFirst() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u961f\u5c3e\u5143\u7d20\u51fa\u961f */\nfunc (s *linkedListDeque) pollLast() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc (s *linkedListDeque) peekFirst() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\nreturn e.Value\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nfunc (s *linkedListDeque) peekLast() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\nreturn e.Value\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc (s *linkedListDeque) size() int {\nreturn s.data.Len()\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc (s *linkedListDeque) isEmpty() bool {\nreturn s.data.Len() == 0\n}\n/* \u83b7\u53d6 List \u7528\u4e8e\u6253\u5370 */\nfunc (s *linkedListDeque) toList() *list.List {\nreturn s.data\n}\n
    linkedlist_deque.js
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nprev;   // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nnext;   // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nval;    // \u7ed3\u70b9\u503c\nconstructor(val) {\nthis.val = val;\nthis.next = null;\nthis.prev = null;\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\n#front;  // \u5934\u7ed3\u70b9 front\n#rear;   // \u5c3e\u7ed3\u70b9 rear\n#queSize;    // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\nconstructor() {\nthis.#front = null;\nthis.#rear = null;\nthis.#queSize = 0;\n}\n/* \u961f\u5c3e\u5165\u961f\u64cd\u4f5c */\npushLast(val) {\nconst node = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.#queSize === 0) {\nthis.#front = node;\nthis.#rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nthis.#rear.next = node;\nnode.prev = this.#rear;\nthis.#rear = node; // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nthis.#queSize++;\n}\n/* \u961f\u9996\u5165\u961f\u64cd\u4f5c */\npushFirst(val) {\nconst node = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.#queSize === 0) {\nthis.#front = node;\nthis.#rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nthis.#front.prev = node;\nnode.next = this.#front;\nthis.#front = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\nthis.#queSize++;\n}\n/* \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c */\npollLast() {\nif (this.#queSize === 0) {\nreturn null;\n}\nconst value = this.#rear.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nlet temp = this.#rear.prev;\nif (temp !== null) {\ntemp.next = null;\nthis.#rear.prev = null;\n}\nthis.#rear = temp;   // \u66f4\u65b0\u5c3e\u7ed3\u70b9\nthis.#queSize--;\nreturn value;\n}\n/* \u961f\u9996\u51fa\u961f\u64cd\u4f5c */\npollFirst() {\nif (this.#queSize === 0) {\nreturn null;\n}\nconst value = this.#front.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nlet temp = this.#front.next;\nif (temp !== null) {\ntemp.prev = null;\nthis.#front.next = null;\n}\nthis.#front = temp;   // \u66f4\u65b0\u5934\u7ed3\u70b9\nthis.#queSize--;\nreturn value;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast() {\nreturn this.#queSize === 0 ? null : this.#rear.val;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst() {\nreturn this.#queSize === 0 ? null : this.#front.val;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.#queSize === 0;\n}\n/* \u6253\u5370\u53cc\u5411\u961f\u5217 */\nprint() {\nconst arr = [];\nlet temp = this.#front;\nwhile (temp !== null) {\narr.push(temp.val);\ntemp = temp.next;\n}\nconsole.log(\"[\" + arr.join(\", \") + \"]\");\n}\n}\n
    linkedlist_deque.ts
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nprev: ListNode;     // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nnext: ListNode;     // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nval: number;        // \u7ed3\u70b9\u503c\nconstructor(val: number) {\nthis.val = val;\nthis.next = null;\nthis.prev = null;\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate front: ListNode;    // \u5934\u7ed3\u70b9 front\nprivate rear: ListNode;     // \u5c3e\u7ed3\u70b9 rear\nprivate queSize: number;        // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\nconstructor() {\nthis.front = null;\nthis.rear = null;\nthis.queSize = 0;\n}\n/* \u961f\u5c3e\u5165\u961f\u64cd\u4f5c */\npushLast(val: number): void {\nconst node: ListNode = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.queSize === 0) {\nthis.front = node;\nthis.rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nthis.rear.next = node;\nnode.prev = this.rear;\nthis.rear = node; // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nthis.queSize++;\n}\n/* \u961f\u9996\u5165\u961f\u64cd\u4f5c */\npushFirst(val: number): void {\nconst node: ListNode = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.queSize === 0) {\nthis.front = node;\nthis.rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nthis.front.prev = node;\nnode.next = this.front;\nthis.front = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\nthis.queSize++;\n}\n/* \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c */\npollLast(): number {\nif (this.queSize === 0) {\nreturn null;\n}\nconst value: number = this.rear.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nlet temp: ListNode = this.rear.prev;\nif (temp !== null) {\ntemp.next = null;\nthis.rear.prev = null;\n}\nthis.rear = temp;   // \u66f4\u65b0\u5c3e\u7ed3\u70b9\nthis.queSize--;\nreturn value;\n}\n/* \u961f\u9996\u51fa\u961f\u64cd\u4f5c */\npollFirst(): number {\nif (this.queSize === 0) {\nreturn null;\n}\nconst value: number = this.front.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nlet temp: ListNode = this.front.next;\nif (temp !== null) {\ntemp.prev = null;\nthis.front.next = null;\n}\nthis.front = temp;   // \u66f4\u65b0\u5934\u7ed3\u70b9\nthis.queSize--;\nreturn value;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast(): number {\nreturn this.queSize === 0 ? null : this.rear.val;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst(): number {\nreturn this.queSize === 0 ? null : this.front.val;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.queSize === 0;\n}\n/* \u6253\u5370\u53cc\u5411\u961f\u5217 */\nprint(): void {\nconst arr: number[] = [];\nlet temp: ListNode = this.front;\nwhile (temp !== null) {\narr.push(temp.val);\ntemp = temp.next;\n}\nconsole.log(\"[\" + arr.join(\", \") + \"]\");\n}\n}\n
    linkedlist_deque.c
    [class]{ListNode}-[func]{}\n[class]{LinkedListDeque}-[func]{}\n
    linkedlist_deque.cs
    [class]{ListNode}-[func]{}\n[class]{LinkedListDeque}-[func]{}\n
    linkedlist_deque.swift
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar next: ListNode? // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nvar prev: ListNode? // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\ninit(val: Int) {\nself.val = val\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate var front: ListNode? // \u5934\u7ed3\u70b9 front\nprivate var rear: ListNode? // \u5c3e\u7ed3\u70b9 rear\nprivate var queSize: Int // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\ninit() {\nqueSize = 0\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nqueSize\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u5165\u961f\u64cd\u4f5c */\nprivate func push(num: Int, isFront: Bool) {\nlet node = ListNode(val: num)\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif isEmpty() {\nfront = node\nrear = node\n}\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelse if isFront {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nfront?.prev = node\nnode.next = front\nfront = node // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\nelse {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nrear?.next = node\nnode.prev = rear\nrear = node // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize += 1 // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n}\n/* \u961f\u9996\u5165\u961f */\nfunc pushFirst(num: Int) {\npush(num: num, isFront: true)\n}\n/* \u961f\u5c3e\u5165\u961f */\nfunc pushLast(num: Int) {\npush(num: num, isFront: false)\n}\n/* \u51fa\u961f\u64cd\u4f5c */\nprivate func poll(isFront: Bool) -> Int {\nif isEmpty() {\nfatalError(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\")\n}\nlet val: Int\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif isFront {\nval = front!.val // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nlet fNext = front?.next\nif fNext != nil {\nfNext?.prev = nil\nfront?.next = nil\n}\nfront = fNext // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\nelse {\nval = rear!.val // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nlet rPrev = rear?.prev\nif rPrev != nil {\nrPrev?.next = nil\nrear?.prev = nil\n}\nrear = rPrev // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize -= 1 // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val\n}\n/* \u961f\u9996\u51fa\u961f */\nfunc pollFirst() -> Int {\npoll(isFront: true)\n}\n/* \u961f\u5c3e\u51fa\u961f */\nfunc pollLast() -> Int {\npoll(isFront: false)\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peekFirst() -> Int? {\nisEmpty() ? nil : front?.val\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nfunc peekLast() -> Int? {\nisEmpty() ? nil : rear?.val\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nfunc toArray() -> [Int] {\nvar node = front\nvar res = Array(repeating: 0, count: size())\nfor i in res.indices {\nres[i] = node!.val\nnode = node?.next\n}\nreturn res\n}\n}\n
    linkedlist_deque.zig
    // \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\nfn ListNode(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nval: T = undefined,     // \u7ed3\u70b9\u503c\nnext: ?*Self = null,    // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nprev: ?*Self = null,    // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\n// Initialize a list node with specific value\npub fn init(self: *Self, x: i32) void {\nself.val = x;\nself.next = null;\nself.prev = null;\n}\n};\n}\n// \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217\nfn LinkedListDeque(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nfront: ?*ListNode(T) = null,                    // \u5934\u7ed3\u70b9 front\nrear: ?*ListNode(T) = null,                     // \u5c3e\u7ed3\u70b9 rear\ndeqSize: usize = 0,                             // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u961f\u5217\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.front = null;\nself.rear = null;\nself.deqSize = 0;\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.deqSize;\n}\n// \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u5165\u961f\u64cd\u4f5c\npub fn push(self: *Self, num: T, isFront: bool) !void {\nvar node = try self.mem_allocator.create(ListNode(T));\nnode.init(num);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (self.isEmpty()) {\nself.front = node;\nself.rear = node;\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\n} else if (isFront) {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nself.front.?.prev = node;\nnode.next = self.front;\nself.front = node;  // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nself.rear.?.next = node;\nnode.prev = self.rear;\nself.rear = node;   // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nself.deqSize += 1;      // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n} // \u961f\u9996\u5165\u961f\npub fn pushFirst(self: *Self, num: T) !void {\ntry self.push(num, true);\n} // \u961f\u5c3e\u5165\u961f\npub fn pushLast(self: *Self, num: T) !void {\ntry self.push(num, false);\n} // \u51fa\u961f\u64cd\u4f5c\npub fn poll(self: *Self, isFront: bool) T {\nif (self.isEmpty()) @panic(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nvar val: T = undefined;\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif (isFront) {\nval = self.front.?.val;     // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nvar fNext = self.front.?.next;\nif (fNext != null) {\nfNext.?.prev = null;\nself.front.?.next = null;\n}\nself.front = fNext;         // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\n} else {\nval = self.rear.?.val;      // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nvar rPrev = self.rear.?.prev;\nif (rPrev != null) {\nrPrev.?.next = null;\nself.rear.?.prev = null;\n}\nself.rear = rPrev;          // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nself.deqSize -= 1;              // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val;\n} // \u961f\u9996\u51fa\u961f\npub fn pollFirst(self: *Self) T {\nreturn self.poll(true);\n} // \u961f\u5c3e\u51fa\u961f\npub fn pollLast(self: *Self) T {\nreturn self.poll(false);\n} // \u8bbf\u95ee\u961f\u9996\u5143\u7d20\npub fn peekFirst(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nreturn self.front.?.val;\n}  // \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20\npub fn peekLast(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nreturn self.rear.?.val;\n}\n// \u5c06\u94fe\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\nvar node = self.front;\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nwhile (i < res.len) : (i += 1) {\nres[i] = node.?.val;\nnode = node.?.next;\n}\nreturn res;\n}\n// \u6253\u5370\u53cc\u5411\u961f\u5217\npub fn print(self: *Self) !void {\nvar nums = try self.toArray();\nstd.debug.print(\"[\", .{});\nif (nums.len > 0) {\nfor (nums) |num, j| {\nstd.debug.print(\"{}{s}\", .{num, if (j == nums.len - 1) \"]\" else \" <-> \" });\n}\n} else {\nstd.debug.print(\"]\", .{});\n}\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/deque/#_2","title":"\u57fa\u4e8e\u6570\u7ec4\u7684\u5b9e\u73b0","text":"

    \u4e0e\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u961f\u5217\u7c7b\u4f3c\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528\u73af\u5f62\u6570\u7ec4\u6765\u5b9e\u73b0\u53cc\u5411\u961f\u5217\u3002\u5728\u5b9e\u73b0\u961f\u5217\u7684\u57fa\u7840\u4e0a\uff0c\u589e\u52a0\u5b9e\u73b0\u201c\u961f\u9996\u5165\u961f\u201d\u548c\u201c\u961f\u5c3e\u51fa\u961f\u201d\u65b9\u6cd5\u5373\u53ef\u3002

    ArrayDequepushLast()pushFirst()pollLast()pollFirst()

    \u4ee5\u4e0b\u662f\u5177\u4f53\u5b9e\u73b0\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_deque.java
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate int[] nums;  // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate int front;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate int queSize; // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\npublic ArrayDeque(int capacity) {\nthis.nums = new int[capacity];\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\npublic int capacity() {\nreturn nums.length;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn queSize == 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nprivate int index(int i) {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + capacity()) % capacity();\n}\n/* \u961f\u9996\u5165\u961f */\npublic void pushFirst(int num) {\nif (queSize == capacity()) {\nSystem.out.println(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nfront = index(front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nnums[front] = num;\nqueSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\npublic void pushLast(int num) {\nif (queSize == capacity()) {\nSystem.out.println(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nint rear = index(front + queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\npublic int pollFirst() {\nint num = peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfront = index(front + 1);\nqueSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\npublic int pollLast() {\nint num = peekLast();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peekFirst() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn nums[front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npublic int peekLast() {\nif (isEmpty())\nthrow new EmptyStackException();\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nint last = index(front + queSize - 1);\nreturn nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\npublic int[] toArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] res = new int[queSize];\nfor (int i = 0, j = front; i < queSize; i++, j++) {\nres[i] = nums[index(j)];\n}\nreturn res;\n}\n}\n
    array_deque.cpp
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate:\nvector<int> nums;  // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nint front;         // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nint queSize;       // \u53cc\u5411\u961f\u5217\u957f\u5ea6\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nArrayDeque(int capacity) {\nnums.resize(capacity);\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\nint capacity() {\nreturn nums.size();\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty() {\nreturn queSize == 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nint index(int i) {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + capacity()) % capacity();\n}\n/* \u961f\u9996\u5165\u961f */\nvoid pushFirst(int num) {\nif (queSize == capacity()) {\ncout << \"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\" << endl;\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nfront = index(front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nnums[front] = num;\nqueSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\nvoid pushLast(int num) {\nif (queSize == capacity()) {\ncout << \"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\" << endl;\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nint rear = index(front + queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\nint pollFirst() {\nint num = peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfront = index(front + 1);\nqueSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\nint pollLast() {\nint num = peekLast();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peekFirst() {\nif (isEmpty())\nthrow out_of_range(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nreturn nums[front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nint peekLast() {\nif (isEmpty())\nthrow out_of_range(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nint last = index(front + queSize - 1);\nreturn nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nvector<int> toVector() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvector<int> res(queSize);\nfor (int i = 0, j = front; i < queSize; i++, j++) {\nres[i] = nums[index(j)];\n}\nreturn res;\n}\n};\n
    array_deque.py
    class ArrayDeque:\n\"\"\" \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 \"\"\"\ndef __init__(self, capacity: int) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__nums: List[int] = [0] * capacity\nself.__front: int = 0\nself.__size: int = 0\ndef capacity(self) -> int:\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf \"\"\"\nreturn len(self.__nums)\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.__size == 0\ndef index(self, i: int) -> int:\n\"\"\" \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 \"\"\"\n# \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n# \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n# \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + self.capacity()) % self.capacity()\ndef push_first(self, num: int) -> None:\n\"\"\" \u961f\u9996\u5165\u961f \"\"\"\nif self.__size == self.capacity():\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n# \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n# \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nself.__front = self.index(self.__front - 1)\n# \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nself.__nums[self.__front] = num\nself.__size += 1\ndef push_last(self, num: int) -> None:\n\"\"\" \u961f\u5c3e\u5165\u961f \"\"\"\nif self.__size == self.capacity():\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n# \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nrear = self.index(self.__front + self.__size)\n# \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nself.__nums[rear] = num\nself.__size += 1\ndef poll_first(self) -> int:\n\"\"\" \u961f\u9996\u51fa\u961f \"\"\"\nnum = self.peek_first()\n# \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nself.__front = self.index(self.__front + 1)\nself.__size -= 1\nreturn num\ndef poll_last(self) -> int:\n\"\"\" \u961f\u5c3e\u51fa\u961f \"\"\"\nnum = self.peek_last()\nself.__size -= 1\nreturn num\ndef peek_first(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\"\nreturn self.__nums[self.__front]\ndef peek_last(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\"\n# \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nlast = self.index(self.__front + self.__size - 1)\nreturn self.__nums[last]\ndef to_array(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 \"\"\"\n# \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nres = []\nfor i in range(self.__size):\nres.append(self.__nums[self.index(self.__front + i)])\nreturn res\n
    array_deque.go
    [class]{ArrayDeque}-[func]{}\n
    array_deque.js
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\n#nums;       // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\n#front;      // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\n#queSize;    // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(capacity) {\nthis.#nums = new Array(capacity);\nthis.#front = 0;\nthis.#queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\ncapacity() {\nreturn this.#nums.length;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.#queSize === 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nindex(i) {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + this.capacity()) % this.capacity();\n}\n/* \u961f\u9996\u5165\u961f */\npushFirst(num) {\nif (this.#queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nthis.#front = this.index(this.#front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nthis.#nums[this.#front] = num;\nthis.#queSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\npushLast(num) {\nif (this.#queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nconst rear = this.index(this.#front + this.#queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.#nums[rear] = num;\nthis.#queSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\npollFirst() {\nconst num = this.peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nthis.#front = this.index(this.#front + 1);\nthis.#queSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\npollLast() {\nconst num = this.peekLast();\nthis.#queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst() {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\nreturn this.#nums[this.#front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast() {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nconst last = this.index(this.#front + this.#queSize - 1);\nreturn this.#nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\ntoArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst res = [];\nfor (let i = 0, j = this.#front; i < this.#queSize; i++, j++) {\nres[i] = this.#nums[this.index(j)];\n}\nreturn res;\n}\n}\n
    array_deque.ts
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate nums: number[];     // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate front: number;      // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate queSize: number;    // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(capacity: number) {\nthis.nums = new Array(capacity);\nthis.front = 0;\nthis.queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\ncapacity(): number {\nreturn this.nums.length;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.queSize === 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nindex(i: number): number {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + this.capacity()) % this.capacity();\n}\n/* \u961f\u9996\u5165\u961f */\npushFirst(num: number): void {\nif (this.queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nthis.front = this.index(this.front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nthis.nums[this.front] = num;\nthis.queSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\npushLast(num: number): void {\nif (this.queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nconst rear: number = this.index(this.front + this.queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.nums[rear] = num;\nthis.queSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\npollFirst(): number {\nconst num: number = this.peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nthis.front = this.index(this.front + 1);\nthis.queSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\npollLast(): number {\nconst num: number = this.peekLast();\nthis.queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst(): number {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\nreturn this.nums[this.front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast(): number {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nconst last = this.index(this.front + this.queSize - 1);\nreturn this.nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\ntoArray(): number[] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst res: number[] = [];\nfor (let i = 0, j = this.front; i < this.queSize; i++, j++) {\nres[i] = this.nums[this.index(j)];\n}\nreturn res;\n}\n}\n
    array_deque.c
    [class]{ArrayDeque}-[func]{}\n
    array_deque.cs
    [class]{ArrayDeque}-[func]{}\n
    array_deque.swift
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate var nums: [Int] // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate var front: Int // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate var queSize: Int // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\ninit(capacity: Int) {\nnums = Array(repeating: 0, count: capacity)\nfront = 0\nqueSize = 0\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\nfunc capacity() -> Int {\nnums.count\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nqueSize\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nprivate func index(i: Int) -> Int {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\n(i + capacity()) % capacity()\n}\n/* \u961f\u9996\u5165\u961f */\nfunc pushFirst(num: Int) {\nif size() == capacity() {\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nfront = index(i: front - 1)\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nnums[front] = num\nqueSize += 1\n}\n/* \u961f\u5c3e\u5165\u961f */\nfunc pushLast(num: Int) {\nif size() == capacity() {\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nlet rear = index(i: front + size())\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num\nqueSize += 1\n}\n/* \u961f\u9996\u51fa\u961f */\nfunc pollFirst() -> Int {\nlet num = peekFirst()\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfront = index(i: front + 1)\nqueSize -= 1\nreturn num\n}\n/* \u961f\u5c3e\u51fa\u961f */\nfunc pollLast() -> Int {\nlet num = peekLast()\nqueSize -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peekFirst() -> Int {\nif isEmpty() {\nfatalError(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\")\n}\nreturn nums[front]\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nfunc peekLast() -> Int {\nif isEmpty() {\nfatalError(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\")\n}\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nlet last = index(i: front + size() - 1)\nreturn nums[last]\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nfunc toArray() -> [Int] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar res = Array(repeating: 0, count: size())\nfor (i, j) in sequence(first: (0, front), next: { $0 < self.size() - 1 ? ($0 + 1, $1 + 1) : nil }) {\nres[i] = nums[index(i: j)]\n}\nreturn res\n}\n}\n
    array_deque.zig
    [class]{ArrayDeque}-[func]{}\n
    "},{"location":"chapter_stack_and_queue/deque/#533","title":"5.3.3. \u00a0 \u53cc\u5411\u961f\u5217\u5e94\u7528","text":"

    \u53cc\u5411\u961f\u5217\u540c\u65f6\u8868\u73b0\u51fa\u6808\u4e0e\u961f\u5217\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u53ef\u4ee5\u5b9e\u73b0\u4e24\u8005\u7684\u6240\u6709\u5e94\u7528\uff0c\u5e76\u4e14\u63d0\u4f9b\u66f4\u9ad8\u7684\u81ea\u7531\u5ea6\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u8f6f\u4ef6\u7684\u201c\u64a4\u9500\u201d\u529f\u80fd\u9700\u8981\u4f7f\u7528\u6808\u6765\u5b9e\u73b0\uff1b\u7cfb\u7edf\u628a\u6bcf\u4e00\u6b21\u66f4\u6539\u64cd\u4f5c push \u5230\u6808\u4e2d\uff0c\u7136\u540e\u901a\u8fc7 pop \u5b9e\u73b0\u64a4\u9500\u3002\u7136\u800c\uff0c\u8003\u8651\u5230\u7cfb\u7edf\u8d44\u6e90\u6709\u9650\uff0c\u8f6f\u4ef6\u4e00\u822c\u4f1a\u9650\u5236\u64a4\u9500\u7684\u6b65\u6570\uff08\u4f8b\u5982\u4ec5\u5141\u8bb8\u4fdd\u5b58 \\(50\\) \u6b65\uff09\uff0c\u90a3\u4e48\u5f53\u6808\u7684\u957f\u5ea6 \\(> 50\\) \u65f6\uff0c\u8f6f\u4ef6\u5c31\u9700\u8981\u5728\u6808\u5e95\uff08\u5373\u961f\u9996\uff09\u6267\u884c\u5220\u9664\uff0c\u4f46\u6808\u65e0\u6cd5\u5b9e\u73b0\uff0c\u6b64\u65f6\u5c31\u9700\u8981\u4f7f\u7528\u53cc\u5411\u961f\u5217\u6765\u66ff\u4ee3\u6808\u3002\u6ce8\u610f\uff0c\u201c\u64a4\u9500\u201d\u7684\u6838\u5fc3\u903b\u8f91\u4ecd\u7136\u662f\u6808\u7684\u5148\u5165\u540e\u51fa\uff0c\u53ea\u662f\u53cc\u5411\u961f\u5217\u53ef\u4ee5\u66f4\u52a0\u7075\u6d3b\u5730\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/queue/","title":"5.2. \u00a0 \u961f\u5217","text":"

    \u300c\u961f\u5217 Queue\u300d\u662f\u4e00\u79cd\u9075\u5faa\u300c\u5148\u5165\u5148\u51fa first in, first out\u300d\u6570\u636e\u64cd\u4f5c\u89c4\u5219\u7684\u7ebf\u6027\u6570\u636e\u7ed3\u6784\u3002\u987e\u540d\u601d\u4e49\uff0c\u961f\u5217\u6a21\u62df\u7684\u662f\u6392\u961f\u73b0\u8c61\uff0c\u5373\u5916\u9762\u7684\u4eba\u4e0d\u65ad\u52a0\u5165\u961f\u5217\u5c3e\u90e8\uff0c\u800c\u5904\u4e8e\u961f\u5217\u5934\u90e8\u7684\u4eba\u4e0d\u65ad\u5730\u79bb\u5f00\u3002

    \u6211\u4eec\u5c06\u961f\u5217\u5934\u90e8\u79f0\u4e3a\u300c\u961f\u9996\u300d\uff0c\u961f\u5217\u5c3e\u90e8\u79f0\u4e3a\u300c\u961f\u5c3e\u300d\uff0c\u5c06\u628a\u5143\u7d20\u52a0\u5165\u961f\u5c3e\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u5165\u961f\u300d\uff0c\u5220\u9664\u961f\u9996\u5143\u7d20\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u51fa\u961f\u300d\u3002

    Fig. \u961f\u5217\u7684\u5148\u5165\u5148\u51fa\u89c4\u5219

    "},{"location":"chapter_stack_and_queue/queue/#521","title":"5.2.1. \u00a0 \u961f\u5217\u5e38\u7528\u64cd\u4f5c","text":"

    \u961f\u5217\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\uff0c\u65b9\u6cd5\u540d\u9700\u6839\u636e\u8bed\u8a00\u6765\u786e\u5b9a\uff0c\u6b64\u5904\u4ee5 Java \u4e3a\u4f8b\u3002

    \u65b9\u6cd5\u540d \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 push() \u5143\u7d20\u5165\u961f\uff0c\u5373\u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u961f\u5c3e \\(O(1)\\) poll() \u961f\u9996\u5143\u7d20\u51fa\u961f \\(O(1)\\) peek() \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \\(O(1)\\)

    \u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u597d\u7684\u961f\u5217\u7c7b\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig queue.java
    /* \u521d\u59cb\u5316\u961f\u5217 */\nQueue<Integer> queue = new LinkedList<>();\n/* \u5143\u7d20\u5165\u961f */\nqueue.offer(1);\nqueue.offer(3);\nqueue.offer(2);\nqueue.offer(5);\nqueue.offer(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek = queue.peek();\n/* \u5143\u7d20\u51fa\u961f */\nint poll = queue.poll();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size = queue.size();\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = queue.isEmpty();\n
    queue.cpp
    /* \u521d\u59cb\u5316\u961f\u5217 */\nqueue<int> queue;\n/* \u5143\u7d20\u5165\u961f */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint front = queue.front();\n/* \u5143\u7d20\u51fa\u961f */\nqueue.pop();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size = queue.size();\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty = queue.empty();\n
    queue.py
    \"\"\" \u521d\u59cb\u5316\u961f\u5217 \"\"\"\n# \u5728 Python \u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u5c06\u53cc\u5411\u961f\u5217\u7c7b deque \u770b\u4f5c\u961f\u5217\u4f7f\u7528\n# \u867d\u7136 queue.Queue() \u662f\u7eaf\u6b63\u7684\u961f\u5217\u7c7b\uff0c\u4f46\u4e0d\u592a\u597d\u7528\uff0c\u56e0\u6b64\u4e0d\u5efa\u8bae\nque: Deque[int] = collections.deque()\n\"\"\" \u5143\u7d20\u5165\u961f \"\"\"\nque.append(1)\nque.append(3)\nque.append(2)\nque.append(5)\nque.append(4)\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nfront: int = que[0];\n\"\"\" \u5143\u7d20\u51fa\u961f \"\"\"\npop: int = que.popleft()\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nsize: int = len(que)\n\"\"\" \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = len(que) == 0\n
    queue_test.go
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// \u5728 Go \u4e2d\uff0c\u5c06 list \u4f5c\u4e3a\u961f\u5217\u6765\u4f7f\u7528\nqueue := list.New()\n/* \u5143\u7d20\u5165\u961f */\nqueue.PushBack(1)\nqueue.PushBack(3)\nqueue.PushBack(2)\nqueue.PushBack(5)\nqueue.PushBack(4)\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek := queue.Front()\n/* \u5143\u7d20\u51fa\u961f */\npoll := queue.Front()\nqueue.Remove(poll)\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nsize := queue.Len()\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty := queue.Len() == 0\n
    queue.js
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// JavaScript \u6ca1\u6709\u5185\u7f6e\u7684\u961f\u5217\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u961f\u5217\u6765\u4f7f\u7528\nconst queue = [];\n/* \u5143\u7d20\u5165\u961f */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nconst peek = queue[0];\n/* \u5143\u7d20\u51fa\u961f */\n// \u5e95\u5c42\u662f\u6570\u7ec4\uff0c\u56e0\u6b64 shift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst poll = queue.shift();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nconst size = queue.length;\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst empty = queue.length === 0;\n
    queue.ts
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// TypeScript \u6ca1\u6709\u5185\u7f6e\u7684\u961f\u5217\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u961f\u5217\u6765\u4f7f\u7528 \nconst queue: number[] = [];\n/* \u5143\u7d20\u5165\u961f */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nconst peek = queue[0];\n/* \u5143\u7d20\u51fa\u961f */\n// \u5e95\u5c42\u662f\u6570\u7ec4\uff0c\u56e0\u6b64 shift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst poll = queue.shift();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nconst size = queue.length;\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst empty = queue.length === 0;\n
    queue.c
    \n
    queue.cs
    /* \u521d\u59cb\u5316\u961f\u5217 */\nQueue<int> queue = new();\n/* \u5143\u7d20\u5165\u961f */\nqueue.Enqueue(1);\nqueue.Enqueue(3);\nqueue.Enqueue(2);\nqueue.Enqueue(5);\nqueue.Enqueue(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek = queue.Peek();\n/* \u5143\u7d20\u51fa\u961f */\nint poll = queue.Dequeue();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size = queue.Count();\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = queue.Count() == 0;\n
    queue.swift
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// Swift \u6ca1\u6709\u5185\u7f6e\u7684\u961f\u5217\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u961f\u5217\u6765\u4f7f\u7528\nvar queue: [Int] = []\n/* \u5143\u7d20\u5165\u961f */\nqueue.append(1)\nqueue.append(3)\nqueue.append(2)\nqueue.append(5)\nqueue.append(4)\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nlet peek = queue.first!\n/* \u5143\u7d20\u51fa\u961f */\n// \u4f7f\u7528 Array \u6a21\u62df\u65f6 poll \u7684\u590d\u6742\u5ea6\u4e3a O(n)\nlet pool = queue.removeFirst()\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nlet size = queue.count\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nlet isEmpty = queue.isEmpty\n
    queue.zig
    \n
    "},{"location":"chapter_stack_and_queue/queue/#522","title":"5.2.2. \u00a0 \u961f\u5217\u5b9e\u73b0","text":"

    \u961f\u5217\u9700\u8981\u4e00\u79cd\u53ef\u4ee5\u5728\u4e00\u7aef\u6dfb\u52a0\uff0c\u5e76\u5728\u53e6\u4e00\u7aef\u5220\u9664\u7684\u6570\u636e\u7ed3\u6784\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u94fe\u8868\u6216\u6570\u7ec4\u6765\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/queue/#_1","title":"\u57fa\u4e8e\u94fe\u8868\u7684\u5b9e\u73b0","text":"

    \u6211\u4eec\u5c06\u94fe\u8868\u7684\u300c\u5934\u7ed3\u70b9\u300d\u548c\u300c\u5c3e\u7ed3\u70b9\u300d\u5206\u522b\u770b\u4f5c\u662f\u961f\u9996\u548c\u961f\u5c3e\uff0c\u5e76\u89c4\u5b9a\u961f\u5c3e\u53ea\u53ef\u6dfb\u52a0\u7ed3\u70b9\uff0c\u961f\u9996\u53ea\u53ef\u5220\u9664\u7ed3\u70b9\u3002

    LinkedListQueuepush()poll()

    \u4ee5\u4e0b\u662f\u4f7f\u7528\u94fe\u8868\u5b9e\u73b0\u961f\u5217\u7684\u793a\u4f8b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linkedlist_queue.java
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate ListNode front, rear;  // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear \nprivate int queSize = 0;\npublic LinkedListQueue() {\nfront = null;\nrear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u961f */\npublic void push(int num) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nListNode node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (front == null) {\nfront = node;\nrear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nrear.next = node;\nrear = node;\n}\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int poll() {\nint num = peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nfront = front.next;\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek() {\nif (size() == 0)\nthrow new EmptyStackException();\nreturn front.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray() {\nListNode node = front;\nint[] res = new int[size()];\nfor (int i = 0; i < res.length; i++) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.cpp
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate:\nListNode *front, *rear;  // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear \nint queSize;\npublic:\nLinkedListQueue() {\nfront = nullptr;\nrear = nullptr;\nqueSize = 0;\n}\n~LinkedListQueue() {\ndelete front;\ndelete rear;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn queSize == 0;\n}\n/* \u5165\u961f */\nvoid push(int num) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nListNode* node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (front == nullptr) {\nfront = node;\nrear = node;\n}\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\nelse {\nrear->next = node;\nrear = node;\n}\nqueSize++;\n}\n/* \u51fa\u961f */\nvoid poll() {\nint num = peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nListNode *tmp = front;\nfront = front->next;\n// \u91ca\u653e\u5185\u5b58\ndelete tmp; queSize--;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek() {\nif (size() == 0)\nthrow out_of_range(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn front->val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Vector \u5e76\u8fd4\u56de */\nvector<int> toVector() {\nListNode* node = front;\nvector<int> res(size());\nfor (int i = 0; i < res.size(); i++) {\nres[i] = node->val;\nnode = node->next;\n}\nreturn res;\n}\n};\n
    linkedlist_queue.py
    class LinkedListQueue:\n\"\"\" \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__front: Optional[ListNode] = None  # \u5934\u7ed3\u70b9 front\nself.__rear: Optional[ListNode] = None   # \u5c3e\u7ed3\u70b9 rear\nself.__size: int = 0\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn not self.__front\ndef push(self, num: int) -> None:\n\"\"\" \u5165\u961f \"\"\"\n# \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nnode = ListNode(num)\n# \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif self.__front is None:\nself.__front = node\nself.__rear = node\n# \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\nelse:\nself.__rear.next = node\nself.__rear = node\nself.__size += 1\ndef poll(self) -> int:\n\"\"\" \u51fa\u961f \"\"\"\nnum = self.peek()\n# \u5220\u9664\u5934\u7ed3\u70b9\nself.__front = self.__front.next\nself.__size -= 1\nreturn num\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nif self.size() == 0:\nprint(\"\u961f\u5217\u4e3a\u7a7a\")\nreturn False\nreturn self.__front.val\ndef to_list(self) -> List[int]:\n\"\"\" \u8f6c\u5316\u4e3a\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\nqueue = []\ntemp = self.__front\nwhile temp:\nqueue.append(temp.val)\ntemp = temp.next\nreturn queue\n
    linkedlist_queue.go
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\ntype linkedListQueue struct {\n// \u4f7f\u7528\u5185\u7f6e\u5305 list \u6765\u5b9e\u73b0\u961f\u5217\ndata *list.List\n}\n/* \u521d\u59cb\u5316\u961f\u5217 */\nfunc newLinkedListQueue() *linkedListQueue {\nreturn &linkedListQueue{\ndata: list.New(),\n}\n}\n/* \u5165\u961f */\nfunc (s *linkedListQueue) push(value any) {\ns.data.PushBack(value)\n}\n/* \u51fa\u961f */\nfunc (s *linkedListQueue) poll() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc (s *linkedListQueue) peek() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\nreturn e.Value\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc (s *linkedListQueue) size() int {\nreturn s.data.Len()\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc (s *linkedListQueue) isEmpty() bool {\nreturn s.data.Len() == 0\n}\n/* \u83b7\u53d6 List \u7528\u4e8e\u6253\u5370 */\nfunc (s *linkedListQueue) toList() *list.List {\nreturn s.data\n}\n
    linkedlist_queue.js
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\n#front;  // \u5934\u7ed3\u70b9 #front\n#rear;   // \u5c3e\u7ed3\u70b9 #rear\n#queSize = 0;\nconstructor() {\nthis.#front = null;\nthis.#rear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.size === 0;\n}\n/* \u5165\u961f */\npush(num) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nconst node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (!this.#front) {\nthis.#front = node;\nthis.#rear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nthis.#rear.next = node;\nthis.#rear = node;\n}\nthis.#queSize++;\n}\n/* \u51fa\u961f */\npoll() {\nconst num = this.peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nthis.#front = this.#front.next;\nthis.#queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek() {\nif (this.size === 0)\nthrow new Error(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn this.#front.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray() {\nlet node = this.#front;\nconst res = new Array(this.size);\nfor (let i = 0; i < res.length; i++) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.ts
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate front: ListNode | null; // \u5934\u7ed3\u70b9 front\nprivate rear: ListNode | null; // \u5c3e\u7ed3\u70b9 rear\nprivate queSize: number = 0;\nconstructor() {\nthis.front = null;\nthis.rear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.size === 0;\n}\n/* \u5165\u961f */\npush(num: number): void {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nconst node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (!this.front) {\nthis.front = node;\nthis.rear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nthis.rear!.next = node;\nthis.rear = node;\n}\nthis.queSize++;\n}\n/* \u51fa\u961f */\npoll(): number {\nconst num = this.peek();\nif (!this.front) throw new Error('\u961f\u5217\u4e3a\u7a7a');\n// \u5220\u9664\u5934\u7ed3\u70b9\nthis.front = this.front.next;\nthis.queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek(): number {\nif (this.size === 0) throw new Error('\u961f\u5217\u4e3a\u7a7a');\nreturn this.front!.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray(): number[] {\nlet node = this.front;\nconst res = new Array<number>(this.size);\nfor (let i = 0; i < res.length; i++) {\nres[i] = node!.val;\nnode = node!.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.c
    [class]{linkedListQueue}-[func]{}\n
    linkedlist_queue.cs
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue\n{\nprivate ListNode? front, rear;  // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear \nprivate int queSize = 0;\npublic LinkedListQueue()\n{\nfront = null;\nrear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn size() == 0;\n}\n/* \u5165\u961f */\npublic void push(int num)\n{\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nListNode node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (front == null)\n{\nfront = node;\nrear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n}\nelse if (rear != null)\n{\nrear.next = node;\nrear = node;\n}\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int poll()\n{\nint num = peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nfront = front?.next;\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek()\n{\nif (size() == 0 || front == null)\nthrow new Exception();\nreturn front.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray()\n{\nif (front == null)\nreturn Array.Empty<int>();\nListNode node = front;\nint[] res = new int[size()];\nfor (int i = 0; i < res.Length; i++)\n{\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.swift
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate var front: ListNode? // \u5934\u7ed3\u70b9\nprivate var rear: ListNode? // \u5c3e\u7ed3\u70b9\nprivate var _size = 0\ninit() {}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\n_size\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u5165\u961f */\nfunc push(num: Int) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nlet node = ListNode(x: num)\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif front == nil {\nfront = node\nrear = node\n}\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\nelse {\nrear?.next = node\nrear = node\n}\n_size += 1\n}\n/* \u51fa\u961f */\n@discardableResult\nfunc poll() -> Int {\nlet num = peek()\n// \u5220\u9664\u5934\u7ed3\u70b9\nfront = front?.next\n_size -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u961f\u5217\u4e3a\u7a7a\")\n}\nreturn front!.val\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nfunc toArray() -> [Int] {\nvar node = front\nvar res = Array(repeating: 0, count: size())\nfor i in res.indices {\nres[i] = node!.val\nnode = node?.next\n}\nreturn res\n}\n}\n
    linkedlist_queue.zig
    // \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217\nfn LinkedListQueue(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nfront: ?*inc.ListNode(T) = null,                // \u5934\u7ed3\u70b9 front\nrear: ?*inc.ListNode(T) = null,                 // \u5c3e\u7ed3\u70b9 rear\nqueSize: usize = 0,                             // \u961f\u5217\u7684\u957f\u5ea6\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u961f\u5217\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.front = null;\nself.rear = null;\nself.queSize = 0;\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.queSize;\n}\n// \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u8bbf\u95ee\u961f\u9996\u5143\u7d20\npub fn peek(self: *Self) T {\nif (self.size() == 0) @panic(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn self.front.?.val;\n}  // \u5165\u961f\npub fn push(self: *Self, num: T) !void {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nvar node = try self.mem_allocator.create(inc.ListNode(T));\nnode.init(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (self.front == null) {\nself.front = node;\nself.rear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nself.rear.?.next = node;\nself.rear = node;\n}\nself.queSize += 1;\n} // \u51fa\u961f\npub fn poll(self: *Self) T {\nvar num = self.peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nself.front = self.front.?.next;\nself.queSize -= 1;\nreturn num;\n} // \u5c06\u94fe\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\nvar node = self.front;\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nwhile (i < res.len) : (i += 1) {\nres[i] = node.?.val;\nnode = node.?.next;\n}\nreturn res;\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/queue/#_2","title":"\u57fa\u4e8e\u6570\u7ec4\u7684\u5b9e\u73b0","text":"

    \u6570\u7ec4\u7684\u5220\u9664\u9996\u5143\u7d20\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff0c\u8fd9\u4f1a\u5bfc\u81f4\u51fa\u961f\u64cd\u4f5c\u6548\u7387\u4f4e\u4e0b\u3002\u7136\u800c\uff0c\u6211\u4eec\u53ef\u4ee5\u91c7\u53d6\u4e0b\u8ff0\u7684\u5de7\u5999\u65b9\u6cd5\u6765\u907f\u514d\u8fd9\u4e2a\u95ee\u9898\u3002

    \u8003\u8651\u501f\u52a9\u4e00\u4e2a\u53d8\u91cf front \u6765\u6307\u5411\u961f\u9996\u5143\u7d20\u7684\u7d22\u5f15\uff0c\u5e76\u7ef4\u62a4\u53d8\u91cf queSize \u6765\u8bb0\u5f55\u961f\u5217\u957f\u5ea6\u3002\u6211\u4eec\u5b9a\u4e49 rear = front + queSize \uff0c\u8be5\u516c\u5f0f\u8ba1\u7b97\u51fa\u6765\u7684 rear \u6307\u5411\u201c\u961f\u5c3e\u5143\u7d20\u7d22\u5f15 \\(+1\\) \u201d\u7684\u4f4d\u7f6e\u3002

    \u5728\u8be5\u8bbe\u8ba1\u4e0b\uff0c\u6570\u7ec4\u4e2d\u5305\u542b\u5143\u7d20\u7684\u6709\u6548\u533a\u95f4\u4e3a [front, rear - 1] \uff0c\u8fdb\u800c

    • \u5bf9\u4e8e\u5165\u961f\u64cd\u4f5c\uff0c\u5c06\u8f93\u5165\u5143\u7d20\u8d4b\u503c\u7ed9 rear \u7d22\u5f15\u5904\uff0c\u5e76\u5c06 queSize \u81ea\u589e \\(1\\) \u5373\u53ef\uff1b
    • \u5bf9\u4e8e\u51fa\u961f\u64cd\u4f5c\uff0c\u4ec5\u9700\u5c06 front \u81ea\u589e \\(1\\) \uff0c\u5e76\u5c06 queSize \u81ea\u51cf \\(1\\) \u5373\u53ef\uff1b

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5165\u961f\u4e0e\u51fa\u961f\u64cd\u4f5c\u90fd\u4ec5\u9700\u5355\u6b21\u64cd\u4f5c\u5373\u53ef\u5b8c\u6210\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u4e3a \\(O(1)\\) \u3002

    ArrayQueuepush()poll()

    \u7ec6\u5fc3\u7684\u540c\u5b66\u53ef\u80fd\u4f1a\u53d1\u73b0\u4e00\u4e2a\u95ee\u9898\uff1a\u5728\u4e0d\u65ad\u5165\u961f\u4e0e\u51fa\u961f\u7684\u8fc7\u7a0b\u4e2d\uff0cfront \u548c rear \u90fd\u5728\u5411\u53f3\u79fb\u52a8\uff0c\u5728\u5230\u8fbe\u6570\u7ec4\u5c3e\u90e8\u540e\u5c31\u65e0\u6cd5\u7ee7\u7eed\u79fb\u52a8\u4e86\u3002\u4e3a\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u6211\u4eec\u8003\u8651\u5c06\u6570\u7ec4\u770b\u4f5c\u662f\u9996\u5c3e\u76f8\u63a5\u7684\uff0c\u8fd9\u6837\u7684\u6570\u7ec4\u88ab\u79f0\u4e3a\u300c\u73af\u5f62\u6570\u7ec4\u300d\u3002

    \u5bf9\u4e8e\u73af\u5f62\u6570\u7ec4\uff0c\u6211\u4eec\u9700\u8981\u4ee4 front \u6216 rear \u5728\u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u76f4\u63a5\u7ed5\u56de\u5230\u6570\u7ec4\u5934\u90e8\u63a5\u7eed\u904d\u5386\u3002\u8fd9\u79cd\u5468\u671f\u6027\u89c4\u5f8b\u53ef\u4ee5\u901a\u8fc7\u300c\u53d6\u4f59\u64cd\u4f5c\u300d\u6765\u5b9e\u73b0\uff0c\u8be6\u60c5\u8bf7\u89c1\u4ee5\u4e0b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_queue.java
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate int[] nums;  // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate int front;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate int queSize; // \u961f\u5217\u957f\u5ea6\npublic ArrayQueue(int capacity) {\nnums = new int[capacity];\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\npublic int capacity() {\nreturn nums.length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn queSize == 0;\n}\n/* \u5165\u961f */\npublic void push(int num) {\nif (queSize == capacity()) {\nSystem.out.println(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nint rear = (front + queSize) % capacity();\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int poll() {\nint num = peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % capacity();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn nums[front];\n}\n/* \u8fd4\u56de\u6570\u7ec4 */\npublic int[] toArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] res = new int[queSize];\nfor (int i = 0, j = front; i < queSize; i++, j++) {\nres[i] = nums[j % capacity()];\n}\nreturn res;\n}\n}\n
    array_queue.cpp
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate:\nint *nums;       // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nint front;       // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nint queSize;     // \u961f\u5217\u957f\u5ea6\nint queCapacity; // \u961f\u5217\u5bb9\u91cf\npublic:\nArrayQueue(int capacity) {\n// \u521d\u59cb\u5316\u6570\u7ec4\nnums = new int[capacity];\nqueCapacity = capacity;\nfront = queSize = 0;\n}\n~ArrayQueue() {\ndelete[] nums;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nint capacity() {\nreturn queCapacity;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn size() == 0;\n}\n/* \u5165\u961f */\nvoid push(int num) {\nif (queSize == queCapacity) {\ncout << \"\u961f\u5217\u5df2\u6ee1\" << endl;\nreturn;\n}\n// \u8ba1\u7b97\u961f\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nint rear = (front + queSize) % queCapacity;\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u51fa\u961f */\nvoid poll() {\nint num = peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % queCapacity;\nqueSize--;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek() {\nif (empty())\nthrow out_of_range(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn nums[front];\n}\n/* \u5c06\u6570\u7ec4\u8f6c\u5316\u4e3a Vector \u5e76\u8fd4\u56de */\nvector<int> toVector() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvector<int> arr(queSize);\nfor (int i = 0, j = front; i < queSize; i++, j++) {\narr[i] = nums[j % queCapacity];\n}\nreturn arr;\n}\n};\n
    array_queue.py
    class ArrayQueue:\n\"\"\" \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 \"\"\"\ndef __init__(self, size: int) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__nums: List[int] = [0] * size  # \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nself.__front: int = 0          # \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nself.__size: int = 0           # \u961f\u5217\u957f\u5ea6\ndef capacity(self) -> int:\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf \"\"\"\nreturn len(self.__nums)\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.__size == 0\ndef push(self, num: int) -> None:\n\"\"\" \u5165\u961f \"\"\"\nassert self.__size < self.capacity(), \"\u961f\u5217\u5df2\u6ee1\"\n# \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n# \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nrear: int = (self.__front + self.__size) % self.capacity()\n# \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nself.__nums[rear] = num\nself.__size += 1\ndef poll(self) -> int:\n\"\"\" \u51fa\u961f \"\"\"\nnum: int = self.peek()\n# \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nself.__front = (self.__front + 1) % self.capacity()\nself.__size -= 1\nreturn num\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u961f\u5217\u4e3a\u7a7a\"\nreturn self.__nums[self.__front]\ndef to_list(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\nres: List[int] = [0] * self.size()\nj: int = self.__front\nfor i in range(self.size()):\nres[i] = self.__nums[(j % self.capacity())]\nj += 1\nreturn res\n
    array_queue.go
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\ntype arrayQueue struct {\nnums        []int // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nfront       int   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nqueSize     int   // \u961f\u5217\u957f\u5ea6\nqueCapacity int   // \u961f\u5217\u5bb9\u91cf\uff08\u5373\u6700\u5927\u5bb9\u7eb3\u5143\u7d20\u6570\u91cf\uff09\n}\n/* \u521d\u59cb\u5316\u961f\u5217 */\nfunc newArrayQueue(queCapacity int) *arrayQueue {\nreturn &arrayQueue{\nnums:        make([]int, queCapacity),\nqueCapacity: queCapacity,\nfront:       0,\nqueSize:     0,\n}\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc (q *arrayQueue) size() int {\nreturn q.queSize\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc (q *arrayQueue) isEmpty() bool {\nreturn q.queSize == 0\n}\n/* \u5165\u961f */\nfunc (q *arrayQueue) push(num int) {\n// \u5f53 rear == queCapacity \u8868\u793a\u961f\u5217\u5df2\u6ee1\nif q.queSize == q.queCapacity {\nreturn\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nrear := (q.front + q.queSize) % q.queCapacity\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nq.nums[rear] = num\nq.queSize++\n}\n/* \u51fa\u961f */\nfunc (q *arrayQueue) poll() any {\nnum := q.peek()\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nq.front = (q.front + 1) % q.queCapacity\nq.queSize--\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc (q *arrayQueue) peek() any {\nif q.isEmpty() {\nreturn nil\n}\nreturn q.nums[q.front]\n}\n/* \u83b7\u53d6 Slice \u7528\u4e8e\u6253\u5370 */\nfunc (q *arrayQueue) toSlice() []int {\nrear := (q.front + q.queSize)\nif rear >= q.queCapacity {\nrear %= q.queCapacity\nreturn append(q.nums[q.front:], q.nums[:rear]...)\n}\nreturn q.nums[q.front:rear]\n}\n
    array_queue.js
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\n#nums;         // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\n#front = 0;    // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\n#queSize = 0;  // \u961f\u5217\u957f\u5ea6\nconstructor(capacity) {\nthis.#nums = new Array(capacity);\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nget capacity() {\nreturn this.#nums.length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nempty() {\nreturn this.#queSize == 0;\n}\n/* \u5165\u961f */\npush(num) {\nif (this.size == this.capacity) {\nconsole.log(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nconst rear = (this.#front + this.size) % this.capacity;\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.#nums[rear] = num;\nthis.#queSize++;\n}\n/* \u51fa\u961f */\npoll() {\nconst num = this.peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nthis.#front = (this.#front + 1) % this.capacity;\nthis.#queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek() {\nif (this.empty())\nthrow new Error(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn this.#nums[this.#front];\n}\n/* \u8fd4\u56de Array */\ntoArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst arr = new Array(this.size);\nfor (let i = 0, j = this.#front; i < this.size; i++, j++) {\narr[i] = this.#nums[j % this.capacity];\n}\nreturn arr;\n}\n}\n
    array_queue.ts
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate nums: number[];  // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate front: number;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate queSize: number; // \u961f\u5217\u957f\u5ea6\nconstructor(capacity: number) {\nthis.nums = new Array(capacity);\nthis.front = this.queSize = 0;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nget capacity(): number {\nreturn this.nums.length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nempty(): boolean {\nreturn this.queSize == 0;\n}\n/* \u5165\u961f */\npush(num: number): void {\nif (this.size == this.capacity) {\nconsole.log(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nconst rear = (this.front + this.queSize) % this.capacity;\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.nums[rear] = num;\nthis.queSize++;\n}\n/* \u51fa\u961f */\npoll(): number {\nconst num = this.peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nthis.front = (this.front + 1) % this.capacity;\nthis.queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek(): number {\nif (this.empty())\nthrow new Error(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn this.nums[this.front];\n}\n/* \u8fd4\u56de Array */\ntoArray(): number[] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst arr = new Array(this.size);\nfor (let i = 0, j = this.front; i < this.size; i++, j++) {\narr[i] = this.nums[j % this.capacity];\n}\nreturn arr;\n}\n}\n
    array_queue.c
    [class]{arrayQueue}-[func]{}\n
    array_queue.cs
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue\n{\nprivate int[] nums;  // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate int front;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate int queSize; // \u961f\u5217\u957f\u5ea6\npublic ArrayQueue(int capacity)\n{\nnums = new int[capacity];\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\npublic int capacity()\n{\nreturn nums.Length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn queSize == 0;\n}\n/* \u5165\u961f */\npublic void push(int num)\n{\nif (queSize == capacity())\n{\nConsole.WriteLine(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nint rear = (front + queSize) % capacity();\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int poll()\n{\nint num = peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % capacity();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek()\n{\nif (isEmpty())\nthrow new Exception();\nreturn nums[front];\n}\n/* \u8fd4\u56de\u6570\u7ec4 */\npublic int[] toArray()\n{\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] res = new int[queSize];\nfor (int i = 0, j = front; i < queSize; i++, j++)\n{\nres[i] = nums[j % this.capacity()];\n}\nreturn res;\n}\n}\n
    array_queue.swift
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate var nums: [Int] // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate var front = 0 // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate var queSize = 0 // \u961f\u5217\u957f\u5ea6\ninit(capacity: Int) {\n// \u521d\u59cb\u5316\u6570\u7ec4\nnums = Array(repeating: 0, count: capacity)\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nfunc capacity() -> Int {\nnums.count\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nqueSize\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nqueSize == 0\n}\n/* \u5165\u961f */\nfunc push(num: Int) {\nif size() == capacity() {\nprint(\"\u961f\u5217\u5df2\u6ee1\")\nreturn\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nlet rear = (front + queSize) % capacity()\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num\nqueSize += 1\n}\n/* \u51fa\u961f */\n@discardableResult\nfunc poll() -> Int {\nlet num = peek()\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % capacity()\nqueSize -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u961f\u5217\u4e3a\u7a7a\")\n}\nreturn nums[front]\n}\n/* \u8fd4\u56de\u6570\u7ec4 */\nfunc toArray() -> [Int] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar res = Array(repeating: 0, count: queSize)\nfor (i, j) in sequence(first: (0, front), next: { $0 < self.queSize - 1 ? ($0 + 1, $1 + 1) : nil }) {\nres[i] = nums[j % capacity()]\n}\nreturn res\n}\n}\n
    array_queue.zig
    // \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217\nfn ArrayQueue(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nnums: []T = undefined,                          // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4     \ncap: usize = 0,                                 // \u961f\u5217\u5bb9\u91cf\nfront: usize = 0,                               // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nqueSize: usize = 0,                             // \u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e + 1\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u6570\u7ec4\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator, cap: usize) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.cap = cap;\nself.nums = try self.mem_allocator.alloc(T, self.cap);\nstd.mem.set(T, self.nums, @as(T, 0));\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf\npub fn capacity(self: *Self) usize {\nreturn self.cap;\n}\n// \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.queSize;\n}\n// \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.queSize == 0;\n}\n// \u5165\u961f\npub fn push(self: *Self, num: T) !void {\nif (self.size() == self.capacity()) {\nstd.debug.print(\"\u961f\u5217\u5df2\u6ee1\\n\", .{});\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nvar rear = (self.front + self.queSize) % self.capacity();\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nself.nums[rear] = num;\nself.queSize += 1;\n} // \u51fa\u961f\npub fn poll(self: *Self) T {\nvar num = self.peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nself.front = (self.front + 1) % self.capacity();\nself.queSize -= 1;\nreturn num;\n} // \u8bbf\u95ee\u961f\u9996\u5143\u7d20\npub fn peek(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn self.nums[self.front];\n} // \u8fd4\u56de\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nvar j: usize = self.front;\nwhile (i < self.size()) : ({ i += 1; j += 1; }) {\nres[i] = self.nums[j % self.capacity()];\n}\nreturn res;\n}\n};\n}\n

    \u4ee5\u4e0a\u5b9e\u73b0\u7684\u961f\u5217\u4ecd\u5b58\u5728\u5c40\u9650\u6027\uff0c\u5373\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002\u4e0d\u8fc7\u8fd9\u4e2a\u95ee\u9898\u5f88\u5bb9\u6613\u89e3\u51b3\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u6570\u7ec4\u66ff\u6362\u4e3a\u5217\u8868\uff08\u5373\u52a8\u6001\u6570\u7ec4\uff09\uff0c\u4ece\u800c\u5f15\u5165\u6269\u5bb9\u673a\u5236\u3002\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u5c1d\u8bd5\u81ea\u884c\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/queue/#523","title":"5.2.3. \u00a0 \u4e24\u79cd\u5b9e\u73b0\u5bf9\u6bd4","text":"

    \u4e0e\u6808\u7684\u7ed3\u8bba\u4e00\u81f4\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_stack_and_queue/queue/#524","title":"5.2.4. \u00a0 \u961f\u5217\u5178\u578b\u5e94\u7528","text":"
    • \u6dd8\u5b9d\u8ba2\u5355\u3002\u8d2d\u7269\u8005\u4e0b\u5355\u540e\uff0c\u8ba2\u5355\u5c31\u88ab\u52a0\u5165\u5230\u961f\u5217\u4e4b\u4e2d\uff0c\u968f\u540e\u7cfb\u7edf\u518d\u6839\u636e\u987a\u5e8f\u4f9d\u6b21\u5904\u7406\u961f\u5217\u4e2d\u7684\u8ba2\u5355\u3002\u5728\u53cc\u5341\u4e00\u65f6\uff0c\u5728\u77ed\u65f6\u95f4\u5185\u4f1a\u4ea7\u751f\u6d77\u91cf\u7684\u8ba2\u5355\uff0c\u5982\u4f55\u5904\u7406\u300c\u9ad8\u5e76\u53d1\u300d\u5219\u662f\u5de5\u7a0b\u5e08\u4eec\u9700\u8981\u91cd\u70b9\u601d\u8003\u7684\u95ee\u9898\u3002
    • \u5404\u79cd\u5f85\u529e\u4e8b\u9879\u3002\u4efb\u4f55\u9700\u8981\u5b9e\u73b0\u201c\u5148\u6765\u540e\u5230\u201d\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6253\u5370\u673a\u7684\u4efb\u52a1\u961f\u5217\u3001\u9910\u5385\u7684\u51fa\u9910\u961f\u5217\u7b49\u7b49\u3002
    "},{"location":"chapter_stack_and_queue/stack/","title":"5.1. \u00a0 \u6808","text":"

    \u300c\u6808 Stack\u300d\u662f\u4e00\u79cd\u9075\u5faa\u300c\u5148\u5165\u540e\u51fa first in, last out\u300d\u6570\u636e\u64cd\u4f5c\u89c4\u5219\u7684\u7ebf\u6027\u6570\u636e\u7ed3\u6784\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u6808\u7c7b\u6bd4\u4e3a\u653e\u5728\u684c\u9762\u4e0a\u7684\u4e00\u645e\u76d8\u5b50\uff0c\u5982\u679c\u9700\u8981\u62ff\u51fa\u5e95\u90e8\u7684\u76d8\u5b50\uff0c\u5219\u9700\u8981\u5148\u5c06\u4e0a\u9762\u7684\u76d8\u5b50\u4f9d\u6b21\u53d6\u51fa\u3002

    \u201c\u76d8\u5b50\u201d\u662f\u4e00\u79cd\u5f62\u8c61\u6bd4\u55bb\uff0c\u6211\u4eec\u5c06\u76d8\u5b50\u66ff\u6362\u4e3a\u4efb\u610f\u4e00\u79cd\u5143\u7d20\uff08\u4f8b\u5982\u6574\u6570\u3001\u5b57\u7b26\u3001\u5bf9\u8c61\u7b49\uff09\uff0c\u5c31\u5f97\u5230\u4e86\u6808\u6570\u636e\u7ed3\u6784\u3002

    \u6211\u4eec\u5c06\u8fd9\u4e00\u645e\u5143\u7d20\u7684\u9876\u90e8\u79f0\u4e3a\u300c\u6808\u9876\u300d\uff0c\u5c06\u5e95\u90e8\u79f0\u4e3a\u300c\u6808\u5e95\u300d\uff0c\u5c06\u628a\u5143\u7d20\u6dfb\u52a0\u5230\u6808\u9876\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u5165\u6808\u300d\uff0c\u5c06\u5220\u9664\u6808\u9876\u5143\u7d20\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u51fa\u6808\u300d\u3002

    Fig. \u6808\u7684\u5148\u5165\u540e\u51fa\u89c4\u5219

    "},{"location":"chapter_stack_and_queue/stack/#511","title":"5.1.1. \u00a0 \u6808\u5e38\u7528\u64cd\u4f5c","text":"

    \u6808\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\uff0c\u65b9\u6cd5\u540d\u9700\u6839\u636e\u8bed\u8a00\u6765\u786e\u5b9a\uff0c\u6b64\u5904\u4ee5 Java \u4e3a\u4f8b\u3002

    \u65b9\u6cd5 \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 push() \u5143\u7d20\u5165\u6808\uff08\u6dfb\u52a0\u81f3\u6808\u9876\uff09 \\(O(1)\\) pop() \u6808\u9876\u5143\u7d20\u51fa\u6808 \\(O(1)\\) peek() \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \\(O(1)\\)

    \u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u597d\u7684\u6808\u7c7b\u3002 \u67d0\u4e9b\u8bed\u8a00\u5e76\u672a\u4e13\u95e8\u63d0\u4f9b\u6808\u7c7b\uff0c\u4f46\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u628a\u8be5\u8bed\u8a00\u7684\u300c\u6570\u7ec4\u300d\u6216\u300c\u94fe\u8868\u300d\u770b\u4f5c\u6808\u6765\u4f7f\u7528\uff0c\u5e76\u901a\u8fc7\u201c\u8111\u8865\u201d\u6765\u5c4f\u853d\u65e0\u5173\u64cd\u4f5c\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig stack.java
    /* \u521d\u59cb\u5316\u6808 */\nStack<Integer> stack = new Stack<>();\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint peek = stack.peek();\n/* \u5143\u7d20\u51fa\u6808 */\nint pop = stack.pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size = stack.size();\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = stack.isEmpty();\n
    stack.cpp
    /* \u521d\u59cb\u5316\u6808 */\nstack<int> stack;\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint top = stack.top();\n/* \u5143\u7d20\u51fa\u6808 */\nstack.pop(); // \u65e0\u8fd4\u56de\u503c\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size = stack.size();\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nbool empty = stack.empty();\n
    stack.py
    \"\"\" \u521d\u59cb\u5316\u6808 \"\"\"\n# Python \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a List \u5f53\u4f5c\u6808\u6765\u4f7f\u7528 \nstack: List[int] = []\n\"\"\" \u5143\u7d20\u5165\u6808 \"\"\"\nstack.append(1)\nstack.append(3)\nstack.append(2)\nstack.append(5)\nstack.append(4)\n\"\"\" \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \"\"\"\npeek: int = stack[-1]\n\"\"\" \u5143\u7d20\u51fa\u6808 \"\"\"\npop: int = stack.pop()\n\"\"\" \u83b7\u53d6\u6808\u7684\u957f\u5ea6 \"\"\"\nsize: int = len(stack)\n\"\"\" \u5224\u65ad\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = len(stack) == 0\n
    stack_test.go
    /* \u521d\u59cb\u5316\u6808 */\n// \u5728 Go \u4e2d\uff0c\u63a8\u8350\u5c06 Slice \u5f53\u4f5c\u6808\u6765\u4f7f\u7528\nvar stack []int\n/* \u5143\u7d20\u5165\u6808 */\nstack = append(stack, 1)\nstack = append(stack, 3)\nstack = append(stack, 2)\nstack = append(stack, 5)\nstack = append(stack, 4)\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npeek := stack[len(stack)-1]\n/* \u5143\u7d20\u51fa\u6808 */\npop := stack[len(stack)-1]\nstack = stack[:len(stack)-1]\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nsize := len(stack)\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nisEmpty := len(stack) == 0\n
    stack.js
    /* \u521d\u59cb\u5316\u6808 */\n// Javascript \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u6808\u6765\u4f7f\u7528 \nconst stack = [];\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nconst peek = stack[stack.length-1];\n/* \u5143\u7d20\u51fa\u6808 */\nconst pop = stack.pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nconst size = stack.length;\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nconst is_empty = stack.length === 0;\n
    stack.ts
    /* \u521d\u59cb\u5316\u6808 */\n// Typescript \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u6808\u6765\u4f7f\u7528 \nconst stack: number[] = [];\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nconst peek = stack[stack.length - 1];\n/* \u5143\u7d20\u51fa\u6808 */\nconst pop = stack.pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nconst size = stack.length;\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nconst is_empty = stack.length === 0;\n
    stack.c
    \n
    stack.cs
    /* \u521d\u59cb\u5316\u6808 */\nStack<int> stack = new ();\n/* \u5143\u7d20\u5165\u6808 */\nstack.Push(1);\nstack.Push(3);\nstack.Push(2);\nstack.Push(5);\nstack.Push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint peek = stack.Peek();\n/* \u5143\u7d20\u51fa\u6808 */\nint pop = stack.Pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size = stack.Count();\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = stack.Count()==0;\n
    stack.swift
    /* \u521d\u59cb\u5316\u6808 */\n// Swift \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u6808\u6765\u4f7f\u7528\nvar stack: [Int] = []\n/* \u5143\u7d20\u5165\u6808 */\nstack.append(1)\nstack.append(3)\nstack.append(2)\nstack.append(5)\nstack.append(4)\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nlet peek = stack.last!\n/* \u5143\u7d20\u51fa\u6808 */\nlet pop = stack.removeLast()\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nlet size = stack.count\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nlet isEmpty = stack.isEmpty\n
    stack.zig
    \n
    "},{"location":"chapter_stack_and_queue/stack/#512","title":"5.1.2. \u00a0 \u6808\u7684\u5b9e\u73b0","text":"

    \u4e3a\u4e86\u66f4\u52a0\u6e05\u6670\u5730\u4e86\u89e3\u6808\u7684\u8fd0\u884c\u673a\u5236\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u81ea\u5df1\u52a8\u624b\u5b9e\u73b0\u4e00\u4e2a\u6808\u7c7b\u3002

    \u6808\u89c4\u5b9a\u5143\u7d20\u662f\u5148\u5165\u540e\u51fa\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u53ea\u80fd\u5728\u6808\u9876\u6dfb\u52a0\u6216\u5220\u9664\u5143\u7d20\u3002\u7136\u800c\uff0c\u6570\u7ec4\u6216\u94fe\u8868\u90fd\u53ef\u4ee5\u5728\u4efb\u610f\u4f4d\u7f6e\u6dfb\u52a0\u5220\u9664\u5143\u7d20\uff0c\u56e0\u6b64 \u6808\u53ef\u88ab\u770b\u4f5c\u662f\u4e00\u79cd\u53d7\u7ea6\u675f\u7684\u6570\u7ec4\u6216\u94fe\u8868\u3002\u6362\u8a00\u4e4b\uff0c\u6211\u4eec\u53ef\u4ee5\u201c\u5c4f\u853d\u201d\u6570\u7ec4\u6216\u94fe\u8868\u7684\u90e8\u5206\u65e0\u5173\u64cd\u4f5c\uff0c\u4f7f\u4e4b\u5bf9\u5916\u7684\u8868\u73b0\u903b\u8f91\u7b26\u5408\u6808\u7684\u89c4\u5b9a\u5373\u53ef\u3002

    "},{"location":"chapter_stack_and_queue/stack/#_1","title":"\u57fa\u4e8e\u94fe\u8868\u7684\u5b9e\u73b0","text":"

    \u4f7f\u7528\u300c\u94fe\u8868\u300d\u5b9e\u73b0\u6808\u65f6\uff0c\u5c06\u94fe\u8868\u7684\u5934\u7ed3\u70b9\u770b\u4f5c\u6808\u9876\uff0c\u5c06\u5c3e\u7ed3\u70b9\u770b\u4f5c\u6808\u5e95\u3002

    \u5bf9\u4e8e\u5165\u6808\u64cd\u4f5c\uff0c\u5c06\u5143\u7d20\u63d2\u5165\u5230\u94fe\u8868\u5934\u90e8\u5373\u53ef\uff0c\u8fd9\u79cd\u7ed3\u70b9\u6dfb\u52a0\u65b9\u5f0f\u88ab\u79f0\u4e3a\u201c\u5934\u63d2\u6cd5\u201d\u3002\u800c\u5bf9\u4e8e\u51fa\u6808\u64cd\u4f5c\uff0c\u5219\u5c06\u5934\u7ed3\u70b9\u4ece\u94fe\u8868\u4e2d\u5220\u9664\u5373\u53ef\u3002

    LinkedListStackpush()pop()

    \u4ee5\u4e0b\u662f\u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u6808\u7684\u793a\u4f8b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linkedlist_stack.java
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate ListNode stackPeek;  // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate int stkSize = 0;   // \u6808\u7684\u957f\u5ea6\npublic LinkedListStack() {\nstackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size() {\nreturn stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num) {\nListNode node = new ListNode(num);\nnode.next = stackPeek;\nstackPeek = node;\nstkSize++;\n}\n/* \u51fa\u6808 */\npublic int pop() {\nint num = peek();\nstackPeek = stackPeek.next;\nstkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek() {\nif (size() == 0)\nthrow new EmptyStackException();\nreturn stackPeek.val;\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray() {\nListNode node = stackPeek;\nint[] res = new int[size()];\nfor (int i = res.length - 1; i >= 0; i--) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.cpp
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate:\nListNode* stackTop; // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nint stkSize;        // \u6808\u7684\u957f\u5ea6\npublic:\nLinkedListStack() {\nstackTop = nullptr;\nstkSize = 0;\n}\n~LinkedListStack() {\nfreeMemoryLinkedList(stackTop);\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size() {\nreturn stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn size() == 0;\n}\n/* \u5165\u6808 */\nvoid push(int num) {\nListNode* node = new ListNode(num);\nnode->next = stackTop;\nstackTop = node;\nstkSize++;\n}\n/* \u51fa\u6808 */\nvoid pop() {\nint num = top();\nListNode *tmp = stackTop;\nstackTop = stackTop->next;\n// \u91ca\u653e\u5185\u5b58\ndelete tmp;\nstkSize--;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint top() {\nif (size() == 0)\nthrow out_of_range(\"\u6808\u4e3a\u7a7a\");\nreturn stackTop->val;\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nvector<int> toVector() {\nListNode* node = stackTop;\nvector<int> res(size());\nfor (int i = res.size() - 1; i >= 0; i--) {\nres[i] = node->val;\nnode = node->next;\n}\nreturn res;\n}\n};\n
    linkedlist_stack.py
    class LinkedListStack:\n\"\"\" \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__peek: Optional[ListNode] = None\nself.__size: int = 0\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u6808\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn not self.__peek\ndef push(self, val: int) -> None:\n\"\"\" \u5165\u6808 \"\"\"\nnode = ListNode(val)\nnode.next = self.__peek\nself.__peek = node\nself.__size += 1\ndef pop(self) -> int:\n\"\"\" \u51fa\u6808 \"\"\"\nnum: int = self.peek()\nself.__peek = self.__peek.next\nself.__size -= 1\nreturn num\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \"\"\"\n# \u5224\u7a7a\u5904\u7406\nif not self.__peek: return None\nreturn self.__peek.val\ndef to_list(self) -> List[int]:\n\"\"\" \u8f6c\u5316\u4e3a\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\narr: List[int] = []\nnode = self.__peek\nwhile node:\narr.append(node.val)\nnode = node.next\narr.reverse()\nreturn arr\n
    linkedlist_stack.go
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\ntype linkedListStack struct {\n// \u4f7f\u7528\u5185\u7f6e\u5305 list \u6765\u5b9e\u73b0\u6808\ndata *list.List\n}\n/* \u521d\u59cb\u5316\u6808 */\nfunc newLinkedListStack() *linkedListStack {\nreturn &linkedListStack{\ndata: list.New(),\n}\n}\n/* \u5165\u6808 */\nfunc (s *linkedListStack) push(value int) {\ns.data.PushBack(value)\n}\n/* \u51fa\u6808 */\nfunc (s *linkedListStack) pop() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nfunc (s *linkedListStack) peek() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\nreturn e.Value\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nfunc (s *linkedListStack) size() int {\nreturn s.data.Len()\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nfunc (s *linkedListStack) isEmpty() bool {\nreturn s.data.Len() == 0\n}\n/* \u83b7\u53d6 List \u7528\u4e8e\u6253\u5370 */\nfunc (s *linkedListStack) toList() *list.List {\nreturn s.data\n}\n
    linkedlist_stack.js
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\n#stackPeek;     // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\n#stkSize = 0;   // \u6808\u7684\u957f\u5ea6\nconstructor() {\nthis.#stackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.size == 0;\n}\n/* \u5165\u6808 */\npush(num) {\nconst node = new ListNode(num);\nnode.next = this.#stackPeek;\nthis.#stackPeek = node;\nthis.#stkSize++;\n}\n/* \u51fa\u6808 */\npop() {\nconst num = this.peek();\nthis.#stackPeek = this.#stackPeek.next;\nthis.#stkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npeek() {\nif (!this.#stackPeek)\nthrow new Error(\"\u6808\u4e3a\u7a7a\");\nreturn this.#stackPeek.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray() {\nlet node = this.#stackPeek;\nconst res = new Array(this.size);\nfor (let i = res.length - 1; i >= 0; i--) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.ts
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate stackPeek: ListNode | null; // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate stkSize: number = 0; // \u6808\u7684\u957f\u5ea6\nconstructor() {\nthis.stackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.size == 0;\n}\n/* \u5165\u6808 */\npush(num: number): void {\nconst node = new ListNode(num);\nnode.next = this.stackPeek;\nthis.stackPeek = node;\nthis.stkSize++;\n}\n/* \u51fa\u6808 */\npop(): number {\nconst num = this.peek();\nif (!this.stackPeek) throw new Error('\u6808\u4e3a\u7a7a');\nthis.stackPeek = this.stackPeek.next;\nthis.stkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npeek(): number {\nif (!this.stackPeek) throw new Error('\u6808\u4e3a\u7a7a');\nreturn this.stackPeek.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray(): number[] {\nlet node = this.stackPeek;\nconst res = new Array<number>(this.size);\nfor (let i = res.length - 1; i >= 0; i--) {\nres[i] = node!.val;\nnode = node!.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.c
    [class]{linkedListStack}-[func]{}\n
    linkedlist_stack.cs
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack\n{\nprivate ListNode? stackPeek;  // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate int stkSize = 0;   // \u6808\u7684\u957f\u5ea6\npublic LinkedListStack()\n{\nstackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num)\n{\nListNode node = new ListNode(num);\nnode.next = stackPeek;\nstackPeek = node;\nstkSize++;\n}\n/* \u51fa\u6808 */\npublic int pop()\n{\nif (stackPeek == null)\nthrow new Exception();\nint num = peek();\nstackPeek = stackPeek.next;\nstkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek()\n{\nif (size() == 0 || stackPeek == null)\nthrow new Exception();\nreturn stackPeek.val;\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray()\n{\nif (stackPeek == null)\nreturn Array.Empty<int>();\nListNode node = stackPeek;\nint[] res = new int[size()];\nfor (int i = res.Length - 1; i >= 0; i--)\n{\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.swift
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate var _peek: ListNode? // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate var _size = 0 // \u6808\u7684\u957f\u5ea6\ninit() {}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nfunc size() -> Int {\n_size\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u5165\u6808 */\nfunc push(num: Int) {\nlet node = ListNode(x: num)\nnode.next = _peek\n_peek = node\n_size += 1\n}\n/* \u51fa\u6808 */\n@discardableResult\nfunc pop() -> Int {\nlet num = peek()\n_peek = _peek?.next\n_size -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u6808\u4e3a\u7a7a\")\n}\nreturn _peek!.val\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nfunc toArray() -> [Int] {\nvar node = _peek\nvar res = Array(repeating: 0, count: _size)\nfor i in sequence(first: res.count - 1, next: { $0 >= 0 + 1 ? $0 - 1 : nil }) {\nres[i] = node!.val\nnode = node?.next\n}\nreturn res\n}\n}\n
    linkedlist_stack.zig
    // \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808\nfn LinkedListStack(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nstackTop: ?*inc.ListNode(T) = null,             // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nstkSize: usize = 0,                             // \u6808\u7684\u957f\u5ea6\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u6808\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.stackTop = null;\nself.stkSize = 0;\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u6808\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.stkSize;\n}\n// \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u8bbf\u95ee\u6808\u9876\u5143\u7d20\npub fn top(self: *Self) T {\nif (self.size() == 0) @panic(\"\u6808\u4e3a\u7a7a\");\nreturn self.stackTop.?.val;\n}  // \u5165\u6808\npub fn push(self: *Self, num: T) !void {\nvar node = try self.mem_allocator.create(inc.ListNode(T));\nnode.init(num);\nnode.next = self.stackTop;\nself.stackTop = node;\nself.stkSize += 1;\n} // \u51fa\u6808\npub fn pop(self: *Self) T {\nvar num = self.top();\nself.stackTop = self.stackTop.?.next;\nself.stkSize -= 1;\nreturn num;\n} // \u5c06\u6808\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\nvar node = self.stackTop;\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nwhile (i < res.len) : (i += 1) {\nres[res.len - i - 1] = node.?.val;\nnode = node.?.next;\n}\nreturn res;\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/stack/#_2","title":"\u57fa\u4e8e\u6570\u7ec4\u7684\u5b9e\u73b0","text":"

    \u4f7f\u7528\u300c\u6570\u7ec4\u300d\u5b9e\u73b0\u6808\u65f6\uff0c\u8003\u8651\u5c06\u6570\u7ec4\u7684\u5c3e\u90e8\u5f53\u4f5c\u6808\u9876\u3002\u8fd9\u6837\u8bbe\u8ba1\u4e0b\uff0c\u300c\u5165\u6808\u300d\u4e0e\u300c\u51fa\u6808\u300d\u64cd\u4f5c\u5c31\u5bf9\u5e94\u5728\u6570\u7ec4\u5c3e\u90e8\u300c\u6dfb\u52a0\u5143\u7d20\u300d\u4e0e\u300c\u5220\u9664\u5143\u7d20\u300d\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(1)\\) \u3002

    ArrayStackpush()pop()

    \u7531\u4e8e\u5165\u6808\u7684\u5143\u7d20\u53ef\u80fd\u662f\u6e90\u6e90\u4e0d\u65ad\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u4f7f\u7528\u652f\u6301\u52a8\u6001\u6269\u5bb9\u7684\u300c\u5217\u8868\u300d\uff0c\u8fd9\u6837\u5c31\u65e0\u9700\u81ea\u884c\u5b9e\u73b0\u6570\u7ec4\u6269\u5bb9\u4e86\u3002\u4ee5\u4e0b\u662f\u793a\u4f8b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_stack.java
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate ArrayList<Integer> stack;\npublic ArrayStack() {\n// \u521d\u59cb\u5316\u5217\u8868\uff08\u52a8\u6001\u6570\u7ec4\uff09\nstack = new ArrayList<>();\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size() {\nreturn stack.size();\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num) {\nstack.add(num);\n}\n/* \u51fa\u6808 */\npublic int pop() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn stack.remove(size() - 1);\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn stack.get(size() - 1);\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic Object[] toArray() {\nreturn stack.toArray();\n}\n}\n
    array_stack.cpp
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate:\nvector<int> stack;\npublic:\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size() {\nreturn stack.size();\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn stack.empty();\n}\n/* \u5165\u6808 */\nvoid push(int num) {\nstack.push_back(num);\n}\n/* \u51fa\u6808 */\nvoid pop() {\nint oldTop = top();\nstack.pop_back();\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint top() {\nif(empty())\nthrow out_of_range(\"\u6808\u4e3a\u7a7a\");\nreturn stack.back();\n}\n/* \u8fd4\u56de Vector */\nvector<int> toVector() {\nreturn stack;\n}\n};\n
    array_stack.py
    class ArrayStack:\n\"\"\" \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 \"\"\"\ndef __init__(self) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__stack: List[int] = []\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u6808\u7684\u957f\u5ea6 \"\"\"\nreturn len(self.__stack)\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.__stack == []\ndef push(self, item: int) -> None:\n\"\"\" \u5165\u6808 \"\"\"\nself.__stack.append(item)\ndef pop(self) -> int:\n\"\"\" \u51fa\u6808 \"\"\"\nassert not self.is_empty(), \"\u6808\u4e3a\u7a7a\"\nreturn self.__stack.pop()\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u6808\u4e3a\u7a7a\"\nreturn self.__stack[-1]\ndef to_list(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\nreturn self.__stack\n
    array_stack.go
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\ntype arrayStack struct {\ndata []int // \u6570\u636e\n}\n/* \u521d\u59cb\u5316\u6808 */\nfunc newArrayStack() *arrayStack {\nreturn &arrayStack{\n// \u8bbe\u7f6e\u6808\u7684\u957f\u5ea6\u4e3a 0\uff0c\u5bb9\u91cf\u4e3a 16\ndata: make([]int, 0, 16),\n}\n}\n/* \u6808\u7684\u957f\u5ea6 */\nfunc (s *arrayStack) size() int {\nreturn len(s.data)\n}\n/* \u6808\u662f\u5426\u4e3a\u7a7a */\nfunc (s *arrayStack) isEmpty() bool {\nreturn s.size() == 0\n}\n/* \u5165\u6808 */\nfunc (s *arrayStack) push(v int) {\n// \u5207\u7247\u4f1a\u81ea\u52a8\u6269\u5bb9\ns.data = append(s.data, v)\n}\n/* \u51fa\u6808 */\nfunc (s *arrayStack) pop() any {\nval := s.peek()\ns.data = s.data[:len(s.data)-1]\nreturn val\n}\n/* \u83b7\u53d6\u6808\u9876\u5143\u7d20 */\nfunc (s *arrayStack) peek() any {\nif s.isEmpty() {\nreturn nil\n}\nval := s.data[len(s.data)-1]\nreturn val\n}\n/* \u83b7\u53d6 Slice \u7528\u4e8e\u6253\u5370 */\nfunc (s *arrayStack) toSlice() []int {\nreturn s.data\n}\n
    array_stack.js
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\n#stack;\nconstructor() {\nthis.#stack = [];\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#stack.length;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nempty() {\nreturn this.#stack.length === 0;\n}\n/* \u5165\u6808 */\npush(num) {\nthis.#stack.push(num);\n}\n/* \u51fa\u6808 */\npop() {\nif (this.empty())\nthrow new Error(\"\u6808\u4e3a\u7a7a\");\nreturn this.#stack.pop();\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\ntop() {\nif (this.empty())\nthrow new Error(\"\u6808\u4e3a\u7a7a\");\nreturn this.#stack[this.#stack.length - 1];\n}\n/* \u8fd4\u56de Array */\ntoArray() {\nreturn this.#stack;\n}\n};\n
    array_stack.ts
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate stack: number[];\nconstructor() {\nthis.stack = [];\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.stack.length;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nempty(): boolean {\nreturn this.stack.length === 0;\n}\n/* \u5165\u6808 */\npush(num: number): void {\nthis.stack.push(num);\n}\n/* \u51fa\u6808 */\npop(): number | undefined {\nif (this.empty())\nthrow new Error('\u6808\u4e3a\u7a7a');\nreturn this.stack.pop();\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\ntop(): number | undefined {\nif (this.empty())\nthrow new Error('\u6808\u4e3a\u7a7a');\nreturn this.stack[this.stack.length - 1];\n}\n/* \u8fd4\u56de Array */\ntoArray() {\nreturn this.stack;\n}\n};\n
    array_stack.c
    [class]{arrayStack}-[func]{}\n
    array_stack.cs
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack\n{\nprivate List<int> stack;\npublic ArrayStack()\n{\n// \u521d\u59cb\u5316\u5217\u8868\uff08\u52a8\u6001\u6570\u7ec4\uff09\nstack = new();\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn stack.Count();\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num)\n{\nstack.Add(num);\n}\n/* \u51fa\u6808 */\npublic int pop()\n{\nif (isEmpty())\nthrow new Exception();\nvar val = peek();\nstack.RemoveAt(size() - 1);\nreturn val;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek()\n{\nif (isEmpty())\nthrow new Exception();\nreturn stack[size() - 1];\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray()\n{\nreturn stack.ToArray();\n}\n}\n
    array_stack.swift
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate var stack: [Int]\ninit() {\n// \u521d\u59cb\u5316\u5217\u8868\uff08\u52a8\u6001\u6570\u7ec4\uff09\nstack = []\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nstack.count\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nstack.isEmpty\n}\n/* \u5165\u6808 */\nfunc push(num: Int) {\nstack.append(num)\n}\n/* \u51fa\u6808 */\n@discardableResult\nfunc pop() -> Int {\nif isEmpty() {\nfatalError(\"\u6808\u4e3a\u7a7a\")\n}\nreturn stack.removeLast()\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u6808\u4e3a\u7a7a\")\n}\nreturn stack.last!\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nfunc toArray() -> [Int] {\nstack\n}\n}\n
    array_stack.zig
    // \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808\nfn ArrayStack(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nstack: ?std.ArrayList(T) = null,     // \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u6808\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) void {\nif (self.stack == null) {\nself.stack = std.ArrayList(T).init(allocator);\n}\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.stack == null) return;\nself.stack.?.deinit();\n}\n// \u83b7\u53d6\u6808\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.stack.?.items.len;\n}\n// \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u8bbf\u95ee\u6808\u9876\u5143\u7d20\npub fn peek(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u6808\u4e3a\u7a7a\");\nreturn self.stack.?.items[self.size() - 1];\n}  // \u5165\u6808\npub fn push(self: *Self, num: T) !void {\ntry self.stack.?.append(num);\n} // \u51fa\u6808\npub fn pop(self: *Self) T {\nvar num = self.stack.?.pop();\nreturn num;\n} // \u8fd4\u56de ArrayList\npub fn toList(self: *Self) std.ArrayList(T) {\nreturn self.stack.?;\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/stack/#513","title":"5.1.3. \u00a0 \u4e24\u79cd\u5b9e\u73b0\u5bf9\u6bd4","text":""},{"location":"chapter_stack_and_queue/stack/#_3","title":"\u652f\u6301\u64cd\u4f5c","text":"

    \u4e24\u79cd\u5b9e\u73b0\u90fd\u652f\u6301\u6808\u5b9a\u4e49\u4e2d\u7684\u5404\u9879\u64cd\u4f5c\uff0c\u6570\u7ec4\u5b9e\u73b0\u989d\u5916\u652f\u6301\u968f\u673a\u8bbf\u95ee\uff0c\u4f46\u8fd9\u5df2\u7ecf\u8d85\u51fa\u6808\u7684\u5b9a\u4e49\u8303\u7574\uff0c\u4e00\u822c\u4e0d\u4f1a\u7528\u5230\u3002

    "},{"location":"chapter_stack_and_queue/stack/#_4","title":"\u65f6\u95f4\u6548\u7387","text":"

    \u5728\u6570\u7ec4\uff08\u5217\u8868\uff09\u5b9e\u73b0\u4e2d\uff0c\u5165\u6808\u4e0e\u51fa\u6808\u64cd\u4f5c\u90fd\u662f\u5728\u9884\u5148\u5206\u914d\u597d\u7684\u8fde\u7eed\u5185\u5b58\u4e2d\u64cd\u4f5c\uff0c\u5177\u6709\u5f88\u597d\u7684\u7f13\u5b58\u672c\u5730\u6027\uff0c\u6548\u7387\u5f88\u597d\u3002\u7136\u800c\uff0c\u5982\u679c\u5165\u6808\u65f6\u8d85\u51fa\u6570\u7ec4\u5bb9\u91cf\uff0c\u5219\u4f1a\u89e6\u53d1\u6269\u5bb9\u673a\u5236\uff0c\u90a3\u4e48\u8be5\u6b21\u5165\u6808\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \u3002

    \u5728\u94fe\u8868\u5b9e\u73b0\u4e2d\uff0c\u94fe\u8868\u7684\u6269\u5bb9\u975e\u5e38\u7075\u6d3b\uff0c\u4e0d\u5b58\u5728\u4e0a\u8ff0\u6570\u7ec4\u6269\u5bb9\u65f6\u53d8\u6162\u7684\u95ee\u9898\u3002\u7136\u800c\uff0c\u5165\u6808\u64cd\u4f5c\u9700\u8981\u521d\u59cb\u5316\u7ed3\u70b9\u5bf9\u8c61\u5e76\u4fee\u6539\u6307\u9488\uff0c\u56e0\u800c\u6548\u7387\u4e0d\u5982\u6570\u7ec4\u3002\u8fdb\u4e00\u6b65\u5730\u601d\u8003\uff0c\u5982\u679c\u5165\u6808\u5143\u7d20\u4e0d\u662f int \u800c\u662f\u7ed3\u70b9\u5bf9\u8c61\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u7701\u53bb\u521d\u59cb\u5316\u6b65\u9aa4\uff0c\u4ece\u800c\u63d0\u5347\u6548\u7387\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u5f53\u5165\u6808\u4e0e\u51fa\u6808\u64cd\u4f5c\u7684\u5143\u7d20\u662f\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff08\u4f8b\u5982 int , double \uff09\u65f6\uff0c\u5219\u7ed3\u8bba\u5982\u4e0b\uff1a

    • \u6570\u7ec4\u5b9e\u73b0\u7684\u6808\u5728\u89e6\u53d1\u6269\u5bb9\u65f6\u4f1a\u53d8\u6162\uff0c\u4f46\u7531\u4e8e\u6269\u5bb9\u662f\u4f4e\u9891\u64cd\u4f5c\uff0c\u56e0\u6b64 \u603b\u4f53\u6548\u7387\u66f4\u9ad8\uff1b
    • \u94fe\u8868\u5b9e\u73b0\u7684\u6808\u53ef\u4ee5\u63d0\u4f9b \u66f4\u52a0\u7a33\u5b9a\u7684\u6548\u7387\u8868\u73b0\uff1b
    "},{"location":"chapter_stack_and_queue/stack/#_5","title":"\u7a7a\u95f4\u6548\u7387","text":"

    \u5728\u521d\u59cb\u5316\u5217\u8868\u65f6\uff0c\u7cfb\u7edf\u4f1a\u7ed9\u5217\u8868\u5206\u914d\u201c\u521d\u59cb\u5bb9\u91cf\u201d\uff0c\u8be5\u5bb9\u91cf\u53ef\u80fd\u8d85\u8fc7\u6211\u4eec\u7684\u9700\u6c42\u3002\u5e76\u4e14\u6269\u5bb9\u673a\u5236\u4e00\u822c\u662f\u6309\u7167\u7279\u5b9a\u500d\u7387\uff08\u6bd4\u5982 2 \u500d\uff09\u8fdb\u884c\u6269\u5bb9\uff0c\u6269\u5bb9\u540e\u7684\u5bb9\u91cf\u4e5f\u53ef\u80fd\u8d85\u51fa\u6211\u4eec\u7684\u9700\u6c42\u3002\u56e0\u6b64\uff0c\u6570\u7ec4\u5b9e\u73b0\u6808\u4f1a\u9020\u6210\u4e00\u5b9a\u7684\u7a7a\u95f4\u6d6a\u8d39\u3002

    \u5f53\u7136\uff0c\u7531\u4e8e\u7ed3\u70b9\u9700\u8981\u989d\u5916\u5b58\u50a8\u6307\u9488\uff0c\u56e0\u6b64 \u94fe\u8868\u7ed3\u70b9\u6bd4\u6570\u7ec4\u5143\u7d20\u5360\u7528\u66f4\u5927\u3002

    \u7efc\u4e0a\uff0c\u6211\u4eec\u4e0d\u80fd\u7b80\u5355\u5730\u786e\u5b9a\u54ea\u79cd\u5b9e\u73b0\u66f4\u52a0\u7701\u5185\u5b58\uff0c\u9700\u8981 case-by-case \u5730\u5206\u6790\u3002

    "},{"location":"chapter_stack_and_queue/stack/#514","title":"5.1.4. \u00a0 \u6808\u5178\u578b\u5e94\u7528","text":"
    • \u6d4f\u89c8\u5668\u4e2d\u7684\u540e\u9000\u4e0e\u524d\u8fdb\u3001\u8f6f\u4ef6\u4e2d\u7684\u64a4\u9500\u4e0e\u53cd\u64a4\u9500\u3002\u6bcf\u5f53\u6211\u4eec\u6253\u5f00\u65b0\u7684\u7f51\u9875\uff0c\u6d4f\u89c8\u5668\u5c31\u5c06\u4e0a\u4e00\u4e2a\u7f51\u9875\u6267\u884c\u5165\u6808\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u300c\u540e\u9000\u300d\u64cd\u4f5c\u6765\u56de\u5230\u4e0a\u4e00\u9875\u9762\uff0c\u540e\u9000\u64cd\u4f5c\u5b9e\u9645\u4e0a\u662f\u5728\u6267\u884c\u51fa\u6808\u3002\u5982\u679c\u8981\u540c\u65f6\u652f\u6301\u540e\u9000\u548c\u524d\u8fdb\uff0c\u90a3\u4e48\u5219\u9700\u8981\u4e24\u4e2a\u6808\u6765\u914d\u5408\u5b9e\u73b0\u3002
    • \u7a0b\u5e8f\u5185\u5b58\u7ba1\u7406\u3002\u6bcf\u5f53\u8c03\u7528\u51fd\u6570\u65f6\uff0c\u7cfb\u7edf\u5c31\u4f1a\u5728\u6808\u9876\u6dfb\u52a0\u4e00\u4e2a\u6808\u5e27\uff0c\u7528\u6765\u8bb0\u5f55\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u4fe1\u606f\u3002\u5728\u9012\u5f52\u51fd\u6570\u4e2d\uff0c\u5411\u4e0b\u9012\u63a8\u4f1a\u4e0d\u65ad\u6267\u884c\u5165\u6808\uff0c\u5411\u4e0a\u56de\u6eaf\u9636\u6bb5\u65f6\u51fa\u6808\u3002
    "},{"location":"chapter_stack_and_queue/summary/","title":"5.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u6808\u662f\u4e00\u79cd\u9075\u5faa\u5148\u5165\u540e\u51fa\u7684\u6570\u636e\u7ed3\u6784\uff0c\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u94fe\u8868\u5b9e\u73b0\u3002
    • \u5728\u65f6\u95f4\u6548\u7387\u65b9\u9762\uff0c\u6808\u7684\u6570\u7ec4\u5b9e\u73b0\u5177\u6709\u66f4\u597d\u7684\u5e73\u5747\u6548\u7387\uff0c\u4f46\u6269\u5bb9\u65f6\u4f1a\u5bfc\u81f4\u5355\u6b21\u5165\u6808\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n)\\) \u3002\u76f8\u5bf9\u5730\uff0c\u6808\u7684\u94fe\u8868\u5b9e\u73b0\u5177\u6709\u66f4\u52a0\u7a33\u5b9a\u7684\u6548\u7387\u8868\u73b0\u3002
    • \u5728\u7a7a\u95f4\u6548\u7387\u65b9\u9762\uff0c\u6808\u7684\u6570\u7ec4\u5b9e\u73b0\u4f1a\u9020\u6210\u4e00\u5b9a\u7a7a\u95f4\u6d6a\u8d39\uff0c\u7136\u800c\u94fe\u8868\u7ed3\u70b9\u6bd4\u6570\u7ec4\u5143\u7d20\u5360\u7528\u5185\u5b58\u66f4\u5927\u3002
    • \u961f\u5217\u662f\u4e00\u79cd\u9075\u5faa\u5148\u5165\u5148\u51fa\u7684\u6570\u636e\u7ed3\u6784\uff0c\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u94fe\u8868\u5b9e\u73b0\u3002\u5bf9\u4e8e\u4e24\u79cd\u5b9e\u73b0\u7684\u65f6\u95f4\u6548\u7387\u4e0e\u7a7a\u95f4\u6548\u7387\u5bf9\u6bd4\uff0c\u4e0e\u4e0a\u8ff0\u6808\u7684\u7ed3\u8bba\u76f8\u540c\u3002
    • \u53cc\u5411\u961f\u5217\u7684\u4e24\u7aef\u90fd\u53ef\u4ee5\u6dfb\u52a0\u4e0e\u5220\u9664\u5143\u7d20\u3002
    "},{"location":"chapter_tree/avl_tree/","title":"7.4. \u00a0 AVL \u6811 *","text":"

    \u5728\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u7ae0\u8282\u4e2d\u63d0\u5230\uff0c\u5728\u8fdb\u884c\u591a\u6b21\u63d2\u5165\u4e0e\u5220\u9664\u64cd\u4f5c\u540e\uff0c\u4e8c\u53c9\u641c\u7d22\u6811\u53ef\u80fd\u4f1a\u9000\u5316\u4e3a\u94fe\u8868\u3002\u6b64\u65f6\u6240\u6709\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4f1a\u7531 \\(O(\\log n)\\) \u52a3\u5316\u81f3 \\(O(n)\\) \u3002

    \u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6267\u884c\u4e24\u6b65\u5220\u9664\u7ed3\u70b9\u540e\uff0c\u8be5\u4e8c\u53c9\u641c\u7d22\u6811\u5c31\u4f1a\u9000\u5316\u4e3a\u94fe\u8868\u3002

    Fig. AVL \u6811\u5728\u5220\u9664\u7ed3\u70b9\u540e\u53d1\u751f\u9000\u5316

    \u518d\u6bd4\u5982\uff0c\u5728\u4ee5\u4e0b\u5b8c\u7f8e\u4e8c\u53c9\u6811\u4e2d\u63d2\u5165\u4e24\u4e2a\u7ed3\u70b9\u540e\uff0c\u6811\u4e25\u91cd\u5411\u5de6\u504f\u659c\uff0c\u67e5\u627e\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u968f\u4e4b\u53d1\u751f\u52a3\u5316\u3002

    Fig. AVL \u6811\u5728\u63d2\u5165\u7ed3\u70b9\u540e\u53d1\u751f\u9000\u5316

    G. M. Adelson-Velsky \u548c E. M. Landis \u5728\u5176 1962 \u5e74\u53d1\u8868\u7684\u8bba\u6587 \"An algorithm for the organization of information\" \u4e2d\u63d0\u51fa\u4e86\u300cAVL \u6811\u300d\u3002\u8bba\u6587\u4e2d\u63cf\u8ff0\u4e86\u4e00\u7cfb\u5217\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5728\u4e0d\u65ad\u6dfb\u52a0\u4e0e\u5220\u9664\u7ed3\u70b9\u540e\uff0cAVL \u6811\u4ecd\u7136\u4e0d\u4f1a\u53d1\u751f\u9000\u5316\uff0c\u8fdb\u800c\u4f7f\u5f97\u5404\u79cd\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5747\u80fd\u4fdd\u6301\u5728 \\(O(\\log n)\\) \u7ea7\u522b\u3002

    \u6362\u8a00\u4e4b\uff0c\u5728\u9891\u7e41\u589e\u5220\u67e5\u6539\u7684\u4f7f\u7528\u573a\u666f\u4e2d\uff0cAVL \u6811\u53ef\u59cb\u7ec8\u4fdd\u6301\u5f88\u9ad8\u7684\u6570\u636e\u589e\u5220\u67e5\u6539\u6548\u7387\uff0c\u5177\u6709\u5f88\u597d\u7684\u5e94\u7528\u4ef7\u503c\u3002

    "},{"location":"chapter_tree/avl_tree/#741-avl","title":"7.4.1. \u00a0 AVL \u6811\u5e38\u89c1\u672f\u8bed","text":"

    \u300cAVL \u6811\u300d\u65e2\u662f\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u53c8\u662f\u300c\u5e73\u8861\u4e8c\u53c9\u6811\u300d\uff0c\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e24\u79cd\u4e8c\u53c9\u6811\u7684\u6240\u6709\u6027\u8d28\uff0c\u56e0\u6b64\u53c8\u88ab\u79f0\u4e3a\u300c\u5e73\u8861\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u3002

    "},{"location":"chapter_tree/avl_tree/#_1","title":"\u7ed3\u70b9\u9ad8\u5ea6","text":"

    \u5728 AVL \u6811\u7684\u64cd\u4f5c\u4e2d\uff0c\u9700\u8981\u83b7\u53d6\u7ed3\u70b9\u300c\u9ad8\u5ea6 Height\u300d\uff0c\u6240\u4ee5\u7ed9 AVL \u6811\u7684\u7ed3\u70b9\u7c7b\u6dfb\u52a0 height \u53d8\u91cf\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\npublic int val;        // \u7ed3\u70b9\u503c\npublic int height;     // \u7ed3\u70b9\u9ad8\u5ea6\npublic TreeNode left;  // \u5de6\u5b50\u7ed3\u70b9\npublic TreeNode right; // \u53f3\u5b50\u7ed3\u70b9\npublic TreeNode(int x) { val = x; }\n}\n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nstruct TreeNode {\nint val{};          // \u7ed3\u70b9\u503c\nint height = 0;     // \u7ed3\u70b9\u9ad8\u5ea6\nTreeNode *left{};   // \u5de6\u5b50\u7ed3\u70b9\nTreeNode *right{};  // \u53f3\u5b50\u7ed3\u70b9\nTreeNode() = default;\nexplicit TreeNode(int x) : val(x){}\n};\n
    \"\"\" AVL \u6811\u7ed3\u70b9\u7c7b \"\"\"\nclass TreeNode:\ndef __init__(self, val: int):\nself.val: int = val                    # \u7ed3\u70b9\u503c\nself.height: int = 0                   # \u7ed3\u70b9\u9ad8\u5ea6\nself.left: Optional[TreeNode] = None   # \u5de6\u5b50\u7ed3\u70b9\u5f15\u7528\nself.right: Optional[TreeNode] = None  # \u53f3\u5b50\u7ed3\u70b9\u5f15\u7528\n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\ntype TreeNode struct {\nVal    int       // \u7ed3\u70b9\u503c\nHeight int       // \u7ed3\u70b9\u9ad8\u5ea6\nLeft   *TreeNode // \u5de6\u5b50\u7ed3\u70b9\u5f15\u7528\nRight  *TreeNode // \u53f3\u5b50\u7ed3\u70b9\u5f15\u7528\n}\n
    class TreeNode {\nval; // \u7ed3\u70b9\u503c\nheight; //\u7ed3\u70b9\u9ad8\u5ea6\nleft; // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nright; // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nconstructor(val, left, right, height) {\nthis.val = val === undefined ? 0 : val;\nthis.height = height === undefined ? 0 : height;\nthis.left = left === undefined ? null : left;\nthis.right = right === undefined ? null : right;\n}\n}\n
    class TreeNode {\nval: number;            // \u7ed3\u70b9\u503c\nheight: number;         // \u7ed3\u70b9\u9ad8\u5ea6\nleft: TreeNode | null;  // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nright: TreeNode | null; // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nconstructor(val?: number, height?: number, left?: TreeNode | null, right?: TreeNode | null) {\nthis.val = val === undefined ? 0 : val;\nthis.height = height === undefined ? 0 : height; this.left = left === undefined ? null : left; this.right = right === undefined ? null : right; }\n}\n
    \n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\npublic int val;          // \u7ed3\u70b9\u503c\npublic int height;       // \u7ed3\u70b9\u9ad8\u5ea6\npublic TreeNode? left;   // \u5de6\u5b50\u7ed3\u70b9\npublic TreeNode? right;  // \u53f3\u5b50\u7ed3\u70b9\npublic TreeNode(int x) { val = x; }\n}\n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar height: Int // \u7ed3\u70b9\u9ad8\u5ea6\nvar left: TreeNode? // \u5de6\u5b50\u7ed3\u70b9\nvar right: TreeNode? // \u53f3\u5b50\u7ed3\u70b9\ninit(x: Int) {\nval = x\nheight = 0\n}\n}\n
    \n

    \u300c\u7ed3\u70b9\u9ad8\u5ea6\u300d\u662f\u6700\u8fdc\u53f6\u7ed3\u70b9\u5230\u8be5\u7ed3\u70b9\u7684\u8ddd\u79bb\uff0c\u5373\u8d70\u8fc7\u7684\u300c\u8fb9\u300d\u7684\u6570\u91cf\u3002\u9700\u8981\u7279\u522b\u6ce8\u610f\uff0c\u53f6\u7ed3\u70b9\u7684\u9ad8\u5ea6\u4e3a 0 \uff0c\u7a7a\u7ed3\u70b9\u7684\u9ad8\u5ea6\u4e3a -1\u3002\u6211\u4eec\u5c01\u88c5\u4e24\u4e2a\u5de5\u5177\u51fd\u6570\uff0c\u5206\u522b\u7528\u4e8e\u83b7\u53d6\u4e0e\u66f4\u65b0\u7ed3\u70b9\u7684\u9ad8\u5ea6\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nint height(TreeNode node) {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node == null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nvoid updateHeight(TreeNode node) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.max(height(node.left), height(node.right)) + 1;\n}\n
    avl_tree.cpp
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nint height(TreeNode* node) {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node == nullptr ? -1 : node->height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nvoid updateHeight(TreeNode* node) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode->height = max(height(node->left), height(node->right)) + 1;\n}\n
    avl_tree.py
    def height(self, node: Optional[TreeNode]) -> int:\n\"\"\" \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 \"\"\"\n# \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nif node is not None:\nreturn node.height\nreturn -1\ndef __update_height(self, node: Optional[TreeNode]):\n\"\"\" \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 \"\"\"\n# \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = max([self.height(node.left), self.height(node.right)]) + 1\n
    avl_tree.go
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc (t *aVLTree) height(node *TreeNode) int {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nif node != nil {\nreturn node.Height\n}\nreturn -1\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc (t *aVLTree) updateHeight(node *TreeNode) {\nlh := t.height(node.Left)\nrh := t.height(node.Right)\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nif lh > rh {\nnode.Height = lh + 1\n} else {\nnode.Height = rh + 1\n}\n}\n
    avl_tree.js
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nheight(node) {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node === null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\n#updateHeight(node) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.max(this.height(node.left), this.height(node.right)) + 1;\n}\n
    avl_tree.ts
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nheight(node: TreeNode): number {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node === null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nupdateHeight(node: TreeNode): void {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.max(this.height(node.left), this.height(node.right)) + 1;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{height}\n[class]{aVLTree}-[func]{updateHeight}\n
    avl_tree.cs
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nint height(TreeNode? node)\n{\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node == null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nvoid updateHeight(TreeNode node)\n{\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.Max(height(node.left), height(node.right)) + 1;\n}\n
    avl_tree.swift
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc height(node: TreeNode?) -> Int {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nnode == nil ? -1 : node!.height\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc updateHeight(node: TreeNode?) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode?.height = max(height(node: node?.left), height(node: node?.right)) + 1\n}\n
    avl_tree.zig
    // \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6\nfn height(self: *Self, node: ?*inc.TreeNode(T)) i32 {\n_ = self;\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn if (node == null) -1 else node.?.height;\n}\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nfn updateHeight(self: *Self, node: ?*inc.TreeNode(T)) void {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.?.height = std.math.max(self.height(node.?.left), self.height(node.?.right)) + 1;\n}\n
    "},{"location":"chapter_tree/avl_tree/#_2","title":"\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50","text":"

    \u7ed3\u70b9\u7684\u300c\u5e73\u8861\u56e0\u5b50 Balance Factor\u300d\u662f \u7ed3\u70b9\u7684\u5de6\u5b50\u6811\u9ad8\u5ea6\u51cf\u53bb\u53f3\u5b50\u6811\u9ad8\u5ea6\uff0c\u5e76\u5b9a\u4e49\u7a7a\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u4e3a 0 \u3002\u540c\u6837\u5730\uff0c\u6211\u4eec\u5c06\u83b7\u53d6\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u5c01\u88c5\u6210\u51fd\u6570\uff0c\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nint balanceFactor(TreeNode node) {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node.left) - height(node.right);\n}\n
    avl_tree.cpp
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nint balanceFactor(TreeNode* node) {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == nullptr) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node->left) - height(node->right);\n}\n
    avl_tree.py
    def balance_factor(self, node: Optional[TreeNode]) -> int:\n\"\"\" \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 \"\"\"\n# \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif node is None:\nreturn 0\n# \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn self.height(node.left) - self.height(node.right)\n
    avl_tree.go
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nfunc (t *aVLTree) balanceFactor(node *TreeNode) int {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif node == nil {\nreturn 0\n}\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn t.height(node.Left) - t.height(node.Right)\n}\n
    avl_tree.js
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nbalanceFactor(node) {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node === null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn this.height(node.left) - this.height(node.right);\n}\n
    avl_tree.ts
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nbalanceFactor(node: TreeNode): number {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node === null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn this.height(node.left) - this.height(node.right);\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{balanceFactor}\n
    avl_tree.cs
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nint balanceFactor(TreeNode? node)\n{\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node.left) - height(node.right);\n}\n
    avl_tree.swift
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nfunc balanceFactor(node: TreeNode?) -> Int {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nguard let node = node else { return 0 }\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node: node.left) - height(node: node.right)\n}\n
    avl_tree.zig
    // \u83b7\u53d6\u5e73\u8861\u56e0\u5b50\nfn balanceFactor(self: *Self, node: ?*inc.TreeNode(T)) i32 {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn self.height(node.?.left) - self.height(node.?.right);\n}\n

    Note

    \u8bbe\u5e73\u8861\u56e0\u5b50\u4e3a \\(f\\) \uff0c\u5219\u4e00\u68f5 AVL \u6811\u7684\u4efb\u610f\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u7686\u6ee1\u8db3 \\(-1 \\le f \\le 1\\) \u3002

    "},{"location":"chapter_tree/avl_tree/#742-avl","title":"7.4.2. \u00a0 AVL \u6811\u65cb\u8f6c","text":"

    AVL \u6811\u7684\u72ec\u7279\u4e4b\u5904\u5728\u4e8e\u300c\u65cb\u8f6c Rotation\u300d\u7684\u64cd\u4f5c\uff0c\u5176\u53ef \u5728\u4e0d\u5f71\u54cd\u4e8c\u53c9\u6811\u4e2d\u5e8f\u904d\u5386\u5e8f\u5217\u7684\u524d\u63d0\u4e0b\uff0c\u4f7f\u5931\u8861\u7ed3\u70b9\u91cd\u65b0\u6062\u590d\u5e73\u8861\u3002\u6362\u8a00\u4e4b\uff0c\u65cb\u8f6c\u64cd\u4f5c\u65e2\u53ef\u4ee5\u4f7f\u6811\u4fdd\u6301\u4e3a\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u6811\u91cd\u65b0\u6062\u590d\u4e3a\u300c\u5e73\u8861\u4e8c\u53c9\u6811\u300d\u3002

    \u6211\u4eec\u5c06\u5e73\u8861\u56e0\u5b50\u7684\u7edd\u5bf9\u503c \\(> 1\\) \u7684\u7ed3\u70b9\u79f0\u4e3a\u300c\u5931\u8861\u7ed3\u70b9\u300d\u3002\u6839\u636e\u7ed3\u70b9\u7684\u5931\u8861\u60c5\u51b5\uff0c\u65cb\u8f6c\u64cd\u4f5c\u5206\u4e3a \u53f3\u65cb\u3001\u5de6\u65cb\u3001\u5148\u53f3\u65cb\u540e\u5de6\u65cb\u3001\u5148\u5de6\u65cb\u540e\u53f3\u65cb\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u4e00\u8d77\u6765\u770b\u770b\u5b83\u4eec\u662f\u5982\u4f55\u64cd\u4f5c\u7684\u3002

    "},{"location":"chapter_tree/avl_tree/#case-1-","title":"Case 1 - \u53f3\u65cb","text":"

    \u5982\u4e0b\u56fe\u6240\u793a\uff08\u7ed3\u70b9\u4e0b\u65b9\u4e3a\u300c\u5e73\u8861\u56e0\u5b50\u300d\uff09\uff0c\u4ece\u5e95\u81f3\u9876\u770b\uff0c\u4e8c\u53c9\u6811\u4e2d\u9996\u4e2a\u5931\u8861\u7ed3\u70b9\u662f \u7ed3\u70b9 3\u3002\u6211\u4eec\u805a\u7126\u5728\u4ee5\u8be5\u5931\u8861\u7ed3\u70b9\u4e3a\u6839\u7ed3\u70b9\u7684\u5b50\u6811\u4e0a\uff0c\u5c06\u8be5\u7ed3\u70b9\u8bb0\u4e3a node \uff0c\u5c06\u5176\u5de6\u5b50\u7ed3\u70b9\u8bb0\u4e3a child \uff0c\u6267\u884c\u300c\u53f3\u65cb\u300d\u64cd\u4f5c\u3002\u5b8c\u6210\u53f3\u65cb\u540e\uff0c\u8be5\u5b50\u6811\u5df2\u7ecf\u6062\u590d\u5e73\u8861\uff0c\u5e76\u4e14\u4ecd\u7136\u4e3a\u4e8c\u53c9\u641c\u7d22\u6811\u3002

    <1><2><3><4>

    \u8fdb\u800c\uff0c\u5982\u679c\u7ed3\u70b9 child \u672c\u8eab\u6709\u53f3\u5b50\u7ed3\u70b9\uff08\u8bb0\u4e3a grandChild \uff09\uff0c\u5219\u9700\u8981\u5728\u300c\u53f3\u65cb\u300d\u4e2d\u6dfb\u52a0\u4e00\u6b65\uff1a\u5c06 grandChild \u4f5c\u4e3a node \u7684\u5de6\u5b50\u7ed3\u70b9\u3002

    Fig. \u6709 grandChild \u7684\u53f3\u65cb\u64cd\u4f5c

    \u201c\u5411\u53f3\u65cb\u8f6c\u201d\u662f\u4e00\u79cd\u5f62\u8c61\u5316\u7684\u8bf4\u6cd5\uff0c\u5b9e\u9645\u9700\u8981\u901a\u8fc7\u4fee\u6539\u7ed3\u70b9\u6307\u9488\u5b9e\u73b0\uff0c\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u53f3\u65cb\u64cd\u4f5c */\nTreeNode rightRotate(TreeNode node) {\nTreeNode child = node.left;\nTreeNode grandChild = child.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.cpp
    /* \u53f3\u65cb\u64cd\u4f5c */\nTreeNode* rightRotate(TreeNode* node) {\nTreeNode* child = node->left;\nTreeNode* grandChild = child->right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild->right = node;\nnode->left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.py
    def __right_rotate(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u53f3\u65cb\u64cd\u4f5c \"\"\"\nchild = node.left\ngrand_child = child.right\n# \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node\nnode.left = grand_child\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\nself.__update_height(child)\n# \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n
    avl_tree.go
    /* \u53f3\u65cb\u64cd\u4f5c */\nfunc (t *aVLTree) rightRotate(node *TreeNode) *TreeNode {\nchild := node.Left\ngrandChild := child.Right\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.Right = node\nnode.Left = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\nt.updateHeight(child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.js
    /* \u53f3\u65cb\u64cd\u4f5c */\n#rightRotate(node) {\nconst child = node.left;\nconst grandChild = child.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.#updateHeight(node);\nthis.#updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.ts
    /* \u53f3\u65cb\u64cd\u4f5c */\nrightRotate(node: TreeNode): TreeNode {\nconst child = node.left;\nconst grandChild = child.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.updateHeight(node);\nthis.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{rightRotate}\n
    avl_tree.cs
    /* \u53f3\u65cb\u64cd\u4f5c */\nTreeNode? rightRotate(TreeNode? node)\n{\nTreeNode? child = node.left;\nTreeNode? grandChild = child?.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.swift
    /* \u53f3\u65cb\u64cd\u4f5c */\nfunc rightRotate(node: TreeNode?) -> TreeNode? {\nlet child = node?.left\nlet grandChild = child?.right\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild?.right = node\nnode?.left = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node: node)\nupdateHeight(node: child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.zig
    // \u53f3\u65cb\u64cd\u4f5c\nfn rightRotate(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\nvar child = node.?.left;\nvar grandChild = child.?.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.?.right = node;\nnode.?.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.updateHeight(node);\nself.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    "},{"location":"chapter_tree/avl_tree/#case-2-","title":"Case 2 - \u5de6\u65cb","text":"

    \u7c7b\u4f3c\u5730\uff0c\u5982\u679c\u5c06\u53d6\u4e0a\u8ff0\u5931\u8861\u4e8c\u53c9\u6811\u7684\u201c\u955c\u50cf\u201d\uff0c\u90a3\u4e48\u5219\u9700\u8981\u300c\u5de6\u65cb\u300d\u64cd\u4f5c\u3002

    Fig. \u5de6\u65cb\u64cd\u4f5c

    \u540c\u7406\uff0c\u82e5\u7ed3\u70b9 child \u672c\u8eab\u6709\u5de6\u5b50\u7ed3\u70b9\uff08\u8bb0\u4e3a grandChild \uff09\uff0c\u5219\u9700\u8981\u5728\u300c\u5de6\u65cb\u300d\u4e2d\u6dfb\u52a0\u4e00\u6b65\uff1a\u5c06 grandChild \u4f5c\u4e3a node \u7684\u53f3\u5b50\u7ed3\u70b9\u3002

    Fig. \u6709 grandChild \u7684\u5de6\u65cb\u64cd\u4f5c

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u300c\u5de6\u65cb\u300d\u548c\u300c\u53f3\u65cb\u300d\u64cd\u4f5c\u662f\u955c\u50cf\u5bf9\u79f0\u7684\uff0c\u4e24\u8005\u5bf9\u5e94\u89e3\u51b3\u7684\u4e24\u79cd\u5931\u8861\u60c5\u51b5\u4e5f\u662f\u5bf9\u79f0\u7684\u3002\u6839\u636e\u5bf9\u79f0\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u4ece\u300c\u53f3\u65cb\u300d\u63a8\u5bfc\u51fa\u300c\u5de6\u65cb\u300d\u3002\u5177\u4f53\u5730\uff0c\u53ea\u9700\u5c06\u300c\u53f3\u65cb\u300d\u4ee3\u7801\u4e2d\u7684\u628a\u6240\u6709\u7684 left \u66ff\u6362\u4e3a right \u3001\u6240\u6709\u7684 right \u66ff\u6362\u4e3a left \uff0c\u5373\u53ef\u5f97\u5230\u300c\u5de6\u65cb\u300d\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u5de6\u65cb\u64cd\u4f5c */\nTreeNode leftRotate(TreeNode node) {\nTreeNode child = node.right;\nTreeNode grandChild = child.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.cpp
    /* \u5de6\u65cb\u64cd\u4f5c */\nTreeNode* leftRotate(TreeNode* node) {\nTreeNode* child = node->right;\nTreeNode* grandChild = child->left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild->left = node;\nnode->right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.py
    def __left_rotate(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u5de6\u65cb\u64cd\u4f5c \"\"\"\nchild = node.right\ngrand_child = child.left\n# \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node\nnode.right = grand_child\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\nself.__update_height(child)\n# \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n
    avl_tree.go
    /* \u5de6\u65cb\u64cd\u4f5c */\nfunc (t *aVLTree) leftRotate(node *TreeNode) *TreeNode {\nchild := node.Right\ngrandChild := child.Left\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.Left = node\nnode.Right = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\nt.updateHeight(child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.js
    /* \u5de6\u65cb\u64cd\u4f5c */\n#leftRotate(node) {\nconst child = node.right;\nconst grandChild = child.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.#updateHeight(node);\nthis.#updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.ts
    /* \u5de6\u65cb\u64cd\u4f5c */\nleftRotate(node: TreeNode): TreeNode {\nconst child = node.right;\nconst grandChild = child.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.updateHeight(node);\nthis.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{leftRotate}\n
    avl_tree.cs
    /* \u5de6\u65cb\u64cd\u4f5c */\nTreeNode? leftRotate(TreeNode? node)\n{\nTreeNode? child = node.right;\nTreeNode? grandChild = child?.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.swift
    /* \u5de6\u65cb\u64cd\u4f5c */\nfunc leftRotate(node: TreeNode?) -> TreeNode? {\nlet child = node?.right\nlet grandChild = child?.left\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild?.left = node\nnode?.right = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node: node)\nupdateHeight(node: child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.zig
    // \u5de6\u65cb\u64cd\u4f5c\nfn leftRotate(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\nvar child = node.?.right;\nvar grandChild = child.?.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.?.left = node;\nnode.?.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.updateHeight(node);\nself.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    "},{"location":"chapter_tree/avl_tree/#case-3-","title":"Case 3 - \u5148\u5de6\u540e\u53f3","text":"

    \u5bf9\u4e8e\u4e0b\u56fe\u7684\u5931\u8861\u7ed3\u70b9 3 \uff0c\u5355\u4e00\u4f7f\u7528\u5de6\u65cb\u6216\u53f3\u65cb\u90fd\u65e0\u6cd5\u4f7f\u5b50\u6811\u6062\u590d\u5e73\u8861\uff0c\u6b64\u65f6\u9700\u8981\u300c\u5148\u5de6\u65cb\u540e\u53f3\u65cb\u300d\uff0c\u5373\u5148\u5bf9 child \u6267\u884c\u300c\u5de6\u65cb\u300d\uff0c\u518d\u5bf9 node \u6267\u884c\u300c\u53f3\u65cb\u300d\u3002

    Fig. \u5148\u5de6\u65cb\u540e\u53f3\u65cb

    "},{"location":"chapter_tree/avl_tree/#case-4-","title":"Case 4 - \u5148\u53f3\u540e\u5de6","text":"

    \u540c\u7406\uff0c\u53d6\u4ee5\u4e0a\u5931\u8861\u4e8c\u53c9\u6811\u7684\u955c\u50cf\uff0c\u5219\u9700\u8981\u300c\u5148\u53f3\u65cb\u540e\u5de6\u65cb\u300d\uff0c\u5373\u5148\u5bf9 child \u6267\u884c\u300c\u53f3\u65cb\u300d\uff0c\u7136\u540e\u5bf9 node \u6267\u884c\u300c\u5de6\u65cb\u300d\u3002

    Fig. \u5148\u53f3\u65cb\u540e\u5de6\u65cb

    "},{"location":"chapter_tree/avl_tree/#_3","title":"\u65cb\u8f6c\u7684\u9009\u62e9","text":"

    \u4e0b\u56fe\u63cf\u8ff0\u7684\u56db\u79cd\u5931\u8861\u60c5\u51b5\u4e0e\u4e0a\u8ff0 Cases \u9010\u4e2a\u5bf9\u5e94\uff0c\u5206\u522b\u9700\u91c7\u7528 \u53f3\u65cb\u3001\u5de6\u65cb\u3001\u5148\u53f3\u540e\u5de6\u3001\u5148\u5de6\u540e\u53f3 \u7684\u65cb\u8f6c\u64cd\u4f5c\u3002

    Fig. AVL \u6811\u7684\u56db\u79cd\u65cb\u8f6c\u60c5\u51b5

    \u5177\u4f53\u5730\uff0c\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528 \u5931\u8861\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u3001\u8f83\u9ad8\u4e00\u4fa7\u5b50\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50 \u6765\u786e\u5b9a\u5931\u8861\u7ed3\u70b9\u5c5e\u4e8e\u4e0a\u56fe\u4e2d\u7684\u54ea\u79cd\u60c5\u51b5\u3002

    \u5931\u8861\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50 \u5b50\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50 \u5e94\u91c7\u7528\u7684\u65cb\u8f6c\u65b9\u6cd5 \\(>0\\) \uff08\u5373\u5de6\u504f\u6811\uff09 \\(\\geq 0\\) \u53f3\u65cb \\(>0\\) \uff08\u5373\u5de6\u504f\u6811\uff09 \\(<0\\) \u5148\u5de6\u65cb\u540e\u53f3\u65cb \\(<0\\) \uff08\u5373\u53f3\u504f\u6811\uff09 \\(\\leq 0\\) \u5de6\u65cb \\(<0\\) \uff08\u5373\u53f3\u504f\u6811\uff09 \\(>0\\) \u5148\u53f3\u65cb\u540e\u5de6\u65cb

    \u4e3a\u65b9\u4fbf\u4f7f\u7528\uff0c\u6211\u4eec\u5c06\u65cb\u8f6c\u64cd\u4f5c\u5c01\u88c5\u6210\u4e00\u4e2a\u51fd\u6570\u3002\u81f3\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u6b64\u51fd\u6570\u6765\u65cb\u8f6c\u5404\u79cd\u5931\u8861\u60c5\u51b5\uff0c\u4f7f\u5931\u8861\u7ed3\u70b9\u91cd\u65b0\u6062\u590d\u5e73\u8861\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nTreeNode rotate(TreeNode node) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nint balanceFactor = balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactor > 1) {\nif (balanceFactor(node.left) >= 0) {\n// \u53f3\u65cb\nreturn rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = leftRotate(node.left);\nreturn rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactor < -1) {\nif (balanceFactor(node.right) <= 0) {\n// \u5de6\u65cb\nreturn leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = rightRotate(node.right);\nreturn leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.cpp
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nTreeNode* rotate(TreeNode* node) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nint _balanceFactor = balanceFactor(node);\n// \u5de6\u504f\u6811\nif (_balanceFactor > 1) {\nif (balanceFactor(node->left) >= 0) {\n// \u53f3\u65cb\nreturn rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode->left = leftRotate(node->left);\nreturn rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (_balanceFactor < -1) {\nif (balanceFactor(node->right) <= 0) {\n// \u5de6\u65cb\nreturn leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode->right = rightRotate(node->right);\nreturn leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.py
    def __rotate(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 \"\"\"\n# \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nbalance_factor = self.balance_factor(node)\n# \u5de6\u504f\u6811\nif balance_factor > 1:\nif self.balance_factor(node.left) >= 0:\n# \u53f3\u65cb\nreturn self.__right_rotate(node)\nelse:\n# \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = self.__left_rotate(node.left)\nreturn self.__right_rotate(node)\n# \u53f3\u504f\u6811\nelif balance_factor < -1:\nif self.balance_factor(node.right) <= 0:\n# \u5de6\u65cb\nreturn self.__left_rotate(node)\nelse:\n# \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = self.__right_rotate(node.right)\nreturn self.__left_rotate(node)\n# \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n
    avl_tree.go
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nfunc (t *aVLTree) rotate(node *TreeNode) *TreeNode {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\n// Go \u63a8\u8350\u77ed\u53d8\u91cf\uff0c\u8fd9\u91cc bf \u6307\u4ee3 t.balanceFactor\nbf := t.balanceFactor(node)\n// \u5de6\u504f\u6811\nif bf > 1 {\nif t.balanceFactor(node.Left) >= 0 {\n// \u53f3\u65cb\nreturn t.rightRotate(node)\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.Left = t.leftRotate(node.Left)\nreturn t.rightRotate(node)\n}\n}\n// \u53f3\u504f\u6811\nif bf < -1 {\nif t.balanceFactor(node.Right) <= 0 {\n// \u5de6\u65cb\nreturn t.leftRotate(node)\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.Right = t.rightRotate(node.Right)\nreturn t.leftRotate(node)\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n}\n
    avl_tree.js
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\n#rotate(node) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nconst balanceFactor = this.balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactor > 1) {\nif (this.balanceFactor(node.left) >= 0) {\n// \u53f3\u65cb\nreturn this.#rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = this.#leftRotate(node.left);\nreturn this.#rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactor < -1) {\nif (this.balanceFactor(node.right) <= 0) {\n// \u5de6\u65cb\nreturn this.#leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = this.#rightRotate(node.right);\nreturn this.#leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.ts
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nrotate(node: TreeNode): TreeNode {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nconst balanceFactor = this.balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactor > 1) {\nif (this.balanceFactor(node.left) >= 0) {\n// \u53f3\u65cb\nreturn this.rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = this.leftRotate(node.left);\nreturn this.rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactor < -1) {\nif (this.balanceFactor(node.right) <= 0) {\n// \u5de6\u65cb\nreturn this.leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = this.rightRotate(node.right);\nreturn this.leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{rotate}\n
    avl_tree.cs
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nTreeNode? rotate(TreeNode? node)\n{\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nint balanceFactorInt = balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactorInt > 1)\n{\nif (balanceFactor(node.left) >= 0)\n{\n// \u53f3\u65cb\nreturn rightRotate(node);\n}\nelse\n{\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = leftRotate(node?.left);\nreturn rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactorInt < -1)\n{\nif (balanceFactor(node.right) <= 0)\n{\n// \u5de6\u65cb\nreturn leftRotate(node);\n}\nelse\n{\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = rightRotate(node?.right);\nreturn leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.swift
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nfunc rotate(node: TreeNode?) -> TreeNode? {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nlet balanceFactor = balanceFactor(node: node)\n// \u5de6\u504f\u6811\nif balanceFactor > 1 {\nif self.balanceFactor(node: node?.left) >= 0 {\n// \u53f3\u65cb\nreturn rightRotate(node: node)\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode?.left = leftRotate(node: node?.left)\nreturn rightRotate(node: node)\n}\n}\n// \u53f3\u504f\u6811\nif balanceFactor < -1 {\nif self.balanceFactor(node: node?.right) <= 0 {\n// \u5de6\u65cb\nreturn leftRotate(node: node)\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode?.right = rightRotate(node: node?.right)\nreturn leftRotate(node: node)\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n}\n
    avl_tree.zig
    // \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nfn rotate(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nvar balance_factor = self.balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balance_factor > 1) {\nif (self.balanceFactor(node.?.left) >= 0) {\n// \u53f3\u65cb\nreturn self.rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.?.left = self.leftRotate(node.?.left);\nreturn self.rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balance_factor < -1) {\nif (self.balanceFactor(node.?.right) <= 0) {\n// \u5de6\u65cb\nreturn self.leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.?.right = self.rightRotate(node.?.right);\nreturn self.leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    "},{"location":"chapter_tree/avl_tree/#743-avl","title":"7.4.3. \u00a0 AVL \u6811\u5e38\u7528\u64cd\u4f5c","text":""},{"location":"chapter_tree/avl_tree/#_4","title":"\u63d2\u5165\u7ed3\u70b9","text":"

    \u300cAVL \u6811\u300d\u7684\u7ed3\u70b9\u63d2\u5165\u64cd\u4f5c\u4e0e\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u4e3b\u4f53\u7c7b\u4f3c\u3002\u4e0d\u540c\u7684\u662f\uff0c\u5728\u63d2\u5165\u7ed3\u70b9\u540e\uff0c\u4ece\u8be5\u7ed3\u70b9\u5230\u6839\u7ed3\u70b9\u7684\u8def\u5f84\u4e0a\u4f1a\u51fa\u73b0\u4e00\u7cfb\u5217\u300c\u5931\u8861\u7ed3\u70b9\u300d\u3002\u6240\u4ee5\uff0c\u6211\u4eec\u9700\u8981\u4ece\u8be5\u7ed3\u70b9\u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5730\u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u6240\u6709\u5931\u8861\u7ed3\u70b9\u6062\u590d\u5e73\u8861\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode insert(int val) {\nroot = insertHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode insertHelper(TreeNode node, int val) {\nif (node == null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val)\nnode.left = insertHelper(node.left, val);\nelse if (val > node.val)\nnode.right = insertHelper(node.right, val);\nelse\nreturn node;     // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.cpp
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode* insert(int val) {\nroot = insertHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode* insertHelper(TreeNode* node, int val) {\nif (node == nullptr) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node->val)\nnode->left = insertHelper(node->left, val);\nelse if (val > node->val)\nnode->right = insertHelper(node->right, val);\nelse\nreturn node;     // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.py
    def insert(self, val) -> TreeNode:\n\"\"\" \u63d2\u5165\u7ed3\u70b9 \"\"\"\nself.__root = self.__insert_helper(self.__root, val)\nreturn self.__root\ndef __insert_helper(self, node: Optional[TreeNode], val: int) -> TreeNode:\n\"\"\" \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09\"\"\"\nif node is None:\nreturn TreeNode(val)\n# 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9\nif val < node.val:\nnode.left = self.__insert_helper(node.left, val)\nelif val > node.val:\nnode.right = self.__insert_helper(node.right, val)\nelse:\n# \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\n# 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nreturn self.__rotate(node)\n
    avl_tree.go
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunc (t *aVLTree) insert(val int) *TreeNode {\nt.root = t.insertHelper(t.root, val)\nreturn t.root\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc (t *aVLTree) insertHelper(node *TreeNode, val int) *TreeNode {\nif node == nil {\nreturn NewTreeNode(val)\n}\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif val < node.Val {\nnode.Left = t.insertHelper(node.Left, val)\n} else if val > node.Val {\nnode.Right = t.insertHelper(node.Right, val)\n} else {\n// \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n}\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = t.rotate(node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n
    avl_tree.js
    /* \u63d2\u5165\u7ed3\u70b9 */\ninsert(val) {\nthis.root = this.#insertHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\n#insertHelper(node, val) {\nif (node === null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val) node.left = this.#insertHelper(node.left, val);\nelse if (val > node.val) node.right = this.#insertHelper(node.right, val);\nelse return node; // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nthis.#updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.#rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.ts
    /* \u63d2\u5165\u7ed3\u70b9 */\ninsert(val: number): TreeNode {\nthis.root = this.insertHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\ninsertHelper(node: TreeNode, val: number): TreeNode {\nif (node === null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val) {\nnode.left = this.insertHelper(node.left, val);\n} else if (val > node.val) {\nnode.right = this.insertHelper(node.right, val);\n} else {\nreturn node; // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\n}\nthis.updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{insert}\n[class]{aVLTree}-[func]{insertHelper}\n
    avl_tree.cs
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode? insert(int val)\n{\nroot = insertHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode? insertHelper(TreeNode? node, int val)\n{\nif (node == null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val)\nnode.left = insertHelper(node.left, val);\nelse if (val > node.val)\nnode.right = insertHelper(node.right, val);\nelse\nreturn node;     // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.swift
    /* \u63d2\u5165\u7ed3\u70b9 */\n@discardableResult\nfunc insert(val: Int) -> TreeNode? {\nroot = insertHelper(node: root, val: val)\nreturn root\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc insertHelper(node: TreeNode?, val: Int) -> TreeNode? {\nvar node = node\nif node == nil {\nreturn TreeNode(x: val)\n}\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif val < node!.val {\nnode?.left = insertHelper(node: node?.left, val: val)\n} else if val > node!.val {\nnode?.right = insertHelper(node: node?.right, val: val)\n} else {\nreturn node // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\n}\nupdateHeight(node: node) // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node: node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n
    avl_tree.zig
    // \u63d2\u5165\u7ed3\u70b9\nfn insert(self: *Self, val: T) !?*inc.TreeNode(T) {\nself.root = try self.insertHelper(self.root, val);\nreturn self.root;\n}\n// \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09\nfn insertHelper(self: *Self, node_: ?*inc.TreeNode(T), val: T) !?*inc.TreeNode(T) {\nvar node = node_;\nif (node == null) {\nvar tmp_node = try self.mem_allocator.create(inc.TreeNode(T));\ntmp_node.init(val);\nreturn tmp_node;\n}\n// 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9\nif (val < node.?.val) {\nnode.?.left = try self.insertHelper(node.?.left, val);\n} else if (val > node.?.val) {\nnode.?.right = try self.insertHelper(node.?.right, val);\n} else {\nreturn node;            // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\n}\nself.updateHeight(node);    // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n// 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nnode = self.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    "},{"location":"chapter_tree/avl_tree/#_5","title":"\u5220\u9664\u7ed3\u70b9","text":"

    \u300cAVL \u6811\u300d\u5220\u9664\u7ed3\u70b9\u64cd\u4f5c\u4e0e\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u5220\u9664\u7ed3\u70b9\u64cd\u4f5c\u603b\u4f53\u76f8\u540c\u3002\u7c7b\u4f3c\u5730\uff0c\u5728\u5220\u9664\u7ed3\u70b9\u540e\uff0c\u4e5f\u9700\u8981\u4ece\u5e95\u81f3\u9876\u5730\u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u6240\u6709\u5931\u8861\u7ed3\u70b9\u6062\u590d\u5e73\u8861\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode remove(int val) {\nroot = removeHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode removeHelper(TreeNode node, int val) {\nif (node == null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val)\nnode.left = removeHelper(node.left, val);\nelse if (val > node.val)\nnode.right = removeHelper(node.right, val);\nelse {\nif (node.left == null || node.right == null) {\nTreeNode child = node.left != null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == null)\nreturn null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse\nnode = child;\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nTreeNode temp = getInOrderNext(node.right);\nnode.right = removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode getInOrderNext(TreeNode node) {\nif (node == null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left != null) {\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.cpp
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode* remove(int val) {\nroot = removeHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode* removeHelper(TreeNode* node, int val) {\nif (node == nullptr) return nullptr;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node->val)\nnode->left = removeHelper(node->left, val);\nelse if (val > node->val)\nnode->right = removeHelper(node->right, val);\nelse {\nif (node->left == nullptr || node->right == nullptr) {\nTreeNode* child = node->left != nullptr ? node->left : node->right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == nullptr) {\ndelete node;\nreturn nullptr;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse {\ndelete node;\nnode = child;\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nTreeNode* temp = getInOrderNext(node->right);\nnode->right = removeHelper(node->right, temp->val);\nnode->val = temp->val;\n}\n}\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode* getInOrderNext(TreeNode* node) {\nif (node == nullptr) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node->left != nullptr) {\nnode = node->left;\n}\nreturn node;\n}\n
    avl_tree.py
    def remove(self, val: int) -> Optional[TreeNode]:\n\"\"\" \u5220\u9664\u7ed3\u70b9 \"\"\"\nself.__root = self.__remove_helper(self.__root, val)\nreturn self.__root \ndef __remove_helper(self, node: Optional[TreeNode], val: int) -> Optional[TreeNode]:\n\"\"\" \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 \"\"\"\nif node is None:\nreturn None\n# 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b\nif val < node.val:\nnode.left = self.__remove_helper(node.left, val)\nelif val > node.val:\nnode.right = self.__remove_helper(node.right, val)\nelse:\nif node.left is None or node.right is None:\nchild = node.left or node.right\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif child is None:\nreturn None\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse:\nnode = child\nelse:  # \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\ntemp = self.__get_inorder_next(node.right)\nnode.right = self.__remove_helper(node.right, temp.val)\nnode.val = temp.val\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\n# 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nreturn self.__rotate(node)\ndef __get_inorder_next(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 \"\"\"\nif node is None:\nreturn None\n# \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile node.left is not None:\nnode = node.left\nreturn node\n
    avl_tree.go
    /* \u5220\u9664\u7ed3\u70b9 */\nfunc (t *aVLTree) remove(val int) *TreeNode {\nroot := t.removeHelper(t.root, val)\nreturn root\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc (t *aVLTree) removeHelper(node *TreeNode, val int) *TreeNode {\nif node == nil {\nreturn nil\n}\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif val < node.Val {\nnode.Left = t.removeHelper(node.Left, val)\n} else if val > node.Val {\nnode.Right = t.removeHelper(node.Right, val)\n} else {\nif node.Left == nil || node.Right == nil {\nchild := node.Left\nif node.Right != nil {\nchild = node.Right\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif child == nil {\nreturn nil\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nnode = child\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\ntemp := t.getInOrderNext(node.Right)\nnode.Right = t.removeHelper(node.Right, temp.Val)\nnode.Val = temp.Val\n}\n}\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = t.rotate(node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc (t *aVLTree) getInOrderNext(node *TreeNode) *TreeNode {\nif node == nil {\nreturn node\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nfor node.Left != nil {\nnode = node.Left\n}\nreturn node\n}\n
    avl_tree.js
    /* \u5220\u9664\u7ed3\u70b9 */\nremove(val) {\nthis.root = this.#removeHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\n#removeHelper(node, val) {\nif (node === null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val) node.left = this.#removeHelper(node.left, val);\nelse if (val > node.val) node.right = this.#removeHelper(node.right, val);\nelse {\nif (node.left === null || node.right === null) {\nconst child = node.left !== null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child === null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse node = child;\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nconst temp = this.#getInOrderNext(node.right);\nnode.right = this.#removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nthis.#updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.#rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\n#getInOrderNext(node) {\nif (node === null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left !== null) {\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.ts
    /* \u5220\u9664\u7ed3\u70b9 */\nremove(val: number): TreeNode {\nthis.root = this.removeHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nremoveHelper(node: TreeNode, val: number): TreeNode {\nif (node === null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val) {\nnode.left = this.removeHelper(node.left, val);\n} else if (val > node.val) {\nnode.right = this.removeHelper(node.right, val);\n} else {\nif (node.left === null || node.right === null) {\nconst child = node.left !== null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child === null) {\nreturn null;\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nnode = child;\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nconst temp = this.getInOrderNext(node.right);\nnode.right = this.removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nthis.updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\ngetInOrderNext(node: TreeNode): TreeNode {\nif (node === null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left !== null) {\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{remove}\n[class]{aVLTree}-[func]{removeHelper}\n[class]{aVLTree}-[func]{getInOrderNext}\n
    avl_tree.cs
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode? remove(int val)\n{\nroot = removeHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode? removeHelper(TreeNode? node, int val)\n{\nif (node == null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val)\nnode.left = removeHelper(node.left, val);\nelse if (val > node.val)\nnode.right = removeHelper(node.right, val);\nelse\n{\nif (node.left == null || node.right == null)\n{\nTreeNode? child = node.left != null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == null)\nreturn null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse\nnode = child;\n}\nelse\n{\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nTreeNode? temp = getInOrderNext(node.right);\nnode.right = removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode? getInOrderNext(TreeNode? node)\n{\nif (node == null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left != null)\n{\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.swift
    /* \u5220\u9664\u7ed3\u70b9 */\n@discardableResult\nfunc remove(val: Int) -> TreeNode? {\nroot = removeHelper(node: root, val: val)\nreturn root\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc removeHelper(node: TreeNode?, val: Int) -> TreeNode? {\nvar node = node\nif node == nil {\nreturn nil\n}\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif val < node!.val {\nnode?.left = removeHelper(node: node?.left, val: val)\n} else if val > node!.val {\nnode?.right = removeHelper(node: node?.right, val: val)\n} else {\nif node?.left == nil || node?.right == nil {\nlet child = node?.left != nil ? node?.left : node?.right\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif child == nil {\nreturn nil\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse {\nnode = child\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nlet temp = getInOrderNext(node: node?.right)\nnode?.right = removeHelper(node: node?.right, val: temp!.val)\nnode?.val = temp!.val\n}\n}\nupdateHeight(node: node) // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node: node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc getInOrderNext(node: TreeNode?) -> TreeNode? {\nvar node = node\nif node == nil {\nreturn node\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile node?.left != nil {\nnode = node?.left\n}\nreturn node\n}\n
    avl_tree.zig
    // \u5220\u9664\u7ed3\u70b9\nfn remove(self: *Self, val: T) ?*inc.TreeNode(T) {\nself.root = self.removeHelper(self.root, val);\nreturn self.root;\n}\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09\nfn removeHelper(self: *Self, node_: ?*inc.TreeNode(T), val: T) ?*inc.TreeNode(T) {\nvar node = node_;\nif (node == null) return null;\n// 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b\nif (val < node.?.val) {\nnode.?.left = self.removeHelper(node.?.left, val);\n} else if (val > node.?.val) {\nnode.?.right = self.removeHelper(node.?.right, val);\n} else {\nif (node.?.left == null or node.?.right == null) {\nvar child = if (node.?.left != null) node.?.left else node.?.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == null) {\nreturn null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\n} else {\nnode = child;\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nvar temp = self.getInOrderNext(node.?.right);\nnode.?.right = self.removeHelper(node.?.right, temp.?.val);\nnode.?.val = temp.?.val;\n}\n}\nself.updateHeight(node);    // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n// 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nnode = self.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09\nfn getInOrderNext(self: *Self, node_: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\n_ = self;\nvar node = node_;\nif (node == null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.?.left != null) {\nnode = node.?.left;\n}\nreturn node;\n}\n
    "},{"location":"chapter_tree/avl_tree/#_6","title":"\u67e5\u627e\u7ed3\u70b9","text":"

    \u300cAVL \u6811\u300d\u7684\u7ed3\u70b9\u67e5\u627e\u64cd\u4f5c\u4e0e\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u4e00\u81f4\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_tree/avl_tree/#744-avl","title":"7.4.4. \u00a0 AVL \u6811\u5178\u578b\u5e94\u7528","text":"
    • \u7ec4\u7ec7\u5b58\u50a8\u5927\u578b\u6570\u636e\uff0c\u9002\u7528\u4e8e\u9ad8\u9891\u67e5\u627e\u3001\u4f4e\u9891\u589e\u5220\u573a\u666f\uff1b
    • \u7528\u4e8e\u5efa\u7acb\u6570\u636e\u5e93\u4e2d\u7684\u7d22\u5f15\u7cfb\u7edf\uff1b

    \u4e3a\u4ec0\u4e48\u7ea2\u9ed1\u6811\u6bd4 AVL \u6811\u66f4\u53d7\u6b22\u8fce\uff1f

    \u7ea2\u9ed1\u6811\u7684\u5e73\u8861\u6761\u4ef6\u76f8\u5bf9\u5bbd\u677e\uff0c\u56e0\u6b64\u5728\u7ea2\u9ed1\u6811\u4e2d\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u6240\u9700\u7684\u65cb\u8f6c\u64cd\u4f5c\u76f8\u5bf9\u66f4\u5c11\uff0c\u7ed3\u70b9\u589e\u5220\u64cd\u4f5c\u76f8\u6bd4 AVL \u6811\u7684\u6548\u7387\u66f4\u9ad8\u3002

    "},{"location":"chapter_tree/binary_search_tree/","title":"7.3. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811","text":"

    \u300c\u4e8c\u53c9\u641c\u7d22\u6811 Binary Search Tree\u300d\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\uff1a

    1. \u5bf9\u4e8e\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e2d\u6240\u6709\u7ed3\u70b9\u7684\u503c \\(<\\) \u6839\u7ed3\u70b9\u7684\u503c \\(<\\) \u53f3\u5b50\u6811\u4e2d\u6240\u6709\u7ed3\u70b9\u7684\u503c\uff1b
    2. \u4efb\u610f\u7ed3\u70b9\u7684\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u4e5f\u662f\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5373\u4e5f\u6ee1\u8db3\u6761\u4ef6 1. \uff1b

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811

    "},{"location":"chapter_tree/binary_search_tree/#731","title":"7.3.1. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u64cd\u4f5c","text":""},{"location":"chapter_tree/binary_search_tree/#_1","title":"\u67e5\u627e\u7ed3\u70b9","text":"

    \u7ed9\u5b9a\u76ee\u6807\u7ed3\u70b9\u503c num \uff0c\u53ef\u4ee5\u6839\u636e\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u6765\u67e5\u627e\u3002\u6211\u4eec\u58f0\u660e\u4e00\u4e2a\u7ed3\u70b9 cur \uff0c\u4ece\u4e8c\u53c9\u6811\u7684\u6839\u7ed3\u70b9 root \u51fa\u53d1\uff0c\u5faa\u73af\u6bd4\u8f83\u7ed3\u70b9\u503c cur.val \u548c num \u4e4b\u95f4\u7684\u5927\u5c0f\u5173\u7cfb

    • \u82e5 cur.val < num \uff0c\u8bf4\u660e\u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\uff0c\u56e0\u6b64\u6267\u884c cur = cur.right \uff1b
    • \u82e5 cur.val > num \uff0c\u8bf4\u660e\u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\uff0c\u56e0\u6b64\u6267\u884c cur = cur.left \uff1b
    • \u82e5 cur.val = num \uff0c\u8bf4\u660e\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\u5e76\u8fd4\u56de\u8be5\u7ed3\u70b9\u5373\u53ef\uff1b
    <1><2><3><4>

    \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u67e5\u627e\u64cd\u4f5c\u548c\u4e8c\u5206\u67e5\u627e\u7b97\u6cd5\u5982\u51fa\u4e00\u8f99\uff0c\u4e5f\u662f\u5728\u6bcf\u8f6e\u6392\u9664\u4e00\u534a\u60c5\u51b5\u3002\u5faa\u73af\u6b21\u6570\u6700\u591a\u4e3a\u4e8c\u53c9\u6811\u7684\u9ad8\u5ea6\uff0c\u5f53\u4e8c\u53c9\u6811\u5e73\u8861\u65f6\uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search_tree.java
    /* \u67e5\u627e\u7ed3\u70b9 */\nTreeNode search(int num) {\nTreeNode cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur.val > num) cur = cur.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.cpp
    /* \u67e5\u627e\u7ed3\u70b9 */\nTreeNode* search(int num) {\nTreeNode* cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != nullptr) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur->val < num) cur = cur->right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur->val > num) cur = cur->left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.py
    def search(self, num: int) -> Optional[TreeNode]:\n\"\"\" \u67e5\u627e\u7ed3\u70b9 \"\"\"\ncur: Optional[TreeNode] = self.__root\n# \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur is not None:\n# \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur.val < num:\ncur = cur.right\n# \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelif cur.val > num:\ncur = cur.left\n# \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse:\nbreak\nreturn cur\n
    binary_search_tree.go
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunc (bst *binarySearchTree) search(num int) *TreeNode {\nnode := bst.root\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nfor node != nil {\nif node.Val < num {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nnode = node.Right\n} else if node.Val > num {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nnode = node.Left\n} else {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nbreak\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn node\n}\n
    binary_search_tree.js
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunction search(num) {\nlet cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur.val > num) cur = cur.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.ts
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunction search(num: number): TreeNode | null {\nlet cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\nif (cur.val < num) {\ncur = cur.right; // \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\n} else if (cur.val > num) {\ncur = cur.left; // \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else {\nbreak; // \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.c
    [class]{binarySearchTree}-[func]{search}\n
    binary_search_tree.cs
    /* \u67e5\u627e\u7ed3\u70b9 */\nTreeNode? search(int num)\n{\nTreeNode? cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null)\n{\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur.val > num) cur = cur.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.swift
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunc search(num: Int) -> TreeNode? {\nvar cur = root\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur != nil {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur!.val < num {\ncur = cur?.right\n}\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if cur!.val > num {\ncur = cur?.left\n}\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse {\nbreak\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur\n}\n
    binary_search_tree.zig
    // \u67e5\u627e\u7ed3\u70b9\nfn search(self: *Self, num: T) ?*inc.TreeNode(T) {\nvar cur = self.root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.?.val < num) {\ncur = cur.?.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else if (cur.?.val > num) {\ncur = cur.?.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\n} else {\nbreak;\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    "},{"location":"chapter_tree/binary_search_tree/#_2","title":"\u63d2\u5165\u7ed3\u70b9","text":"

    \u7ed9\u5b9a\u4e00\u4e2a\u5f85\u63d2\u5165\u5143\u7d20 num \uff0c\u4e3a\u4e86\u4fdd\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u201c\u5de6\u5b50\u6811 < \u6839\u7ed3\u70b9 < \u53f3\u5b50\u6811\u201d\u7684\u6027\u8d28\uff0c\u63d2\u5165\u64cd\u4f5c\u5206\u4e3a\u4e24\u6b65\uff1a

    1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff1a\u4e0e\u67e5\u627e\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u6211\u4eec\u4ece\u6839\u7ed3\u70b9\u51fa\u53d1\uff0c\u6839\u636e\u5f53\u524d\u7ed3\u70b9\u503c\u548c num \u7684\u5927\u5c0f\u5173\u7cfb\u5faa\u73af\u5411\u4e0b\u641c\u7d22\uff0c\u76f4\u5230\u8d8a\u8fc7\u53f6\u7ed3\u70b9\uff08\u904d\u5386\u5230 \\(\\text{null}\\) \uff09\u65f6\u8df3\u51fa\u5faa\u73af\uff1b
    2. \u5728\u8be5\u4f4d\u7f6e\u63d2\u5165\u7ed3\u70b9\uff1a\u521d\u59cb\u5316\u7ed3\u70b9 num \uff0c\u5c06\u8be5\u7ed3\u70b9\u653e\u5230 \\(\\text{null}\\) \u7684\u4f4d\u7f6e \uff1b

    \u4e8c\u53c9\u641c\u7d22\u6811\u4e0d\u5141\u8bb8\u5b58\u5728\u91cd\u590d\u7ed3\u70b9\uff0c\u5426\u5219\u5c06\u4f1a\u8fdd\u80cc\u5176\u5b9a\u4e49\u3002\u56e0\u6b64\u82e5\u5f85\u63d2\u5165\u7ed3\u70b9\u5728\u6811\u4e2d\u5df2\u7ecf\u5b58\u5728\uff0c\u5219\u4e0d\u6267\u884c\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\u5373\u53ef\u3002

    Fig. \u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u63d2\u5165\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search_tree.java
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode insert(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.val == num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nTreeNode node = new TreeNode(num);\nif (pre.val < num) pre.right = node;\nelse pre.left = node;\nreturn node;\n}\n
    binary_search_tree.cpp
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode* insert(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == nullptr) return nullptr;\nTreeNode *cur = root, *pre = nullptr;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != nullptr) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur->val == num) return nullptr;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur->val < num) cur = cur->right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur->left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nTreeNode* node = new TreeNode(num);\nif (pre->val < num) pre->right = node;\nelse pre->left = node;\nreturn node;\n}\n
    binary_search_tree.py
    def insert(self, num: int) -> Optional[TreeNode]:\n\"\"\" \u63d2\u5165\u7ed3\u70b9 \"\"\"\n# \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif self.__root is None:\nreturn None\n# \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\ncur, pre = self.__root, None\nwhile cur is not None:\n# \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif cur.val == num:\nreturn None\npre = cur\n# \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur.val < num:\ncur = cur.right\n# \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse:\ncur = cur.left\n# \u63d2\u5165\u7ed3\u70b9 val\nnode = TreeNode(num)\nif pre.val < num:\npre.right = node\nelse:\npre.left = node\nreturn node\n
    binary_search_tree.go
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunc (bst *binarySearchTree) insert(num int) *TreeNode {\ncur := bst.root\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5f85\u63d2\u5165\u7ed3\u70b9\u4e4b\u524d\u7684\u7ed3\u70b9\u4f4d\u7f6e\nvar pre *TreeNode = nil\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nfor cur != nil {\nif cur.Val == num {\nreturn nil\n}\npre = cur\nif cur.Val < num {\ncur = cur.Right\n} else {\ncur = cur.Left\n}\n}\n// \u63d2\u5165\u7ed3\u70b9\nnode := NewTreeNode(num)\nif pre.Val < num {\npre.Right = node\n} else {\npre.Left = node\n}\nreturn cur\n}\n
    binary_search_tree.js
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunction insert(num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) return null;\nlet cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.val === num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nlet node = new TreeNode(num);\nif (pre.val < num) pre.right = node;\nelse pre.left = node;\nreturn node;\n}\n
    binary_search_tree.ts
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunction insert(num: number): TreeNode | null {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) {\nreturn null;\n}\nlet cur = root,\npre: TreeNode | null = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\nif (cur.val === num) {\nreturn null; // \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\n}\npre = cur;\nif (cur.val < num) {\ncur = cur.right as TreeNode; // \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\n} else {\ncur = cur.left as TreeNode; // \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n}\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nlet node = new TreeNode(num);\nif (pre!.val < num) {\npre!.right = node;\n} else {\npre!.left = node;\n}\nreturn node;\n}\n
    binary_search_tree.c
    [class]{binarySearchTree}-[func]{insert}\n
    binary_search_tree.cs
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode? insert(int num)\n{\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode? cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null)\n{\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.val == num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nTreeNode node = new TreeNode(num);\nif (pre != null)\n{\nif (pre.val < num) pre.right = node;\nelse pre.left = node;\n}\nreturn node;\n}\n
    binary_search_tree.swift
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunc insert(num: Int) -> TreeNode? {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif root == nil {\nreturn nil\n}\nvar cur = root\nvar pre: TreeNode?\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur != nil {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif cur!.val == num {\nreturn nil\n}\npre = cur\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur!.val < num {\ncur = cur?.right\n}\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse {\ncur = cur?.left\n}\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nlet node = TreeNode(x: num)\nif pre!.val < num {\npre?.right = node\n} else {\npre?.left = node\n}\nreturn node\n}\n
    binary_search_tree.zig
    // \u63d2\u5165\u7ed3\u70b9\nfn insert(self: *Self, num: T) !?*inc.TreeNode(T) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (self.root == null) return null;\nvar cur = self.root;\nvar pre: ?*inc.TreeNode(T) = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.?.val == num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.?.val < num) {\ncur = cur.?.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else {\ncur = cur.?.left;\n}\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nvar node = try self.mem_allocator.create(inc.TreeNode(T));\nnode.init(num);\nif (pre.?.val < num) {\npre.?.right = node;\n} else {\npre.?.left = node;\n}\nreturn node;\n}\n

    \u4e3a\u4e86\u63d2\u5165\u7ed3\u70b9\uff0c\u9700\u8981\u501f\u52a9 \u8f85\u52a9\u7ed3\u70b9 pre \u4fdd\u5b58\u4e0a\u4e00\u8f6e\u5faa\u73af\u7684\u7ed3\u70b9\uff0c\u8fd9\u6837\u5728\u904d\u5386\u5230 \\(\\text{null}\\) \u65f6\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u83b7\u53d6\u5230\u5176\u7236\u7ed3\u70b9\uff0c\u4ece\u800c\u5b8c\u6210\u7ed3\u70b9\u63d2\u5165\u64cd\u4f5c\u3002

    \u4e0e\u67e5\u627e\u7ed3\u70b9\u76f8\u540c\uff0c\u63d2\u5165\u7ed3\u70b9\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\u3002

    "},{"location":"chapter_tree/binary_search_tree/#_3","title":"\u5220\u9664\u7ed3\u70b9","text":"

    \u4e0e\u63d2\u5165\u7ed3\u70b9\u4e00\u6837\uff0c\u6211\u4eec\u9700\u8981\u5728\u5220\u9664\u64cd\u4f5c\u540e\u7ef4\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u201c\u5de6\u5b50\u6811 < \u6839\u7ed3\u70b9 < \u53f3\u5b50\u6811\u201d\u7684\u6027\u8d28\u3002\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u5728\u4e8c\u53c9\u6811\u4e2d\u6267\u884c\u67e5\u627e\u64cd\u4f5c\uff0c\u83b7\u53d6\u5f85\u5220\u9664\u7ed3\u70b9\u3002\u63a5\u4e0b\u6765\uff0c\u6839\u636e\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf\uff0c\u5220\u9664\u64cd\u4f5c\u9700\u8981\u5206\u4e3a\u4e09\u79cd\u60c5\u51b5\uff1a

    \u5f53\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf \\(= 0\\) \u65f6\uff0c\u8868\u660e\u5f85\u5220\u9664\u7ed3\u70b9\u662f\u53f6\u7ed3\u70b9\uff0c\u76f4\u63a5\u5220\u9664\u5373\u53ef\u3002

    Fig. \u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u5220\u9664\u7ed3\u70b9\uff08\u5ea6\u4e3a 0\uff09

    \u5f53\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf \\(= 1\\) \u65f6\uff0c\u5c06\u5f85\u5220\u9664\u7ed3\u70b9\u66ff\u6362\u4e3a\u5176\u5b50\u7ed3\u70b9\u5373\u53ef\u3002

    Fig. \u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u5220\u9664\u7ed3\u70b9\uff08\u5ea6\u4e3a 1\uff09

    \u5f53\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf \\(= 2\\) \u65f6\uff0c\u5220\u9664\u64cd\u4f5c\u5206\u4e3a\u4e09\u6b65\uff1a

    1. \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\u5728 \u4e2d\u5e8f\u904d\u5386\u5e8f\u5217 \u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff0c\u8bb0\u4e3a nex \uff1b
    2. \u5728\u6811\u4e2d\u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex \uff1b
    3. \u4f7f\u7528 nex \u66ff\u6362\u5f85\u5220\u9664\u7ed3\u70b9\uff1b
    <1><2><3><4>

    \u5220\u9664\u7ed3\u70b9\u64cd\u4f5c\u4e5f\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff0c\u5176\u4e2d\u67e5\u627e\u5f85\u5220\u9664\u7ed3\u70b9 \\(O(\\log n)\\) \uff0c\u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u540e\u7ee7\u7ed3\u70b9 \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search_tree.java
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode remove(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left == null || cur.right == null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nTreeNode child = cur.left != null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.left == cur) pre.left = child;\nelse pre.right = child;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nTreeNode nex = getInOrderNext(cur.right);\nint tmp = nex.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode getInOrderNext(TreeNode root) {\nif (root == null) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left != null) {\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.cpp
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode* remove(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == nullptr) return nullptr;\nTreeNode *cur = root, *pre = nullptr;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != nullptr) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur->val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur->val < num) cur = cur->right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur->left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == nullptr) return nullptr;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur->left == nullptr || cur->right == nullptr) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = nullptr / \u8be5\u5b50\u7ed3\u70b9\nTreeNode* child = cur->left != nullptr ? cur->left : cur->right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre->left == cur) pre->left = child;\nelse pre->right = child;\n// \u91ca\u653e\u5185\u5b58\ndelete cur;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nTreeNode* nex = getInOrderNext(cur->right);\nint tmp = nex->val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex->val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur->val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode* getInOrderNext(TreeNode* root) {\nif (root == nullptr) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root->left != nullptr) {\nroot = root->left;\n}\nreturn root;\n}\n
    binary_search_tree.py
    def remove(self, num: int) -> Optional[TreeNode]:\n\"\"\" \u5220\u9664\u7ed3\u70b9 \"\"\"\n# \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif self.__root is None:\nreturn None\n# \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\ncur, pre = self.__root, None\nwhile cur is not None:\n# \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif cur.val == num:\nbreak\npre = cur\nif cur.val < num:  # \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\ncur = cur.right\nelse:  # \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\ncur = cur.left\n# \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif cur is None:\nreturn None\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif cur.left is None or cur.right is None:\n# \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nchild = cur.left or cur.right\n# \u5220\u9664\u7ed3\u70b9 cur\nif pre.left == cur:\npre.left = child\nelse:\npre.right = child\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse:\n# \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nnex: TreeNode = self.get_inorder_next(cur.right)\ntmp: int = nex.val\n# \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nself.remove(nex.val)\n# \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp\nreturn cur\ndef get_inorder_next(self, root: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 \"\"\"\nif root is None:\nreturn root\n# \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile root.left is not None:\nroot = root.left\nreturn root\n
    binary_search_tree.go
    /* \u5220\u9664\u7ed3\u70b9 */\nfunc (bst *binarySearchTree) remove(num int) *TreeNode {\ncur := bst.root\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5f85\u5220\u9664\u7ed3\u70b9\u4e4b\u524d\u7684\u7ed3\u70b9\u4f4d\u7f6e\nvar pre *TreeNode = nil\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nfor cur != nil {\nif cur.Val == num {\nbreak\n}\npre = cur\nif cur.Val < num {\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728\u53f3\u5b50\u6811\u4e2d\ncur = cur.Right\n} else {\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728\u5de6\u5b50\u6811\u4e2d\ncur = cur.Left\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5b50\u7ed3\u70b9\u6570\u4e3a 0 \u6216 1\nif cur.Left == nil || cur.Right == nil {\nvar child *TreeNode = nil\n// \u53d6\u51fa\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\nif cur.Left != nil {\nchild = cur.Left\n} else {\nchild = cur.Right\n}\n// \u5c06\u5b50\u7ed3\u70b9\u66ff\u6362\u4e3a\u5f85\u5220\u9664\u7ed3\u70b9\nif pre.Left == cur {\npre.Left = child\n} else {\npre.Right = child\n}\n// \u5b50\u7ed3\u70b9\u6570\u4e3a 2\n} else {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u5f85\u5220\u9664\u7ed3\u70b9 cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nnext := bst.getInOrderNext(cur)\ntemp := next.Val\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 next\nbst.remove(next.Val)\n// \u5c06 next \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.Val = temp\n}\nreturn cur\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc (bst *binarySearchTree) getInOrderNext(node *TreeNode) *TreeNode {\nif node == nil {\nreturn node\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nfor node.Left != nil {\nnode = node.Left\n}\nreturn node\n}\n
    binary_search_tree.js
    /* \u5220\u9664\u7ed3\u70b9 */\nfunction remove(num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) return null;\nlet cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val === num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur === null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left === null || cur.right === null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nlet child = cur.left !== null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.left === cur) pre.left = child;\nelse pre.right = child;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nlet nex = getInOrderNext(cur.right);\nlet tmp = nex.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunction getInOrderNext(root) {\nif (root === null) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left !== null) {\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.ts
    /* \u5220\u9664\u7ed3\u70b9 */\nfunction remove(num: number): TreeNode | null {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) {\nreturn null;\n}\nlet cur = root,\npre: TreeNode | null = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val === num) {\nbreak;\n}\npre = cur;\nif (cur.val < num) {\ncur = cur.right as TreeNode; // \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\n} else {\ncur = cur.left as TreeNode; // \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur === null) {\nreturn null;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left === null || cur.right === null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nlet child = cur.left !== null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre!.left === cur) {\npre!.left = child;\n} else {\npre!.right = child;\n}\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nlet next = getInOrderNext(cur.right);\nlet tmp = next!.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(next!.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunction getInOrderNext(root: TreeNode | null): TreeNode | null {\nif (root === null) {\nreturn null;\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left !== null) {\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.c
    [class]{binarySearchTree}-[func]{remove}\n[class]{binarySearchTree}-[func]{getInOrderNext}\n
    binary_search_tree.cs
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode? remove(int num)\n{\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode? cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null)\n{\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == null || pre == null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left == null || cur.right == null)\n{\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nTreeNode? child = cur.left != null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.left == cur)\n{\npre.left = child;\n}\nelse\n{\npre.right = child;\n}\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse\n{\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nTreeNode? nex = getInOrderNext(cur.right);\nif (nex != null)\n{\nint tmp = nex.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode? getInOrderNext(TreeNode? root)\n{\nif (root == null) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left != null)\n{\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.swift
    /* \u5220\u9664\u7ed3\u70b9 */\n@discardableResult\nfunc remove(num: Int) -> TreeNode? {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif root == nil {\nreturn nil\n}\nvar cur = root\nvar pre: TreeNode?\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur != nil {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif cur!.val == num {\nbreak\n}\npre = cur\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur!.val < num {\ncur = cur?.right\n}\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse {\ncur = cur?.left\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif cur?.left == nil || cur?.right == nil {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nlet child = cur?.left != nil ? cur?.left : cur?.right\n// \u5220\u9664\u7ed3\u70b9 cur\nif pre?.left === cur {\npre?.left = child\n} else {\npre?.right = child\n}\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nlet nex = getInOrderNext(root: cur?.right)\nlet tmp = nex!.val\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(num: nex!.val)\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur?.val = tmp\n}\nreturn cur\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc getInOrderNext(root: TreeNode?) -> TreeNode? {\nvar root = root\nif root == nil {\nreturn root\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile root?.left != nil {\nroot = root?.left\n}\nreturn root\n}\n
    binary_search_tree.zig
    // \u5220\u9664\u7ed3\u70b9\nfn remove(self: *Self, num: T) ?*inc.TreeNode(T) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (self.root == null) return null;\nvar cur = self.root;\nvar pre: ?*inc.TreeNode(T) = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.?.val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.?.val < num) {\ncur = cur.?.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else {\ncur = cur.?.left;\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.?.left == null or cur.?.right == null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nvar child = if (cur.?.left != null) cur.?.left else cur.?.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.?.left == cur) {\npre.?.left = child;\n} else {\npre.?.right = child;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\n} else {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nvar nex = self.getInOrderNext(cur.?.right);\nvar tmp = nex.?.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\n_ = self.remove(nex.?.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.?.val = tmp;\n}\nreturn cur;\n}\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09\nfn getInOrderNext(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\n_ = self;\nvar node_tmp = node;\nif (node_tmp == null) return null;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node_tmp.?.left != null) {\nnode_tmp = node_tmp.?.left;\n}\nreturn node_tmp;\n}\n
    "},{"location":"chapter_tree/binary_search_tree/#_4","title":"\u6392\u5e8f","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u300c\u4e2d\u5e8f\u904d\u5386\u300d\u9075\u5faa\u201c\u5de6 \\(\\rightarrow\\) \u6839 \\(\\rightarrow\\) \u53f3\u201d\u7684\u904d\u5386\u4f18\u5148\u7ea7\uff0c\u800c\u4e8c\u53c9\u641c\u7d22\u6811\u9075\u5faa\u201c\u5de6\u5b50\u7ed3\u70b9 \\(<\\) \u6839\u7ed3\u70b9 \\(<\\) \u53f3\u5b50\u7ed3\u70b9\u201d\u7684\u5927\u5c0f\u5173\u7cfb\u3002\u56e0\u6b64\uff0c\u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u8fdb\u884c\u4e2d\u5e8f\u904d\u5386\u65f6\uff0c\u603b\u662f\u4f1a\u4f18\u5148\u904d\u5386\u4e0b\u4e00\u4e2a\u6700\u5c0f\u7ed3\u70b9\uff0c\u4ece\u800c\u5f97\u51fa\u4e00\u6761\u91cd\u8981\u6027\u8d28\uff1a\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u4e2d\u5e8f\u904d\u5386\u5e8f\u5217\u662f\u5347\u5e8f\u7684\u3002

    \u501f\u52a9\u4e2d\u5e8f\u904d\u5386\u5347\u5e8f\u7684\u6027\u8d28\uff0c\u6211\u4eec\u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u83b7\u53d6\u6709\u5e8f\u6570\u636e\u4ec5\u9700 \\(O(n)\\) \u65f6\u95f4\uff0c\u800c\u65e0\u9700\u989d\u5916\u6392\u5e8f\uff0c\u975e\u5e38\u9ad8\u6548\u3002

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u4e2d\u5e8f\u904d\u5386\u5e8f\u5217

    "},{"location":"chapter_tree/binary_search_tree/#732","title":"7.3.2. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6548\u7387","text":"

    \u5047\u8bbe\u7ed9\u5b9a \\(n\\) \u4e2a\u6570\u5b57\uff0c\u6700\u5e38\u7528\u7684\u5b58\u50a8\u65b9\u5f0f\u662f\u300c\u6570\u7ec4\u300d\uff0c\u90a3\u4e48\u5bf9\u4e8e\u8fd9\u4e32\u4e71\u5e8f\u7684\u6570\u5b57\uff0c\u5e38\u89c1\u64cd\u4f5c\u7684\u6548\u7387\u4e3a\uff1a

    • \u67e5\u627e\u5143\u7d20\uff1a\u7531\u4e8e\u6570\u7ec4\u662f\u65e0\u5e8f\u7684\uff0c\u56e0\u6b64\u9700\u8981\u904d\u5386\u6570\u7ec4\u6765\u786e\u5b9a\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u63d2\u5165\u5143\u7d20\uff1a\u53ea\u9700\u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u6570\u7ec4\u5c3e\u90e8\u5373\u53ef\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\uff1b
    • \u5220\u9664\u5143\u7d20\uff1a\u5148\u67e5\u627e\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff0c\u518d\u5728\u6570\u7ec4\u4e2d\u5220\u9664\u8be5\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u83b7\u53d6\u6700\u5c0f / \u6700\u5927\u5143\u7d20\uff1a\u9700\u8981\u904d\u5386\u6570\u7ec4\u6765\u786e\u5b9a\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b

    \u4e3a\u4e86\u5f97\u5230\u5148\u9a8c\u4fe1\u606f\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9884\u5148\u5c06\u6570\u7ec4\u5143\u7d20\u8fdb\u884c\u6392\u5e8f\uff0c\u5f97\u5230\u4e00\u4e2a\u300c\u6392\u5e8f\u6570\u7ec4\u300d\uff0c\u6b64\u65f6\u64cd\u4f5c\u6548\u7387\u4e3a\uff1a

    • \u67e5\u627e\u5143\u7d20\uff1a\u7531\u4e8e\u6570\u7ec4\u5df2\u6392\u5e8f\uff0c\u53ef\u4ee5\u4f7f\u7528\u4e8c\u5206\u67e5\u627e\uff0c\u5e73\u5747\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff1b
    • \u63d2\u5165\u5143\u7d20\uff1a\u5148\u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff0c\u518d\u63d2\u5165\u5230\u6307\u5b9a\u4f4d\u7f6e\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u5220\u9664\u5143\u7d20\uff1a\u5148\u67e5\u627e\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff0c\u518d\u5728\u6570\u7ec4\u4e2d\u5220\u9664\u8be5\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u83b7\u53d6\u6700\u5c0f / \u6700\u5927\u5143\u7d20\uff1a\u6570\u7ec4\u5934\u90e8\u548c\u5c3e\u90e8\u5143\u7d20\u5373\u662f\u6700\u5c0f\u548c\u6700\u5927\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\uff1b

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u65e0\u5e8f\u6570\u7ec4\u548c\u6709\u5e8f\u6570\u7ec4\u4e2d\u7684\u5404\u9879\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f\u201c\u504f\u79d1\u201d\u7684\uff0c\u5373\u6709\u7684\u5feb\u6709\u7684\u6162\uff1b\u800c\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u5404\u9879\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u662f\u5bf9\u6570\u9636\uff0c\u5728\u6570\u636e\u91cf \\(n\\) \u5f88\u5927\u65f6\u6709\u5de8\u5927\u4f18\u52bf\u3002

    \u65e0\u5e8f\u6570\u7ec4 \u6709\u5e8f\u6570\u7ec4 \u4e8c\u53c9\u641c\u7d22\u6811 \u67e5\u627e\u6307\u5b9a\u5143\u7d20 \\(O(n)\\) \\(O(\\log n)\\) \\(O(\\log n)\\) \u63d2\u5165\u5143\u7d20 \\(O(1)\\) \\(O(n)\\) \\(O(\\log n)\\) \u5220\u9664\u5143\u7d20 \\(O(n)\\) \\(O(n)\\) \\(O(\\log n)\\) \u83b7\u53d6\u6700\u5c0f / \u6700\u5927\u5143\u7d20 \\(O(n)\\) \\(O(1)\\) \\(O(\\log n)\\)"},{"location":"chapter_tree/binary_search_tree/#733","title":"7.3.3. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u9000\u5316","text":"

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u662f\u201c\u5de6\u53f3\u5e73\u8861\u201d\u7684\uff08\u8be6\u89c1\u300c\u5e73\u8861\u4e8c\u53c9\u6811\u300d\u7ae0\u8282\uff09\uff0c\u6b64\u65f6\u53ef\u4ee5\u5728 \\(\\log n\\) \u8f6e\u5faa\u73af\u5185\u67e5\u627e\u4efb\u610f\u7ed3\u70b9\u3002

    \u5982\u679c\u6211\u4eec\u52a8\u6001\u5730\u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u53ef\u80fd\u5bfc\u81f4\u4e8c\u53c9\u6811\u9000\u5316\u4e3a\u94fe\u8868\uff0c\u6b64\u65f6\u5404\u79cd\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u9000\u5316\u4e4b \\(O(n)\\) \u3002

    Note

    \u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u5982\u4f55\u4fdd\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u5e73\u8861\uff0c\u4e5f\u662f\u4e00\u4e2a\u9700\u8981\u91cd\u8981\u8003\u8651\u7684\u95ee\u9898\u3002

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u5e73\u8861\u4e0e\u9000\u5316

    "},{"location":"chapter_tree/binary_search_tree/#734","title":"7.3.4. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u5e38\u89c1\u5e94\u7528","text":"
    • \u7cfb\u7edf\u4e2d\u7684\u591a\u7ea7\u7d22\u5f15\uff0c\u9ad8\u6548\u67e5\u627e\u3001\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u3002
    • \u5404\u79cd\u641c\u7d22\u7b97\u6cd5\u7684\u5e95\u5c42\u6570\u636e\u7ed3\u6784\u3002
    • \u5b58\u50a8\u6570\u636e\u6d41\uff0c\u4fdd\u6301\u5176\u5df2\u6392\u5e8f\u3002
    "},{"location":"chapter_tree/binary_tree/","title":"7.1. \u00a0 \u4e8c\u53c9\u6811","text":"

    \u300c\u4e8c\u53c9\u6811 Binary Tree\u300d\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u4ee3\u8868\u7740\u7956\u5148\u4e0e\u540e\u4ee3\u4e4b\u95f4\u7684\u6d3e\u751f\u5173\u7cfb\uff0c\u4f53\u73b0\u7740\u201c\u4e00\u5206\u4e3a\u4e8c\u201d\u7684\u5206\u6cbb\u903b\u8f91\u3002\u7c7b\u4f3c\u4e8e\u94fe\u8868\uff0c\u4e8c\u53c9\u6811\u4e5f\u662f\u4ee5\u7ed3\u70b9\u4e3a\u5355\u4f4d\u5b58\u50a8\u7684\uff0c\u7ed3\u70b9\u5305\u542b\u300c\u503c\u300d\u548c\u4e24\u4e2a\u300c\u6307\u9488\u300d\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nint val;         // \u7ed3\u70b9\u503c\nTreeNode left;   // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode right;  // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode(int x) { val = x; }\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct TreeNode {\nint val;          // \u7ed3\u70b9\u503c\nTreeNode *left;   // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode *right;  // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode(int x) : val(x), left(nullptr), right(nullptr) {}\n};\n
    \"\"\" \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b \"\"\"\nclass TreeNode:\ndef __init__(self, val: int):\nself.val: int = val                   # \u7ed3\u70b9\u503c\nself.left: Optional[TreeNode] = None  # \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nself.right: Optional[TreeNode] = None # \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7ed3\u6784\u4f53 */\ntype TreeNode struct {\nVal   int\nLeft  *TreeNode\nRight *TreeNode\n}\n/* \u7ed3\u70b9\u521d\u59cb\u5316\u65b9\u6cd5 */\nfunc NewTreeNode(v int) *TreeNode {\nreturn &TreeNode{\nLeft:  nil,\nRight: nil,\nVal:   v,\n}\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nfunction TreeNode(val, left, right) {\nthis.val = (val === undefined ? 0 : val); // \u7ed3\u70b9\u503c\nthis.left = (left === undefined ? null : left); // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nthis.right = (right === undefined ? null : right); // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nval: number;\nleft: TreeNode | null;\nright: TreeNode | null;\nconstructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {\nthis.val = val === undefined ? 0 : val; // \u7ed3\u70b9\u503c\nthis.left = left === undefined ? null : left; // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nthis.right = right === undefined ? null : right; // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\n}\n}\n
    \n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nint val;          // \u7ed3\u70b9\u503c\nTreeNode? left;   // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode? right;  // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode(int x) { val = x; }\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar left: TreeNode? // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nvar right: TreeNode? // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\ninit(x: Int) {\nval = x\n}\n}\n
    \n

    \u7ed3\u70b9\u7684\u4e24\u4e2a\u6307\u9488\u5206\u522b\u6307\u5411\u300c\u5de6\u5b50\u7ed3\u70b9 Left Child Node\u300d\u548c\u300c\u53f3\u5b50\u7ed3\u70b9 Right Child Node\u300d\uff0c\u5e76\u4e14\u79f0\u8be5\u7ed3\u70b9\u4e3a\u4e24\u4e2a\u5b50\u7ed3\u70b9\u7684\u300c\u7236\u7ed3\u70b9 Parent Node\u300d\u3002\u7ed9\u5b9a\u4e8c\u53c9\u6811\u67d0\u7ed3\u70b9\uff0c\u5c06\u5de6\u5b50\u7ed3\u70b9\u4ee5\u4e0b\u7684\u6811\u79f0\u4e3a\u8be5\u7ed3\u70b9\u7684\u300c\u5de6\u5b50\u6811 Left Subtree\u300d\uff0c\u53f3\u5b50\u6811\u540c\u7406\u3002

    \u9664\u4e86\u53f6\u7ed3\u70b9\u5916\uff0c\u6bcf\u4e2a\u7ed3\u70b9\u90fd\u6709\u5b50\u7ed3\u70b9\u548c\u5b50\u6811\u3002\u4f8b\u5982\uff0c\u82e5\u5c06\u4e0b\u56fe\u7684\u300c\u7ed3\u70b9 2\u300d\u770b\u4f5c\u7236\u7ed3\u70b9\uff0c\u90a3\u4e48\u5176\u5de6\u5b50\u7ed3\u70b9\u548c\u53f3\u5b50\u7ed3\u70b9\u5206\u522b\u4e3a\u300c\u7ed3\u70b9 4\u300d\u548c\u300c\u7ed3\u70b9 5\u300d\uff0c\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u5206\u522b\u4e3a\u300c\u7ed3\u70b9 4 \u53ca\u5176\u4ee5\u4e0b\u7ed3\u70b9\u5f62\u6210\u7684\u6811\u300d\u548c\u300c\u7ed3\u70b9 5 \u53ca\u5176\u4ee5\u4e0b\u7ed3\u70b9\u5f62\u6210\u7684\u6811\u300d\u3002

    Fig. \u7236\u7ed3\u70b9\u3001\u5b50\u7ed3\u70b9\u3001\u5b50\u6811

    "},{"location":"chapter_tree/binary_tree/#711","title":"7.1.1. \u00a0 \u4e8c\u53c9\u6811\u5e38\u89c1\u672f\u8bed","text":"

    \u4e8c\u53c9\u6811\u7684\u672f\u8bed\u8f83\u591a\uff0c\u5efa\u8bae\u5c3d\u91cf\u7406\u89e3\u5e76\u8bb0\u4f4f\u3002\u540e\u7eed\u53ef\u80fd\u9057\u5fd8\uff0c\u53ef\u4ee5\u5728\u9700\u8981\u4f7f\u7528\u65f6\u56de\u6765\u67e5\u770b\u786e\u8ba4\u3002

    • \u300c\u6839\u7ed3\u70b9 Root Node\u300d\uff1a\u4e8c\u53c9\u6811\u6700\u9876\u5c42\u7684\u7ed3\u70b9\uff0c\u5176\u6ca1\u6709\u7236\u7ed3\u70b9\uff1b
    • \u300c\u53f6\u7ed3\u70b9 Leaf Node\u300d\uff1a\u6ca1\u6709\u5b50\u7ed3\u70b9\u7684\u7ed3\u70b9\uff0c\u5176\u4e24\u4e2a\u6307\u9488\u90fd\u6307\u5411 \\(\\text{null}\\) \uff1b
    • \u7ed3\u70b9\u6240\u5904\u300c\u5c42 Level\u300d\uff1a\u4ece\u9876\u81f3\u5e95\u4f9d\u6b21\u589e\u52a0\uff0c\u6839\u7ed3\u70b9\u6240\u5904\u5c42\u4e3a 1 \uff1b
    • \u7ed3\u70b9\u300c\u5ea6 Degree\u300d\uff1a\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf\u3002\u4e8c\u53c9\u6811\u4e2d\uff0c\u5ea6\u7684\u8303\u56f4\u662f 0, 1, 2 \uff1b
    • \u300c\u8fb9 Edge\u300d\uff1a\u8fde\u63a5\u4e24\u4e2a\u7ed3\u70b9\u7684\u8fb9\uff0c\u5373\u7ed3\u70b9\u6307\u9488\uff1b
    • \u4e8c\u53c9\u6811\u300c\u9ad8\u5ea6\u300d\uff1a\u4e8c\u53c9\u6811\u4e2d\u6839\u7ed3\u70b9\u5230\u6700\u8fdc\u53f6\u7ed3\u70b9\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\uff1b
    • \u7ed3\u70b9\u300c\u6df1\u5ea6 Depth\u300d \uff1a\u6839\u7ed3\u70b9\u5230\u8be5\u7ed3\u70b9\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\uff1b
    • \u7ed3\u70b9\u300c\u9ad8\u5ea6 Height\u300d\uff1a\u6700\u8fdc\u53f6\u7ed3\u70b9\u5230\u8be5\u7ed3\u70b9\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\uff1b

    Fig. \u4e8c\u53c9\u6811\u7684\u5e38\u7528\u672f\u8bed

    \u9ad8\u5ea6\u4e0e\u6df1\u5ea6\u7684\u5b9a\u4e49

    \u503c\u5f97\u6ce8\u610f\uff0c\u6211\u4eec\u901a\u5e38\u5c06\u300c\u9ad8\u5ea6\u300d\u548c\u300c\u6df1\u5ea6\u300d\u5b9a\u4e49\u4e3a\u201c\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\u201d\uff0c\u800c\u6709\u4e9b\u9898\u76ee\u6216\u6559\u6750\u4f1a\u5c06\u5176\u5b9a\u4e49\u4e3a\u201c\u8d70\u8fc7\u7ed3\u70b9\u7684\u6570\u91cf\u201d\uff0c\u6b64\u65f6\u9ad8\u5ea6\u6216\u6df1\u5ea6\u90fd\u9700\u8981 + 1 \u3002

    "},{"location":"chapter_tree/binary_tree/#712","title":"7.1.2. \u00a0 \u4e8c\u53c9\u6811\u57fa\u672c\u64cd\u4f5c","text":"

    \u521d\u59cb\u5316\u4e8c\u53c9\u6811\u3002\u4e0e\u94fe\u8868\u7c7b\u4f3c\uff0c\u5148\u521d\u59cb\u5316\u7ed3\u70b9\uff0c\u518d\u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree.java
    // \u521d\u59cb\u5316\u7ed3\u70b9\nTreeNode n1 = new TreeNode(1);\nTreeNode n2 = new TreeNode(2);\nTreeNode n3 = new TreeNode(3);\nTreeNode n4 = new TreeNode(4);\nTreeNode n5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.cpp
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nTreeNode* n1 = new TreeNode(1);\nTreeNode* n2 = new TreeNode(2);\nTreeNode* n3 = new TreeNode(3);\nTreeNode* n4 = new TreeNode(4);\nTreeNode* n5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1->left = n2;\nn1->right = n3;\nn2->left = n4;\nn2->right = n5;\n
    binary_tree.py
    \"\"\" \u521d\u59cb\u5316\u4e8c\u53c9\u6811 \"\"\"\n# \u521d\u59cb\u5316\u7ed3\u70b9\nn1 = TreeNode(val=1)\nn2 = TreeNode(val=2)\nn3 = TreeNode(val=3)\nn4 = TreeNode(val=4)\nn5 = TreeNode(val=5)\n# \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2\nn1.right = n3\nn2.left = n4\nn2.right = n5\n
    binary_tree.go
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nn1 := NewTreeNode(1)\nn2 := NewTreeNode(2)\nn3 := NewTreeNode(3)\nn4 := NewTreeNode(4)\nn5 := NewTreeNode(5)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.Left = n2\nn1.Right = n3\nn2.Left = n4\nn2.Right = n5\n
    binary_tree.js
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nlet n1 = new TreeNode(1),\nn2 = new TreeNode(2),\nn3 = new TreeNode(3),\nn4 = new TreeNode(4),\nn5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.ts
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nlet n1 = new TreeNode(1),\nn2 = new TreeNode(2),\nn3 = new TreeNode(3),\nn4 = new TreeNode(4),\nn5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.c
    \n
    binary_tree.cs
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nTreeNode n1 = new TreeNode(1);\nTreeNode n2 = new TreeNode(2);\nTreeNode n3 = new TreeNode(3);\nTreeNode n4 = new TreeNode(4);\nTreeNode n5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.swift
    // \u521d\u59cb\u5316\u7ed3\u70b9\nlet n1 = TreeNode(x: 1)\nlet n2 = TreeNode(x: 2)\nlet n3 = TreeNode(x: 3)\nlet n4 = TreeNode(x: 4)\nlet n5 = TreeNode(x: 5)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2\nn1.right = n3\nn2.left = n4\nn2.right = n5\n
    binary_tree.zig
    \n

    \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u3002\u4e0e\u94fe\u8868\u7c7b\u4f3c\uff0c\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u90fd\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539\u6307\u9488\u5b9e\u73b0\u3002

    Fig. \u5728\u4e8c\u53c9\u6811\u4e2d\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree.java
    TreeNode P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.cpp
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nTreeNode* P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1->left = P;\nP->left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1->left = n2;\n
    binary_tree.py
    \"\"\" \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 \"\"\"\np = TreeNode(0)\n# \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = p\np.left = n2\n# \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2\n
    binary_tree.go
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\np := NewTreeNode(0)\nn1.Left = p\np.Left = n2\n// \u5220\u9664\u7ed3\u70b9 P\nn1.Left = n2\n
    binary_tree.js
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nlet P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.ts
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nconst P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.c
    \n
    binary_tree.cs
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nTreeNode P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.swift
    let P = TreeNode(x: 0)\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P\nP.left = n2\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2\n
    binary_tree.zig
    \n

    Note

    \u63d2\u5165\u7ed3\u70b9\u4f1a\u6539\u53d8\u4e8c\u53c9\u6811\u7684\u539f\u6709\u903b\u8f91\u7ed3\u6784\uff0c\u5220\u9664\u7ed3\u70b9\u5f80\u5f80\u610f\u5473\u7740\u5220\u9664\u4e86\u8be5\u7ed3\u70b9\u7684\u6240\u6709\u5b50\u6811\u3002\u56e0\u6b64\uff0c\u4e8c\u53c9\u6811\u4e2d\u7684\u63d2\u5165\u4e0e\u5220\u9664\u4e00\u822c\u90fd\u662f\u7531\u4e00\u5957\u64cd\u4f5c\u914d\u5408\u5b8c\u6210\u7684\uff0c\u8fd9\u6837\u624d\u80fd\u5b9e\u73b0\u6709\u610f\u4e49\u7684\u64cd\u4f5c\u3002

    "},{"location":"chapter_tree/binary_tree/#713","title":"7.1.3. \u00a0 \u5e38\u89c1\u4e8c\u53c9\u6811\u7c7b\u578b","text":""},{"location":"chapter_tree/binary_tree/#_1","title":"\u5b8c\u7f8e\u4e8c\u53c9\u6811","text":"

    \u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811 Perfect Binary Tree\u300d\u7684\u6240\u6709\u5c42\u7684\u7ed3\u70b9\u90fd\u88ab\u5b8c\u5168\u586b\u6ee1\u3002\u5728\u5b8c\u7f8e\u4e8c\u53c9\u6811\u4e2d\uff0c\u6240\u6709\u7ed3\u70b9\u7684\u5ea6 = 2 \uff1b\u82e5\u6811\u9ad8\u5ea6 \\(= h\\) \uff0c\u5219\u7ed3\u70b9\u603b\u6570 \\(= 2^{h+1} - 1\\) \uff0c\u5448\u6807\u51c6\u7684\u6307\u6570\u7ea7\u5173\u7cfb\uff0c\u53cd\u6620\u7740\u81ea\u7136\u754c\u4e2d\u5e38\u89c1\u7684\u7ec6\u80de\u5206\u88c2\u3002

    Tip

    \u5728\u4e2d\u6587\u793e\u533a\u4e2d\uff0c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u5e38\u88ab\u79f0\u4e3a\u300c\u6ee1\u4e8c\u53c9\u6811\u300d\uff0c\u8bf7\u6ce8\u610f\u4e0e\u5b8c\u6ee1\u4e8c\u53c9\u6811\u533a\u5206\u3002

    Fig. \u5b8c\u7f8e\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#_2","title":"\u5b8c\u5168\u4e8c\u53c9\u6811","text":"

    \u300c\u5b8c\u5168\u4e8c\u53c9\u6811 Complete Binary Tree\u300d\u53ea\u6709\u6700\u5e95\u5c42\u7684\u7ed3\u70b9\u672a\u88ab\u586b\u6ee1\uff0c\u4e14\u6700\u5e95\u5c42\u7ed3\u70b9\u5c3d\u91cf\u9760\u5de6\u586b\u5145\u3002

    \u5b8c\u5168\u4e8c\u53c9\u6811\u975e\u5e38\u9002\u5408\u7528\u6570\u7ec4\u6765\u8868\u793a\u3002\u5982\u679c\u6309\u7167\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u7684\u987a\u5e8f\u6765\u5b58\u50a8\uff0c\u90a3\u4e48\u7a7a\u7ed3\u70b9 null \u4e00\u5b9a\u5168\u90e8\u51fa\u73b0\u5728\u5e8f\u5217\u7684\u5c3e\u90e8\uff0c\u56e0\u6b64\u6211\u4eec\u5c31\u53ef\u4ee5\u4e0d\u7528\u5b58\u50a8\u8fd9\u4e9b null \u4e86\u3002

    Fig. \u5b8c\u5168\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#_3","title":"\u5b8c\u6ee1\u4e8c\u53c9\u6811","text":"

    \u300c\u5b8c\u6ee1\u4e8c\u53c9\u6811 Full Binary Tree\u300d\u9664\u4e86\u53f6\u7ed3\u70b9\u4e4b\u5916\uff0c\u5176\u4f59\u6240\u6709\u7ed3\u70b9\u90fd\u6709\u4e24\u4e2a\u5b50\u7ed3\u70b9\u3002

    Fig. \u5b8c\u6ee1\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#_4","title":"\u5e73\u8861\u4e8c\u53c9\u6811","text":"

    \u300c\u5e73\u8861\u4e8c\u53c9\u6811 Balanced Binary Tree\u300d\u4e2d\u4efb\u610f\u7ed3\u70b9\u7684\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u7684\u9ad8\u5ea6\u4e4b\u5dee\u7684\u7edd\u5bf9\u503c \\(\\leq 1\\) \u3002

    Fig. \u5e73\u8861\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#714","title":"7.1.4. \u00a0 \u4e8c\u53c9\u6811\u7684\u9000\u5316","text":"

    \u5f53\u4e8c\u53c9\u6811\u7684\u6bcf\u5c42\u7684\u7ed3\u70b9\u90fd\u88ab\u586b\u6ee1\u65f6\uff0c\u8fbe\u5230\u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u300d\uff1b\u800c\u5f53\u6240\u6709\u7ed3\u70b9\u90fd\u504f\u5411\u4e00\u8fb9\u65f6\uff0c\u4e8c\u53c9\u6811\u9000\u5316\u4e3a\u300c\u94fe\u8868\u300d\u3002

    • \u5b8c\u7f8e\u4e8c\u53c9\u6811\u662f\u4e00\u4e2a\u4e8c\u53c9\u6811\u7684\u201c\u6700\u4f73\u72b6\u6001\u201d\uff0c\u53ef\u4ee5\u5b8c\u5168\u53d1\u6325\u51fa\u4e8c\u53c9\u6811\u201c\u5206\u6cbb\u201d\u7684\u4f18\u52bf\uff1b
    • \u94fe\u8868\u5219\u662f\u53e6\u4e00\u4e2a\u6781\u7aef\uff0c\u5404\u9879\u64cd\u4f5c\u90fd\u53d8\u4e3a\u7ebf\u6027\u64cd\u4f5c\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u9000\u5316\u81f3 \\(O(n)\\) \uff1b

    Fig. \u4e8c\u53c9\u6811\u7684\u6700\u4f73\u4e0e\u6700\u4e8c\u53c9\u6811\u7684\u6700\u4f73\u548c\u6700\u5dee\u7ed3\u6784\u5dee\u60c5\u51b5

    \u5982\u4e0b\u8868\u6240\u793a\uff0c\u5728\u6700\u4f73\u548c\u6700\u5dee\u7ed3\u6784\u4e0b\uff0c\u4e8c\u53c9\u6811\u7684\u53f6\u7ed3\u70b9\u6570\u91cf\u3001\u7ed3\u70b9\u603b\u6570\u3001\u9ad8\u5ea6\u7b49\u8fbe\u5230\u6781\u5927\u6216\u6781\u5c0f\u503c\u3002

    \u5b8c\u7f8e\u4e8c\u53c9\u6811 \u94fe\u8868 \u7b2c \\(i\\) \u5c42\u7684\u7ed3\u70b9\u6570\u91cf \\(2^{i-1}\\) \\(1\\) \u6811\u7684\u9ad8\u5ea6\u4e3a \\(h\\) \u65f6\u7684\u53f6\u7ed3\u70b9\u6570\u91cf \\(2^h\\) \\(1\\) \u6811\u7684\u9ad8\u5ea6\u4e3a \\(h\\) \u65f6\u7684\u7ed3\u70b9\u603b\u6570 \\(2^{h+1} - 1\\) \\(h + 1\\) \u6811\u7684\u7ed3\u70b9\u603b\u6570\u4e3a \\(n\\) \u65f6\u7684\u9ad8\u5ea6 \\(\\log_2 (n+1) - 1\\) \\(n - 1\\)"},{"location":"chapter_tree/binary_tree/#715","title":"7.1.5. \u00a0 \u4e8c\u53c9\u6811\u8868\u793a\u65b9\u5f0f *","text":"

    \u6211\u4eec\u4e00\u822c\u4f7f\u7528\u4e8c\u53c9\u6811\u7684\u300c\u94fe\u8868\u8868\u793a\u300d\uff0c\u5373\u5b58\u50a8\u5355\u4f4d\u4e3a\u7ed3\u70b9 TreeNode \uff0c\u7ed3\u70b9\u4e4b\u95f4\u901a\u8fc7\u6307\u9488\uff08\u5f15\u7528\uff09\u76f8\u8fde\u63a5\u3002\u672c\u6587\u524d\u8ff0\u793a\u4f8b\u4ee3\u7801\u5c55\u793a\u4e86\u4e8c\u53c9\u6811\u5728\u94fe\u8868\u8868\u793a\u4e0b\u7684\u5404\u9879\u57fa\u672c\u64cd\u4f5c\u3002

    \u90a3\u80fd\u5426\u53ef\u4ee5\u7528\u300c\u6570\u7ec4\u8868\u793a\u300d\u4e8c\u53c9\u6811\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\u3002\u5148\u6765\u5206\u6790\u4e00\u4e2a\u7b80\u5355\u6848\u4f8b\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u300d\uff0c\u5c06\u7ed3\u70b9\u6309\u7167\u5c42\u5e8f\u904d\u5386\u7684\u987a\u5e8f\u7f16\u53f7\uff08\u4ece 0 \u5f00\u59cb\uff09\uff0c\u90a3\u4e48\u53ef\u4ee5\u63a8\u5bfc\u5f97\u51fa\u7236\u7ed3\u70b9\u7d22\u5f15\u4e0e\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e4b\u95f4\u7684\u300c\u6620\u5c04\u516c\u5f0f\u300d\uff1a\u8bbe\u7ed3\u70b9\u7684\u7d22\u5f15\u4e3a \\(i\\) \uff0c\u5219\u8be5\u7ed3\u70b9\u7684\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 1\\) \u3001\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 2\\) \u3002

    \u672c\u8d28\u4e0a\uff0c\u6620\u5c04\u516c\u5f0f\u7684\u4f5c\u7528\u5c31\u662f\u94fe\u8868\u4e2d\u7684\u6307\u9488\u3002\u5bf9\u4e8e\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u4e2d\u7684\u4efb\u610f\u7ed3\u70b9\uff0c\u6211\u4eec\u90fd\u53ef\u4ee5\u4f7f\u7528\u6620\u5c04\u516c\u5f0f\u6765\u8bbf\u95ee\u5b50\u7ed3\u70b9\u3002\u56e0\u6b64\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\uff08\u5373\u6570\u7ec4\uff09\u6765\u8868\u793a\u5b8c\u7f8e\u4e8c\u53c9\u6811\u3002

    Fig. \u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a

    \u7136\u800c\uff0c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u53ea\u662f\u4e2a\u4f8b\uff0c\u4e8c\u53c9\u6811\u4e2d\u95f4\u5c42\u5f80\u5f80\u5b58\u5728\u8bb8\u591a\u7a7a\u7ed3\u70b9\uff08\u5373 null \uff09\uff0c\u800c\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u5e76\u4e0d\u5305\u542b\u8fd9\u4e9b\u7a7a\u7ed3\u70b9\uff0c\u5e76\u4e14\u6211\u4eec\u65e0\u6cd5\u5355\u51ed\u5e8f\u5217\u6765\u731c\u6d4b\u7a7a\u7ed3\u70b9\u7684\u6570\u91cf\u548c\u5206\u5e03\u4f4d\u7f6e\uff0c\u5373\u7406\u8bba\u4e0a\u5b58\u5728\u8bb8\u591a\u79cd\u4e8c\u53c9\u6811\u90fd\u7b26\u5408\u8be5\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u3002\u663e\u7136\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u4f7f\u7528\u6570\u7ec4\u6765\u5b58\u50a8\u4e8c\u53c9\u6811\u3002

    Fig. \u7ed9\u5b9a\u6570\u7ec4\u5bf9\u5e94\u591a\u79cd\u4e8c\u53c9\u6811\u53ef\u80fd\u6027

    \u4e3a\u4e86\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u8003\u8651\u6309\u7167\u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u5f62\u5f0f\u6765\u8868\u793a\u6240\u6709\u4e8c\u53c9\u6811\uff0c\u5373\u5728\u5e8f\u5217\u4e2d\u4f7f\u7528\u7279\u6b8a\u7b26\u53f7\u6765\u663e\u5f0f\u5730\u8868\u793a\u201c\u7a7a\u4f4d\u201d\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u8fd9\u6837\u5904\u7406\u540e\uff0c\u5e8f\u5217\uff08\u6570\u7ec4\uff09\u5c31\u53ef\u4ee5\u552f\u4e00\u8868\u793a\u4e8c\u53c9\u6811\u4e86\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4f7f\u7528 int \u7684\u5305\u88c5\u7c7b Integer \uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 null \u6765\u6807\u8bb0\u7a7a\u4f4d\nInteger[] tree = { 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 };\n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4e3a\u4e86\u7b26\u5408\u6570\u636e\u7c7b\u578b\u4e3a int \uff0c\u4f7f\u7528 int \u6700\u5927\u503c\u6807\u8bb0\u7a7a\u4f4d\n// \u8be5\u65b9\u6cd5\u7684\u4f7f\u7528\u524d\u63d0\u662f\u6ca1\u6709\u7ed3\u70b9\u7684\u503c = INT_MAX\nvector<int> tree = { 1, 2, 3, 4, INT_MAX, 6, 7, 8, 9, INT_MAX, INT_MAX, 12, INT_MAX, INT_MAX, 15 };\n
    \"\"\" \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a \"\"\"\n# \u76f4\u63a5\u4f7f\u7528 None \u6765\u8868\u793a\u7a7a\u4f4d\ntree = [1, 2, 3, 4, None, 6, 7, 8, 9, None, None, 12, None, None, 15]\n
    \n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u76f4\u63a5\u4f7f\u7528 null \u6765\u8868\u793a\u7a7a\u4f4d\nlet tree = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u76f4\u63a5\u4f7f\u7528 null \u6765\u8868\u793a\u7a7a\u4f4d\nlet tree: (number | null)[] = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
    \n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4f7f\u7528 int? \u53ef\u7a7a\u7c7b\u578b \uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 null \u6765\u6807\u8bb0\u7a7a\u4f4d\nint?[] tree = { 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 };\n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4f7f\u7528 Int? \u53ef\u7a7a\u7c7b\u578b \uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 nil \u6765\u6807\u8bb0\u7a7a\u4f4d\nlet tree: [Int?] = [1, 2, 3, 4, nil, 6, 7, 8, 9, nil, nil, 12, nil, nil, 15]\n
    \n

    Fig. \u4efb\u610f\u7c7b\u578b\u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a

    \u56de\u987e\u300c\u5b8c\u5168\u4e8c\u53c9\u6811\u300d\u7684\u5b9a\u4e49\uff0c\u5176\u53ea\u6709\u6700\u5e95\u5c42\u6709\u7a7a\u7ed3\u70b9\uff0c\u5e76\u4e14\u6700\u5e95\u5c42\u7684\u7ed3\u70b9\u5c3d\u91cf\u9760\u5de6\uff0c\u56e0\u800c\u6240\u6709\u7a7a\u7ed3\u70b9\u90fd\u4e00\u5b9a\u51fa\u73b0\u5728\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u7684\u672b\u5c3e\u3002\u56e0\u4e3a\u6211\u4eec\u5148\u9a8c\u5730\u786e\u5b9a\u4e86\u7a7a\u4f4d\u7684\u4f4d\u7f6e\uff0c\u6240\u4ee5\u5728\u4f7f\u7528\u6570\u7ec4\u8868\u793a\u5b8c\u5168\u4e8c\u53c9\u6811\u65f6\uff0c\u53ef\u4ee5\u7701\u7565\u5b58\u50a8\u201c\u7a7a\u4f4d\u201d\u3002\u56e0\u6b64\uff0c\u5b8c\u5168\u4e8c\u53c9\u6811\u975e\u5e38\u9002\u5408\u4f7f\u7528\u6570\u7ec4\u6765\u8868\u793a\u3002

    Fig. \u5b8c\u5168\u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a

    \u6570\u7ec4\u8868\u793a\u6709\u4e24\u4e2a\u4f18\u70b9\uff1a \u4e00\u662f\u4e0d\u9700\u8981\u5b58\u50a8\u6307\u9488\uff0c\u8282\u7701\u7a7a\u95f4\uff1b\u4e8c\u662f\u53ef\u4ee5\u968f\u673a\u8bbf\u95ee\u7ed3\u70b9\u3002\u7136\u800c\uff0c\u5f53\u4e8c\u53c9\u6811\u4e2d\u7684\u201c\u7a7a\u4f4d\u201d\u5f88\u591a\u65f6\uff0c\u6570\u7ec4\u4e2d\u53ea\u5305\u542b\u5f88\u5c11\u7ed3\u70b9\u7684\u6570\u636e\uff0c\u7a7a\u95f4\u5229\u7528\u7387\u5f88\u4f4e\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/","title":"7.2. \u00a0 \u4e8c\u53c9\u6811\u904d\u5386","text":"

    \u4ece\u7269\u7406\u7ed3\u6784\u89d2\u5ea6\u770b\uff0c\u6811\u662f\u4e00\u79cd\u57fa\u4e8e\u94fe\u8868\u7684\u6570\u636e\u7ed3\u6784\uff0c\u56e0\u6b64\u904d\u5386\u65b9\u5f0f\u4e5f\u662f\u901a\u8fc7\u6307\u9488\uff08\u5373\u5f15\u7528\uff09\u9010\u4e2a\u904d\u5386\u7ed3\u70b9\u3002\u540c\u65f6\uff0c\u6811\u8fd8\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u5bfc\u81f4\u904d\u5386\u6811\u6bd4\u904d\u5386\u94fe\u8868\u66f4\u52a0\u590d\u6742\uff0c\u9700\u8981\u4f7f\u7528\u641c\u7d22\u7b97\u6cd5\u6765\u5b9e\u73b0\u3002

    \u5e38\u89c1\u7684\u4e8c\u53c9\u6811\u904d\u5386\u65b9\u5f0f\u6709\u5c42\u5e8f\u904d\u5386\u3001\u524d\u5e8f\u904d\u5386\u3001\u4e2d\u5e8f\u904d\u5386\u3001\u540e\u5e8f\u904d\u5386\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/#721","title":"7.2.1. \u00a0 \u5c42\u5e8f\u904d\u5386","text":"

    \u300c\u5c42\u5e8f\u904d\u5386 Level-Order Traversal\u300d\u4ece\u9876\u81f3\u5e95\u3001\u4e00\u5c42\u4e00\u5c42\u5730\u904d\u5386\u4e8c\u53c9\u6811\uff0c\u5e76\u5728\u6bcf\u5c42\u4e2d\u6309\u7167\u4ece\u5de6\u5230\u53f3\u7684\u987a\u5e8f\u8bbf\u95ee\u7ed3\u70b9\u3002

    \u5c42\u5e8f\u904d\u5386\u672c\u8d28\u4e0a\u662f\u300c\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22 Breadth-First Traversal\u300d\uff0c\u5176\u4f53\u73b0\u7740\u4e00\u79cd\u201c\u4e00\u5708\u4e00\u5708\u5411\u5916\u201d\u7684\u5c42\u8fdb\u904d\u5386\u65b9\u5f0f\u3002

    Fig. \u4e8c\u53c9\u6811\u7684\u5c42\u5e8f\u904d\u5386

    "},{"location":"chapter_tree/binary_tree_traversal/#_1","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"

    \u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u4e00\u822c\u501f\u52a9\u300c\u961f\u5217\u300d\u6765\u5b9e\u73b0\u3002\u961f\u5217\u7684\u89c4\u5219\u662f\u201c\u5148\u8fdb\u5148\u51fa\u201d\uff0c\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u7684\u89c4\u5219\u662f \u201d\u4e00\u5c42\u5c42\u5e73\u63a8\u201c \uff0c\u4e24\u8005\u80cc\u540e\u7684\u601d\u60f3\u662f\u4e00\u81f4\u7684\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree_bfs.java
    /* \u5c42\u5e8f\u904d\u5386 */\nList<Integer> levelOrder(TreeNode root) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nQueue<TreeNode> queue = new LinkedList<>() {{ add(root); }};\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nList<Integer> list = new ArrayList<>();\nwhile (!queue.isEmpty()) {\nTreeNode node = queue.poll();  // \u961f\u5217\u51fa\u961f\nlist.add(node.val);            // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left != null)\nqueue.offer(node.left);    // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node.right != null)\nqueue.offer(node.right);   // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn list;\n}\n
    binary_tree_bfs.cpp
    /* \u5c42\u5e8f\u904d\u5386 */\nvector<int> levelOrder(TreeNode* root) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nqueue<TreeNode*> queue;\nqueue.push(root);\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nvector<int> vec;\nwhile (!queue.empty()) {\nTreeNode* node = queue.front();\nqueue.pop();                 // \u961f\u5217\u51fa\u961f\nvec.push_back(node->val);    // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node->left != nullptr)\nqueue.push(node->left);  // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node->right != nullptr)\nqueue.push(node->right); // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn vec;\n}\n
    binary_tree_bfs.py
    def level_order(root: Optional[TreeNode]) -> List[int]:\n\"\"\" \u5c42\u5e8f\u904d\u5386 \"\"\"\n# \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nqueue: Deque[TreeNode] = collections.deque()\nqueue.append(root)\n# \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nres: List[int] = []\nwhile queue:\nnode: TreeNode = queue.popleft() # \u961f\u5217\u51fa\u961f\nres.append(node.val)             # \u4fdd\u5b58\u7ed3\u70b9\u503c\nif node.left is not None:\nqueue.append(node.left)      # \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif node.right is not None:\nqueue.append(node.right)     # \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\nreturn res\n
    binary_tree_bfs.go
    /* \u5c42\u5e8f\u904d\u5386 */\nfunc levelOrder(root *TreeNode) []int {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nqueue := list.New()\nqueue.PushBack(root)\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5207\u7247\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nnums := make([]int, 0)\nfor queue.Len() > 0 {\n// poll\nnode := queue.Remove(queue.Front()).(*TreeNode)\n// \u4fdd\u5b58\u7ed3\u70b9\u503c\nnums = append(nums, node.Val)\nif node.Left != nil {\n// \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nqueue.PushBack(node.Left)\n}\nif node.Right != nil {\n// \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\nqueue.PushBack(node.Right)\n}\n}\nreturn nums\n}\n
    binary_tree_bfs.js
    /* \u5c42\u5e8f\u904d\u5386 */\nfunction levelOrder(root) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nconst queue = [root];\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nconst list = [];\nwhile (queue.length) {\nlet node = queue.shift();   // \u961f\u5217\u51fa\u961f\nlist.push(node.val);        // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left)\nqueue.push(node.left);  // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node.right)\nqueue.push(node.right); // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn list;\n}\n
    binary_tree_bfs.ts
    /* \u5c42\u5e8f\u904d\u5386 */\nfunction levelOrder(root: TreeNode | null): number[] {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nconst queue = [root];\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nconst list: number[] = [];\nwhile (queue.length) {\nlet node = queue.shift() as TreeNode; // \u961f\u5217\u51fa\u961f\nlist.push(node.val); // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left) {\nqueue.push(node.left); // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\n}\nif (node.right) {\nqueue.push(node.right); // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\n}\nreturn list;\n}\n
    binary_tree_bfs.c
    [class]{}-[func]{levelOrder}\n
    binary_tree_bfs.cs
    /* \u5c42\u5e8f\u904d\u5386 */\nList<int> levelOrder(TreeNode root)\n{\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nQueue<TreeNode> queue = new();\nqueue.Enqueue(root);\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nList<int> list = new();\nwhile (queue.Count != 0)\n{\nTreeNode node = queue.Dequeue(); // \u961f\u5217\u51fa\u961f\nlist.Add(node.val);              // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left != null)\nqueue.Enqueue(node.left);    // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node.right != null)\nqueue.Enqueue(node.right);   // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn list;\n}\n
    binary_tree_bfs.swift
    /* \u5c42\u5e8f\u904d\u5386 */\nfunc levelOrder(root: TreeNode) -> [Int] {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nvar queue: [TreeNode] = [root]\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nvar list: [Int] = []\nwhile !queue.isEmpty {\nlet node = queue.removeFirst() // \u961f\u5217\u51fa\u961f\nlist.append(node.val) // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif let left = node.left {\nqueue.append(left) // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\n}\nif let right = node.right {\nqueue.append(right) // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\n}\nreturn list\n}\n
    binary_tree_bfs.zig
    // \u5c42\u5e8f\u904d\u5386\nfn levelOrder(comptime T: type, mem_allocator: std.mem.Allocator, root: *inc.TreeNode(T)) !std.ArrayList(T) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nconst L = std.TailQueue(*inc.TreeNode(T));\nvar queue = L{};\nvar root_node = try mem_allocator.create(L.Node);\nroot_node.data = root;\nqueue.append(root_node); // \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nvar list = std.ArrayList(T).init(std.heap.page_allocator);\nwhile (queue.len > 0) {\nvar queue_node = queue.popFirst().?;    // \u961f\u5217\u51fa\u961f\nvar node = queue_node.data;\ntry list.append(node.val);              // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left != null) {\nvar tmp_node = try mem_allocator.create(L.Node);\ntmp_node.data = node.left.?;\nqueue.append(tmp_node);             // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\n}\nif (node.right != null) {\nvar tmp_node = try mem_allocator.create(L.Node);\ntmp_node.data = node.right.?;\nqueue.append(tmp_node);             // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}        }\nreturn list;\n}\n
    "},{"location":"chapter_tree/binary_tree_traversal/#_2","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u6240\u6709\u7ed3\u70b9\u88ab\u8bbf\u95ee\u4e00\u6b21\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff0c\u5176\u4e2d \\(n\\) \u4e3a\u7ed3\u70b9\u6570\u91cf\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a\u5f53\u4e3a\u6ee1\u4e8c\u53c9\u6811\u65f6\u8fbe\u5230\u6700\u5dee\u60c5\u51b5\uff0c\u904d\u5386\u5230\u6700\u5e95\u5c42\u524d\uff0c\u961f\u5217\u4e2d\u6700\u591a\u540c\u65f6\u5b58\u5728 \\(\\frac{n + 1}{2}\\) \u4e2a\u7ed3\u70b9\uff0c\u4f7f\u7528 \\(O(n)\\) \u7a7a\u95f4\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/#722","title":"7.2.2. \u00a0 \u524d\u5e8f\u3001\u4e2d\u5e8f\u3001\u540e\u5e8f\u904d\u5386","text":"

    \u76f8\u5bf9\u5730\uff0c\u524d\u3001\u4e2d\u3001\u540e\u5e8f\u904d\u5386\u7686\u5c5e\u4e8e\u300c\u6df1\u5ea6\u4f18\u5148\u904d\u5386 Depth-First Traversal\u300d\uff0c\u5176\u4f53\u73b0\u7740\u4e00\u79cd\u201c\u5148\u8d70\u5230\u5c3d\u5934\uff0c\u518d\u56de\u5934\u7ee7\u7eed\u201d\u7684\u56de\u6eaf\u904d\u5386\u65b9\u5f0f\u3002

    \u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5de6\u4fa7\u662f\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u7684\u7684\u793a\u610f\u56fe\uff0c\u53f3\u4e0a\u65b9\u662f\u5bf9\u5e94\u7684\u9012\u5f52\u5b9e\u73b0\u4ee3\u7801\u3002\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u5c31\u50cf\u662f\u7ed5\u7740\u6574\u4e2a\u4e8c\u53c9\u6811\u7684\u5916\u56f4\u201c\u8d70\u201d\u4e00\u5708\uff0c\u8d70\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5728\u6bcf\u4e2a\u7ed3\u70b9\u90fd\u4f1a\u9047\u5230\u4e09\u4e2a\u4f4d\u7f6e\uff0c\u5206\u522b\u5bf9\u5e94\u524d\u5e8f\u904d\u5386\u3001\u4e2d\u5e8f\u904d\u5386\u3001\u540e\u5e8f\u904d\u5386\u3002

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u524d\u3001\u4e2d\u3001\u540e\u5e8f\u904d\u5386

    \u4f4d\u7f6e \u542b\u4e49 \u6b64\u5904\u8bbf\u95ee\u7ed3\u70b9\u65f6\u5bf9\u5e94 \u6a59\u8272\u5706\u5708\u5904 \u521a\u8fdb\u5165\u6b64\u7ed3\u70b9\uff0c\u5373\u5c06\u8bbf\u95ee\u8be5\u7ed3\u70b9\u7684\u5de6\u5b50\u6811 \u524d\u5e8f\u904d\u5386 Pre-Order Traversal \u84dd\u8272\u5706\u5708\u5904 \u5df2\u8bbf\u95ee\u5b8c\u5de6\u5b50\u6811\uff0c\u5373\u5c06\u8bbf\u95ee\u53f3\u5b50\u6811 \u4e2d\u5e8f\u904d\u5386 In-Order Traversal \u7d2b\u8272\u5706\u5708\u5904 \u5df2\u8bbf\u95ee\u5b8c\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\uff0c\u5373\u5c06\u8fd4\u56de \u540e\u5e8f\u904d\u5386 Post-Order Traversal"},{"location":"chapter_tree/binary_tree_traversal/#_3","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree_dfs.java
    /* \u524d\u5e8f\u904d\u5386 */\nvoid preOrder(TreeNode root) {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.add(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nvoid inOrder(TreeNode root) {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.add(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nvoid postOrder(TreeNode root) {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.add(root.val);\n}\n
    binary_tree_dfs.cpp
    /* \u524d\u5e8f\u904d\u5386 */\nvoid preOrder(TreeNode* root) {\nif (root == nullptr) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nvec.push_back(root->val);\npreOrder(root->left);\npreOrder(root->right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nvoid inOrder(TreeNode* root) {\nif (root == nullptr) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root->left);\nvec.push_back(root->val);\ninOrder(root->right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nvoid postOrder(TreeNode* root) {\nif (root == nullptr) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root->left);\npostOrder(root->right);\nvec.push_back(root->val);\n}\n
    binary_tree_dfs.py
    def pre_order(root: Optional[TreeNode]) -> None:\n\"\"\" \u524d\u5e8f\u904d\u5386 \"\"\"\nif root is None:\nreturn\n# \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nres.append(root.val)\npre_order(root=root.left)\npre_order(root=root.right)\ndef in_order(root: Optional[TreeNode]) -> None:\n\"\"\" \u4e2d\u5e8f\u904d\u5386 \"\"\"\nif root is None:\nreturn\n# \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\nin_order(root=root.left)\nres.append(root.val)\nin_order(root=root.right)\ndef post_order(root: Optional[TreeNode]) -> None:\n\"\"\" \u540e\u5e8f\u904d\u5386 \"\"\"\nif root is None:\nreturn\n# \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npost_order(root=root.left)\npost_order(root=root.right)\nres.append(root.val)\n
    binary_tree_dfs.go
    /* \u524d\u5e8f\u904d\u5386 */\nfunc preOrder(node *TreeNode) {\nif node == nil {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nnums = append(nums, node.Val)\npreOrder(node.Left)\npreOrder(node.Right)\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunc inOrder(node *TreeNode) {\nif node == nil {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(node.Left)\nnums = append(nums, node.Val)\ninOrder(node.Right)\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunc postOrder(node *TreeNode) {\nif node == nil {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(node.Left)\npostOrder(node.Right)\nnums = append(nums, node.Val)\n}\n
    binary_tree_dfs.js
    /* \u524d\u5e8f\u904d\u5386 */\nfunction preOrder(root) {\nif (root === null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.push(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunction inOrder(root) {\nif (root === null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.push(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunction postOrder(root) {\nif (root === null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.push(root.val);\n}\n
    binary_tree_dfs.ts
    /* \u524d\u5e8f\u904d\u5386 */\nfunction preOrder(root: TreeNode | null): void {\nif (root === null) {\nreturn;\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.push(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunction inOrder(root: TreeNode | null): void {\nif (root === null) {\nreturn;\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.push(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunction postOrder(root: TreeNode | null): void {\nif (root === null) {\nreturn;\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.push(root.val);\n}\n
    binary_tree_dfs.c
    [class]{}-[func]{preOrder}\n[class]{}-[func]{inOrder}\n[class]{}-[func]{postOrder}\n
    binary_tree_dfs.cs
    /* \u524d\u5e8f\u904d\u5386 */\nvoid preOrder(TreeNode? root)\n{\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.Add(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nvoid inOrder(TreeNode? root)\n{\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.Add(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nvoid postOrder(TreeNode? root)\n{\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.Add(root.val);\n}\n
    binary_tree_dfs.swift
    /* \u524d\u5e8f\u904d\u5386 */\nfunc preOrder(root: TreeNode?) {\nguard let root = root else {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.append(root.val)\npreOrder(root: root.left)\npreOrder(root: root.right)\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunc inOrder(root: TreeNode?) {\nguard let root = root else {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root: root.left)\nlist.append(root.val)\ninOrder(root: root.right)\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunc postOrder(root: TreeNode?) {\nguard let root = root else {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root: root.left)\npostOrder(root: root.right)\nlist.append(root.val)\n}\n
    binary_tree_dfs.zig
    // \u524d\u5e8f\u904d\u5386\nfn preOrder(comptime T: type, root: ?*inc.TreeNode(T)) !void {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\ntry list.append(root.?.val);\ntry preOrder(T, root.?.left);\ntry preOrder(T, root.?.right);\n}\n// \u4e2d\u5e8f\u904d\u5386\nfn inOrder(comptime T: type, root: ?*inc.TreeNode(T)) !void {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ntry inOrder(T, root.?.left);\ntry list.append(root.?.val);\ntry inOrder(T, root.?.right);\n}\n// \u540e\u5e8f\u904d\u5386\nfn postOrder(comptime T: type, root: ?*inc.TreeNode(T)) !void {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\ntry postOrder(T, root.?.left);\ntry postOrder(T, root.?.right);\ntry list.append(root.?.val);\n}\n

    Note

    \u4f7f\u7528\u5faa\u73af\u4e00\u6837\u53ef\u4ee5\u5b9e\u73b0\u524d\u3001\u4e2d\u3001\u540e\u5e8f\u904d\u5386\uff0c\u4f46\u4ee3\u7801\u76f8\u5bf9\u7e41\u7410\uff0c\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u81ea\u884c\u5b9e\u73b0\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/#_4","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u6240\u6709\u7ed3\u70b9\u88ab\u8bbf\u95ee\u4e00\u6b21\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff0c\u5176\u4e2d \\(n\\) \u4e3a\u7ed3\u70b9\u6570\u91cf\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a\u5f53\u6811\u9000\u5316\u4e3a\u94fe\u8868\u65f6\u8fbe\u5230\u6700\u5dee\u60c5\u51b5\uff0c\u9012\u5f52\u6df1\u5ea6\u8fbe\u5230 \\(n\\) \uff0c\u7cfb\u7edf\u4f7f\u7528 \\(O(n)\\) \u6808\u5e27\u7a7a\u95f4\u3002

    "},{"location":"chapter_tree/summary/","title":"7.5. \u00a0 \u5c0f\u7ed3","text":""},{"location":"chapter_tree/summary/#_1","title":"\u4e8c\u53c9\u6811","text":"
    • \u4e8c\u53c9\u6811\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u4ee3\u8868\u7740\u201c\u4e00\u5206\u4e3a\u4e8c\u201d\u7684\u5206\u6cbb\u903b\u8f91\u3002\u4e8c\u53c9\u6811\u7684\u7ed3\u70b9\u5305\u542b\u300c\u503c\u300d\u548c\u4e24\u4e2a\u300c\u6307\u9488\u300d\uff0c\u5206\u522b\u6307\u5411\u5de6\u5b50\u7ed3\u70b9\u548c\u53f3\u5b50\u7ed3\u70b9\u3002
    • \u9009\u5b9a\u4e8c\u53c9\u6811\u4e2d\u67d0\u7ed3\u70b9\uff0c\u5c06\u5176\u5de6\uff08\u53f3\uff09\u5b50\u7ed3\u70b9\u4ee5\u4e0b\u5f62\u6210\u7684\u6811\u79f0\u4e3a\u5de6\uff08\u53f3\uff09\u5b50\u6811\u3002
    • \u4e8c\u53c9\u6811\u7684\u672f\u8bed\u8f83\u591a\uff0c\u5305\u62ec\u6839\u7ed3\u70b9\u3001\u53f6\u7ed3\u70b9\u3001\u5c42\u3001\u5ea6\u3001\u8fb9\u3001\u9ad8\u5ea6\u3001\u6df1\u5ea6\u7b49\u3002
    • \u4e8c\u53c9\u6811\u7684\u521d\u59cb\u5316\u3001\u7ed3\u70b9\u63d2\u5165\u3001\u7ed3\u70b9\u5220\u9664\u64cd\u4f5c\u4e0e\u94fe\u8868\u7684\u64cd\u4f5c\u65b9\u6cd5\u7c7b\u4f3c\u3002
    • \u5e38\u89c1\u7684\u4e8c\u53c9\u6811\u7c7b\u578b\u5305\u62ec\u5b8c\u7f8e\u4e8c\u53c9\u6811\u3001\u5b8c\u5168\u4e8c\u53c9\u6811\u3001\u5b8c\u6ee1\u4e8c\u53c9\u6811\u3001\u5e73\u8861\u4e8c\u53c9\u6811\u3002\u5b8c\u7f8e\u4e8c\u53c9\u6811\u662f\u7406\u60f3\u72b6\u6001\uff0c\u94fe\u8868\u5219\u662f\u9000\u5316\u540e\u7684\u6700\u5dee\u72b6\u6001\u3002
    • \u4e8c\u53c9\u6811\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u8868\u793a\uff0c\u5177\u4f53\u505a\u6cd5\u662f\u5c06\u7ed3\u70b9\u503c\u548c\u7a7a\u4f4d\u6309\u7167\u5c42\u5e8f\u904d\u5386\u7684\u987a\u5e8f\u6392\u5217\uff0c\u5e76\u57fa\u4e8e\u7236\u7ed3\u70b9\u548c\u5b50\u7ed3\u70b9\u4e4b\u95f4\u7684\u7d22\u5f15\u6620\u5c04\u516c\u5f0f\u5b9e\u73b0\u6307\u9488\u3002
    "},{"location":"chapter_tree/summary/#_2","title":"\u4e8c\u53c9\u6811\u904d\u5386","text":"
    • \u4e8c\u53c9\u6811\u5c42\u5e8f\u904d\u5386\u662f\u4e00\u79cd\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22\uff0c\u4f53\u73b0\u7740\u201c\u4e00\u5708\u4e00\u5708\u5411\u5916\u201d\u7684\u5c42\u8fdb\u5f0f\u904d\u5386\u65b9\u5f0f\uff0c\u901a\u5e38\u501f\u52a9\u961f\u5217\u6765\u5b9e\u73b0\u3002
    • \u524d\u5e8f\u3001\u4e2d\u5e8f\u3001\u540e\u5e8f\u904d\u5386\u662f\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\uff0c\u4f53\u73b0\u7740\u201c\u8d70\u5230\u5934\u3001\u518d\u56de\u5934\u7ee7\u7eed\u201d\u7684\u56de\u6eaf\u904d\u5386\u65b9\u5f0f\uff0c\u901a\u5e38\u4f7f\u7528\u9012\u5f52\u5b9e\u73b0\u3002
    "},{"location":"chapter_tree/summary/#_3","title":"\u4e8c\u53c9\u641c\u7d22\u6811","text":"
    • \u4e8c\u53c9\u641c\u7d22\u6811\u662f\u4e00\u79cd\u9ad8\u6548\u7684\u5143\u7d20\u67e5\u627e\u6570\u636e\u7ed3\u6784\uff0c\u67e5\u627e\u3001\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u4e3a \\(O(\\log n)\\) \u3002\u4e8c\u53c9\u641c\u7d22\u6811\u9000\u5316\u4e3a\u94fe\u8868\u540e\uff0c\u5404\u9879\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n)\\) \uff0c\u56e0\u6b64\u5982\u4f55\u907f\u514d\u9000\u5316\u662f\u975e\u5e38\u91cd\u8981\u7684\u8bfe\u9898\u3002
    • AVL \u6811\u53c8\u79f0\u5e73\u8861\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5176\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5728\u4e0d\u65ad\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u540e\uff0c\u4ecd\u7136\u53ef\u4ee5\u4fdd\u6301\u4e8c\u53c9\u6811\u7684\u5e73\u8861\uff08\u4e0d\u9000\u5316\uff09\u3002
    • AVL \u6811\u7684\u65cb\u8f6c\u64cd\u4f5c\u5206\u4e3a\u53f3\u65cb\u3001\u5de6\u65cb\u3001\u5148\u53f3\u65cb\u540e\u5de6\u65cb\u3001\u5148\u5de6\u65cb\u540e\u53f3\u65cb\u3002\u5728\u63d2\u5165\u6216\u5220\u9664\u7ed3\u70b9\u540e\uff0cAVL \u6811\u4f1a\u4ece\u5e95\u81f3\u9876\u5730\u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u6811\u6062\u590d\u5e73\u8861\u3002
    "}]} \ No newline at end of file +{"config":{"lang":["ja"],"separator":"[\\s\\-\uff0c\u3002]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"Home","text":"

    \u300a Hello \u7b97\u6cd5 \u300b

    \u52a8\u753b\u56fe\u89e3\u3001\u80fd\u8fd0\u884c\u3001\u53ef\u63d0\u95ee\u7684\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5feb\u901f\u5165\u95e8\u6559\u7a0b

    @Krahets

    \u63a8\u8350\u8bed

    Quote

    \u201c\u4e00\u672c\u901a\u4fd7\u6613\u61c2\u7684\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5165\u95e8\u4e66\uff0c\u5f15\u5bfc\u8bfb\u8005\u624b\u8111\u5e76\u7528\u5730\u5b66\u4e60\uff0c\u5f3a\u70c8\u63a8\u8350\u7b97\u6cd5\u521d\u5b66\u8005\u9605\u8bfb\u3002\u201d

    \u2014\u2014 \u9093\u4fca\u8f89\uff0c\u6e05\u534e\u5927\u5b66\u8ba1\u7b97\u673a\u7cfb\u6559\u6388

    Quote

    \u201c\u5982\u679c\u6211\u5f53\u5e74\u5b66\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u65f6\u5019\u6709\u300aHello \u7b97\u6cd5\u300b\uff0c\u5b66\u8d77\u6765\u5e94\u8be5\u4f1a\u7b80\u5355 10 \u500d\uff01\u201d

    \u2014\u2014 \u674e\u6c90\uff0c\u4e9a\u9a6c\u900a\u8d44\u6df1\u9996\u5e2d\u79d1\u5b66\u5bb6

    \u300c\u5168\u4e66\u52a8\u753b\u56fe\u89e3\u300d

    \u5185\u5bb9\u6e05\u6670\u6613\u61c2\u3001\u5b66\u4e60\u66f2\u7ebf\u5e73\u6ed1\u7535\u8111\u3001\u5e73\u677f\u3001\u624b\u673a\u5168\u7ec8\u7aef\u9605\u8bfb

    \"A picture is worth a thousand words.\"

    \u201c\u4e00\u56fe\u80dc\u5343\u8a00\u201d

    \u300c\u4ee3\u7801\u4e00\u952e\u8fd0\u884c\u300d

    \u63d0\u4f9b\u5404\u4e2a\u7b97\u6cd5\u4e0e\u6570\u636e\u7ed3\u6784\u7684\u7b80\u6d01\u5b9e\u73b0\u4e0e\u6d4b\u8bd5\u6837\u4f8b\uff0c\u7686\u53ef\u76f4\u63a5\u8fd0\u884c\u652f\u6301 Java, C++, Python, Go, JS, TS, C#, Swift, Zig \u7b49\u8bed\u8a00

    \"Talk is cheap. Show me the code.\"

    \u201c\u5c11\u5439\u725b\uff0c\u770b\u4ee3\u7801\u201d

    \u300c\u53ef\u8ba8\u8bba\u4e0e\u63d0\u95ee\u300d

    \u9f13\u52b1\u5c0f\u4f19\u4f34\u4eec\u4e92\u5e2e\u4e92\u52a9\u3001\u5171\u540c\u6210\u957f\u63d0\u95ee\u4e0e\u8bc4\u8bba\u4e00\u822c\u80fd\u5728\u4e24\u65e5\u5185\u5f97\u5230\u56de\u590d

    \u201c\u8ffd\u98ce\u8d76\u6708\u83ab\u505c\u7559\uff0c\u5e73\u829c\u5c3d\u5904\u662f\u6625\u5c71\u201d

    \u4e00\u8d77\u52a0\u6cb9\uff01

    \u5e8f

    \u4e24\u5e74\u524d\uff0c\u6211\u5728\u529b\u6263\u4e0a\u5206\u4eab\u4e86\u300a\u5251\u6307 Offer\u300b\u7cfb\u5217\u9898\u89e3\uff0c\u53d7\u5230\u4e86\u5f88\u591a\u5c0f\u4f19\u4f34\u7684\u559c\u7231\u4e0e\u652f\u6301\u3002\u5728\u6b64\u671f\u95f4\uff0c\u6211\u4e5f\u56de\u590d\u4e86\u8bb8\u591a\u8bfb\u8005\u7684\u8bc4\u8bba\u95ee\u9898\uff0c\u9047\u5230\u6700\u591a\u7684\u95ee\u9898\u662f\u201c\u5982\u4f55\u5165\u95e8\u5b66\u4e60\u7b97\u6cd5\u201d\u3002\u6211\u6e10\u6e10\u4e5f\u5bf9\u8fd9\u4e2a\u95ee\u9898\u597d\u5947\u4e86\u8d77\u6765\u3002

    \u4e24\u773c\u4e00\u62b9\u9ed1\u5730\u5237\u9898\u5e94\u8be5\u662f\u6700\u53d7\u6b22\u8fce\u7684\u65b9\u5f0f\uff0c\u7b80\u5355\u7c97\u66b4\u4e14\u6709\u6548\u3002\u7136\u800c\uff0c\u5237\u9898\u5c31\u5982\u540c\u73a9\u201c\u626b\u96f7\u201d\u6e38\u620f\uff0c\u81ea\u5b66\u80fd\u529b\u5f3a\u7684\u540c\u5b66\u80fd\u591f\u987a\u5229\u5730\u5c06\u5730\u96f7\u9010\u4e2a\u6392\u6389\uff0c\u800c\u57fa\u7840\u4e0d\u8db3\u7684\u540c\u5b66\u5f88\u53ef\u80fd\u88ab\u70b8\u7684\u6ee1\u5934\u662f\u5305\uff0c\u5e76\u5728\u53d7\u632b\u4e2d\u6b65\u6b65\u9000\u7f29\u3002\u901a\u8bfb\u6559\u6750\u4e66\u7c4d\u4e5f\u662f\u5e38\u7528\u65b9\u6cd5\uff0c\u4f46\u5bf9\u4e8e\u9762\u5411\u6c42\u804c\u7684\u540c\u5b66\u6765\u8bf4\uff0c\u6bd5\u4e1a\u5b63\u3001\u6295\u9012\u7b80\u5386\u3001\u5e94\u4ed8\u7b14\u9762\u8bd5\u5df2\u7ecf\u5360\u7528\u5927\u90e8\u5206\u7cbe\u529b\uff0c\u539a\u91cd\u7684\u4e66\u672c\u4e5f\u56e0\u6b64\u6210\u4e3a\u5de8\u5927\u7684\u6311\u6218\u3002

    \u5982\u679c\u4f60\u4e5f\u6709\u4e0a\u8ff0\u70e6\u607c\uff0c\u90a3\u4e48\u5f88\u5e78\u8fd0\u8fd9\u672c\u4e66\u627e\u5230\u4e86\u4f60\u3002\u672c\u4e66\u662f\u6211\u5bf9\u4e8e\u8be5\u95ee\u9898\u7ed9\u51fa\u7684\u7b54\u6848\uff0c\u867d\u7136\u4e0d\u4e00\u5b9a\u6b63\u786e\uff0c\u4f46\u81f3\u5c11\u4ee3\u8868\u4e00\u6b21\u79ef\u6781\u7684\u5c1d\u8bd5\u3002\u8fd9\u672c\u4e66\u867d\u7136\u4e0d\u8db3\u4ee5\u8ba9\u4f60\u76f4\u63a5\u62ff\u5230 Offer \uff0c\u4f46\u4f1a\u5f15\u5bfc\u4f60\u63a2\u7d22\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u201c\u77e5\u8bc6\u5730\u56fe\u201d\uff0c\u5e26\u4f60\u4e86\u89e3\u4e0d\u540c\u201c\u5730\u96f7\u201d\u7684\u5f62\u72b6\u5927\u5c0f\u548c\u5206\u5e03\u4f4d\u7f6e\uff0c\u8ba9\u4f60\u638c\u63e1\u5404\u79cd\u201c\u6392\u96f7\u65b9\u6cd5\u201d\u3002\u6709\u4e86\u8fd9\u4e9b\u672c\u9886\uff0c\u76f8\u4fe1\u4f60\u53ef\u4ee5\u66f4\u52a0\u5f97\u5fc3\u5e94\u624b\u5730\u5237\u9898\u4e0e\u9605\u8bfb\u6587\u732e\uff0c\u9010\u6b65\u642d\u5efa\u8d77\u5b8c\u6574\u7684\u77e5\u8bc6\u4f53\u7cfb\u3002

    \u4f5c\u8005\u7b80\u4ecb

    \u9773\u5b87\u680b (Krahets)\uff0c\u5927\u5382\u9ad8\u7ea7\u7b97\u6cd5\u5de5\u7a0b\u5e08\uff0c\u4e0a\u6d77\u4ea4\u901a\u5927\u5b66\u7855\u58eb\u3002\u529b\u6263\uff08LeetCode\uff09\u5168\u7f51\u9605\u8bfb\u91cf\u6700\u9ad8\u535a\u4e3b\uff0c\u5176 LeetBook\u300a\u56fe\u89e3\u7b97\u6cd5\u6570\u636e\u7ed3\u6784\u300b\u5df2\u88ab\u8ba2\u9605 22 \u4e07\u672c\u3002

    \u81f4\u8c22

    \u672c\u4e66\u5728\u5f00\u6e90\u793e\u533a\u7684\u7fa4\u7b56\u7fa4\u529b\u4e0b\u9010\u6b65\u6210\u957f\uff0c\u611f\u8c22\u6bcf\u4e00\u4f4d\u64b0\u7a3f\u4eba\uff0c\u662f\u4ed6\u4eec\u7684\u65e0\u79c1\u5949\u732e\u8ba9\u8fd9\u672c\u4e66\u53d8\u5f97\u66f4\u597d\uff0c\u4ed6\u4eec\u662f\uff08\u6309\u7167 GitHub \u81ea\u52a8\u751f\u6210\u7684\u987a\u5e8f\uff09\uff1a

    \u672c\u4e66\u7684\u4ee3\u7801\u5ba1\u9605\u5de5\u4f5c\u7531 justin\u2010tse, krahets, nuomi1, Reanon, sjinzh \u5b8c\u6210\uff0c\u611f\u8c22\u4ed6\u4eec\u7684\u8f9b\u52e4\u4ed8\u51fa\uff01

    justin-tseJS / TS krahetsJava / Python nuomi1Swift ReanonGo / C sjinzhRust / Zig"},{"location":"chapter_appendix/contribution/","title":"12.2. \u00a0 \u4e00\u8d77\u53c2\u4e0e\u521b\u4f5c","text":"

    \u5f00\u6e90\u7684\u9b45\u529b

    \u7eb8\u8d28\u4e66\u7c4d\u7684\u4e24\u6b21\u5370\u5237\u7684\u95f4\u9694\u65f6\u95f4\u5f80\u5f80\u9700\u8981\u6570\u5e74\uff0c\u5185\u5bb9\u66f4\u65b0\u975e\u5e38\u4e0d\u65b9\u4fbf\u3002\u4f46\u5728\u672c\u5f00\u6e90 HTML \u4e66\u4e2d\uff0c\u5185\u5bb9\u66f4\u8fed\u7684\u65f6\u95f4\u88ab\u7f29\u77ed\u81f3\u6570\u65e5\u751a\u81f3\u51e0\u4e2a\u5c0f\u65f6\u3002

    \u7531\u4e8e\u4f5c\u8005\u6c34\u5e73\u6709\u9650\uff0c\u4e66\u4e2d\u5185\u5bb9\u96be\u514d\u758f\u6f0f\u8c2c\u8bef\uff0c\u8bf7\u60a8\u8c05\u89e3\u3002\u5982\u679c\u53d1\u73b0\u7b14\u8bef\u3001\u65e0\u6548\u94fe\u63a5\u3001\u5185\u5bb9\u7f3a\u5931\u3001\u6587\u5b57\u6b67\u4e49\u3001\u89e3\u91ca\u4e0d\u6e05\u6670\u3001\u884c\u6587\u7ed3\u6784\u4e0d\u5408\u7406\u7b49\u95ee\u9898\uff0c\u8bf7\u60a8\u5e2e\u5fd9\u4fee\u6b63\uff0c\u4ee5\u5e2e\u52a9\u5176\u4ed6\u8bfb\u8005\u83b7\u53d6\u66f4\u4f18\u8d28\u7684\u5b66\u4e60\u5185\u5bb9\u3002\u6240\u6709\u64b0\u7a3f\u4eba\u5c06\u88ab\u5c55\u793a\u5728\u4ed3\u5e93\u4e0e\u7f51\u7ad9\u4e3b\u9875\uff0c\u4ee5\u611f\u8c22\u4ed6\u4eec\u5bf9\u5f00\u6e90\u793e\u533a\u7684\u65e0\u79c1\u5949\u732e\uff01

    "},{"location":"chapter_appendix/contribution/#1221","title":"12.2.1. \u00a0 \u5185\u5bb9\u5fae\u8c03","text":"

    \u6bcf\u4e2a\u9875\u9762\u7684\u53f3\u4e0a\u89d2\u90fd\u6709\u4e00\u4e2a\u300c\u7f16\u8f91\u300d\u56fe\u6807\uff0c\u4f60\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u4fee\u6539\u6587\u5b57\u6216\u4ee3\u7801\uff1a

    1. \u70b9\u51fb\u7f16\u8f91\u6309\u94ae\uff0c\u5982\u679c\u9047\u5230\u63d0\u793a\u201c\u9700\u8981 Fork \u6b64\u4ed3\u5e93\u201d\uff0c\u8bf7\u901a\u8fc7\uff1b
    2. \u4fee\u6539 Markdown \u6e90\u6587\u4ef6\u5185\u5bb9\uff0c\u5e76\u68c0\u67e5\u5185\u5bb9\u6b63\u786e\u6027\uff0c\u5c3d\u91cf\u4fdd\u6301\u6392\u7248\u683c\u5f0f\u7edf\u4e00\uff1b
    3. \u5728\u9875\u9762\u5e95\u90e8\u586b\u5199\u66f4\u6539\u8bf4\u660e\uff0c\u7136\u540e\u5355\u51fb\u201cPropose file change\u201d\u6309\u94ae\uff1b\u9875\u9762\u8df3\u8f6c\u540e\uff0c\u70b9\u51fb\u201cCreate pull request\u201d\u6309\u94ae\u53d1\u8d77\u62c9\u53d6\u8bf7\u6c42\u5373\u53ef\u3002

    Fig. \u9875\u9762\u7f16\u8f91\u6309\u952e

    \u56fe\u7247\u65e0\u6cd5\u76f4\u63a5\u4fee\u6539\uff0c\u9700\u8981\u901a\u8fc7\u65b0\u5efa Issue \u6216\u8bc4\u8bba\u7559\u8a00\u6765\u63cf\u8ff0\u56fe\u7247\u95ee\u9898\uff0c\u6211\u4f1a\u7b2c\u4e00\u65f6\u95f4\u91cd\u65b0\u753b\u56fe\u5e76\u66ff\u6362\u56fe\u7247\u3002

    "},{"location":"chapter_appendix/contribution/#1222","title":"12.2.2. \u00a0 \u5185\u5bb9\u521b\u4f5c","text":"

    \u5982\u679c\u60a8\u60f3\u8981\u53c2\u4e0e\u672c\u5f00\u6e90\u9879\u76ee\uff0c\u5305\u62ec\u7ffb\u8bd1\u4ee3\u7801\u81f3\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u3001\u62d3\u5c55\u6587\u7ae0\u5185\u5bb9\u7b49\uff0c\u90a3\u4e48\u9700\u8981\u5b9e\u65bd Pull Request \u5de5\u4f5c\u6d41\u7a0b\uff1a

    1. \u767b\u5f55 GitHub \uff0c\u5e76 Fork \u672c\u4ed3\u5e93 \u81f3\u4e2a\u4eba\u8d26\u53f7\uff1b
    2. \u8fdb\u5165 Fork \u4ed3\u5e93\u7f51\u9875\uff0c\u4f7f\u7528 git clone \u514b\u9686\u8be5\u4ed3\u5e93\u81f3\u672c\u5730\uff1b
    3. \u5728\u672c\u5730\u8fdb\u884c\u5185\u5bb9\u521b\u4f5c\uff0c\u5e76\u901a\u8fc7\u8fd0\u884c\u6d4b\u8bd5\u6765\u9a8c\u8bc1\u4ee3\u7801\u6b63\u786e\u6027\uff1b
    4. \u5c06\u672c\u5730\u66f4\u6539 Commit \uff0c\u5e76 Push \u81f3\u8fdc\u7a0b\u4ed3\u5e93\uff1b
    5. \u5237\u65b0\u4ed3\u5e93\u7f51\u9875\uff0c\u70b9\u51fb\u201cCreate pull request\u201d\u6309\u94ae\u53d1\u8d77\u62c9\u53d6\u8bf7\u6c42\u5373\u53ef\uff1b
    "},{"location":"chapter_appendix/contribution/#1223-docker","title":"12.2.3. \u00a0 Docker \u90e8\u7f72","text":"

    \u4f60\u53ef\u4ee5\u4f7f\u7528 Docker \u6765\u90e8\u7f72\u672c\u9879\u76ee\u3002\u7a0d\u7b49\u7247\u523b\uff0c\u5373\u53ef\u4f7f\u7528\u6d4f\u89c8\u5668\u6253\u5f00 http://localhost:8000 \u8bbf\u95ee\u672c\u9879\u76ee\u3002

    git clone https://github.com/krahets/hello-algo.git\ncd hello-algo\ndocker-compose up -d\n

    \u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5373\u53ef\u5220\u9664\u90e8\u7f72\u3002

    docker-compose down\n
    "},{"location":"chapter_appendix/installation/","title":"12.1. \u00a0 \u7f16\u7a0b\u73af\u5883\u5b89\u88c5","text":""},{"location":"chapter_appendix/installation/#1211-vscode","title":"12.1.1. \u00a0 \u5b89\u88c5 VSCode","text":"

    \u672c\u4e66\u63a8\u8350\u4f7f\u7528\u5f00\u6e90\u8f7b\u91cf\u7684 VSCode \u4f5c\u4e3a\u672c\u5730 IDE \uff0c\u4e0b\u8f7d\u5e76\u5b89\u88c5 VSCode \u3002

    "},{"location":"chapter_appendix/installation/#1212-java","title":"12.1.2. \u00a0 Java \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 OpenJDK\uff08\u7248\u672c\u9700\u6ee1\u8db3 > JDK 9\uff09\u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 java \uff0c\u5b89\u88c5 Java Extension Pack \u3002
    "},{"location":"chapter_appendix/installation/#1213-cc","title":"12.1.3. \u00a0 C/C++ \u73af\u5883","text":"
    1. Windows \u7cfb\u7edf\u9700\u8981\u5b89\u88c5 MinGW\uff08\u914d\u7f6e\u6559\u7a0b\uff09\uff0cMacOS \u81ea\u5e26 Clang \u65e0\u9700\u5b89\u88c5\u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 c++ \uff0c\u5b89\u88c5 C/C++ Extension Pack \u3002
    "},{"location":"chapter_appendix/installation/#1214-python","title":"12.1.4. \u00a0 Python \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 Miniconda3 \u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 python \uff0c\u5b89\u88c5 Python Extension Pack \u3002
    "},{"location":"chapter_appendix/installation/#1215-go","title":"12.1.5. \u00a0 Go \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 go \u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 go \uff0c\u5b89\u88c5 Go \u3002
    3. \u5feb\u6377\u952e Ctrl + Shift + P \u547c\u51fa\u547d\u4ee4\u680f\uff0c\u8f93\u5165 go \uff0c\u9009\u62e9 Go: Install/Update Tools \uff0c\u5168\u90e8\u52fe\u9009\u5e76\u5b89\u88c5\u5373\u53ef\u3002
    "},{"location":"chapter_appendix/installation/#1216-javascript","title":"12.1.6. \u00a0 JavaScript \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 node.js \u3002
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 javascript \uff0c\u5b89\u88c5 JavaScript (ES6) code snippets \u3002
    "},{"location":"chapter_appendix/installation/#1217-c","title":"12.1.7. \u00a0 C# \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 .Net 6.0 \uff1b
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 c# \uff0c\u5b89\u88c5 c# \u3002
    "},{"location":"chapter_appendix/installation/#1218-swift","title":"12.1.8. \u00a0 Swift \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 Swift\uff1b
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 swift\uff0c\u5b89\u88c5 Swift for Visual Studio Code\u3002
    "},{"location":"chapter_appendix/installation/#1219-rust","title":"12.1.9. \u00a0 Rust \u73af\u5883","text":"
    1. \u4e0b\u8f7d\u5e76\u5b89\u88c5 Rust\uff1b
    2. \u5728 VSCode \u7684\u63d2\u4ef6\u5e02\u573a\u4e2d\u641c\u7d22 rust\uff0c\u5b89\u88c5 rust-analyzer\u3002
    "},{"location":"chapter_array_and_linkedlist/array/","title":"4.1. \u00a0 \u6570\u7ec4","text":"

    \u300c\u6570\u7ec4 Array\u300d\u662f\u4e00\u79cd\u5c06 \u76f8\u540c\u7c7b\u578b\u5143\u7d20 \u5b58\u50a8\u5728 \u8fde\u7eed\u5185\u5b58\u7a7a\u95f4 \u7684\u6570\u636e\u7ed3\u6784\uff0c\u5c06\u5143\u7d20\u5728\u6570\u7ec4\u4e2d\u7684\u4f4d\u7f6e\u79f0\u4e3a\u5143\u7d20\u7684\u300c\u7d22\u5f15 Index\u300d\u3002

    Fig. \u6570\u7ec4\u5b9a\u4e49\u4e0e\u5b58\u50a8\u65b9\u5f0f

    Note

    \u89c2\u5bdf\u4e0a\u56fe\uff0c\u6211\u4eec\u53d1\u73b0 \u6570\u7ec4\u9996\u5143\u7d20\u7684\u7d22\u5f15\u4e3a \\(0\\) \u3002\u4f60\u53ef\u80fd\u4f1a\u60f3\uff0c\u8fd9\u5e76\u4e0d\u7b26\u5408\u65e5\u5e38\u4e60\u60ef\uff0c\u9996\u4e2a\u5143\u7d20\u7684\u7d22\u5f15\u4e3a\u4ec0\u4e48\u4e0d\u662f \\(1\\) \u5462\uff0c\u8fd9\u4e0d\u662f\u66f4\u52a0\u81ea\u7136\u5417\uff1f\u6211\u8ba4\u540c\u4f60\u7684\u60f3\u6cd5\uff0c\u4f46\u8bf7\u5148\u8bb0\u4f4f\u8fd9\u4e2a\u8bbe\u5b9a\uff0c\u540e\u9762\u8bb2\u5185\u5b58\u5730\u5740\u8ba1\u7b97\u65f6\uff0c\u6211\u4f1a\u5c1d\u8bd5\u89e3\u7b54\u8fd9\u4e2a\u95ee\u9898\u3002

    \u6570\u7ec4\u521d\u59cb\u5316\u3002\u4e00\u822c\u4f1a\u7528\u5230\u65e0\u521d\u59cb\u503c\u3001\u7ed9\u5b9a\u521d\u59cb\u503c\u4e24\u79cd\u5199\u6cd5\uff0c\u53ef\u6839\u636e\u9700\u6c42\u9009\u53d6\u3002\u5728\u4e0d\u7ed9\u5b9a\u521d\u59cb\u503c\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u6240\u6709\u5143\u7d20\u4f1a\u88ab\u521d\u59cb\u5316\u4e3a\u9ed8\u8ba4\u503c \\(0\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nint[] arr = new int[5]; // { 0, 0, 0, 0, 0 }\nint[] nums = { 1, 3, 2, 5, 4 };\n
    array.cpp
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\n// \u5b58\u50a8\u5728\u6808\u4e0a\nint arr[5];\nint nums[5] { 1, 3, 2, 5, 4 };\n// \u5b58\u50a8\u5728\u5806\u4e0a\nint* arr1 = new int[5];\nint* nums1 = new int[5] { 1, 3, 2, 5, 4 };\n
    array.py
    \"\"\" \u521d\u59cb\u5316\u6570\u7ec4 \"\"\"\narr: List[int] = [0] * 5  # [ 0, 0, 0, 0, 0 ]\nnums: List[int] = [1, 3, 2, 5, 4]  \n
    array.go
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nvar arr [5]int\n// \u5728 Go \u4e2d\uff0c\u6307\u5b9a\u957f\u5ea6\u65f6\uff08[5]int\uff09\u4e3a\u6570\u7ec4\uff0c\u4e0d\u6307\u5b9a\u957f\u5ea6\u65f6\uff08[]int\uff09\u4e3a\u5207\u7247\n// \u7531\u4e8e Go \u7684\u6570\u7ec4\u88ab\u8bbe\u8ba1\u4e3a\u5728\u7f16\u8bd1\u671f\u786e\u5b9a\u957f\u5ea6\uff0c\u56e0\u6b64\u53ea\u80fd\u4f7f\u7528\u5e38\u91cf\u6765\u6307\u5b9a\u957f\u5ea6\n// \u4e3a\u4e86\u65b9\u4fbf\u5b9e\u73b0\u6269\u5bb9 extend() \u65b9\u6cd5\uff0c\u4ee5\u4e0b\u5c06\u5207\u7247\uff08Slice\uff09\u770b\u4f5c\u6570\u7ec4\uff08Array\uff09\nnums := []int{1, 3, 2, 5, 4}\n
    array.js
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nvar arr = new Array(5).fill(0);\nvar nums = [1, 3, 2, 5, 4];\n
    array.ts
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nlet arr: number[] = new Array(5).fill(0);\nlet nums: number[] = [1, 3, 2, 5, 4];\n
    array.c
    int arr[5] = { 0 }; // { 0, 0, 0, 0, 0 }\nint nums[5] = { 1, 3, 2, 5, 4 };\n
    array.cs
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nint[] arr = new int[5]; // { 0, 0, 0, 0, 0 }\nint[] nums = { 1, 3, 2, 5, 4 };\n
    array.swift
    /* \u521d\u59cb\u5316\u6570\u7ec4 */\nlet arr = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]\nlet nums = [1, 3, 2, 5, 4]\n
    array.zig
    // \u521d\u59cb\u5316\u6570\u7ec4\nvar arr = [_]i32{0} ** 5; // { 0, 0, 0, 0, 0 }\nvar nums = [_]i32{ 1, 3, 2, 5, 4 };\n
    "},{"location":"chapter_array_and_linkedlist/array/#411","title":"4.1.1. \u00a0 \u6570\u7ec4\u4f18\u70b9","text":"

    \u5728\u6570\u7ec4\u4e2d\u8bbf\u95ee\u5143\u7d20\u975e\u5e38\u9ad8\u6548\u3002\u8fd9\u662f\u56e0\u4e3a\u5728\u6570\u7ec4\u4e2d\uff0c\u8ba1\u7b97\u5143\u7d20\u7684\u5185\u5b58\u5730\u5740\u975e\u5e38\u5bb9\u6613\u3002\u7ed9\u5b9a\u6570\u7ec4\u9996\u4e2a\u5143\u7d20\u7684\u5730\u5740\u3001\u548c\u4e00\u4e2a\u5143\u7d20\u7684\u7d22\u5f15\uff0c\u5229\u7528\u4ee5\u4e0b\u516c\u5f0f\u53ef\u4ee5\u76f4\u63a5\u8ba1\u7b97\u5f97\u5230\u8be5\u5143\u7d20\u7684\u5185\u5b58\u5730\u5740\uff0c\u4ece\u800c\u76f4\u63a5\u8bbf\u95ee\u6b64\u5143\u7d20\u3002

    Fig. \u6570\u7ec4\u5143\u7d20\u7684\u5185\u5b58\u5730\u5740\u8ba1\u7b97

    # \u5143\u7d20\u5185\u5b58\u5730\u5740 = \u6570\u7ec4\u5185\u5b58\u5730\u5740 + \u5143\u7d20\u957f\u5ea6 * \u5143\u7d20\u7d22\u5f15\nelementAddr = firtstElementAddr + elementLength * elementIndex\n

    \u4e3a\u4ec0\u4e48\u6570\u7ec4\u5143\u7d20\u7d22\u5f15\u4ece 0 \u5f00\u59cb\u7f16\u53f7\uff1f \u6839\u636e\u5730\u5740\u8ba1\u7b97\u516c\u5f0f\uff0c\u7d22\u5f15\u672c\u8d28\u4e0a\u8868\u793a\u7684\u662f\u5185\u5b58\u5730\u5740\u504f\u79fb\u91cf\uff0c\u9996\u4e2a\u5143\u7d20\u7684\u5730\u5740\u504f\u79fb\u91cf\u662f \\(0\\) \uff0c\u90a3\u4e48\u7d22\u5f15\u662f \\(0\\) \u4e5f\u5c31\u5f88\u81ea\u7136\u4e86\u3002

    \u8bbf\u95ee\u5143\u7d20\u7684\u9ad8\u6548\u6027\u5e26\u6765\u4e86\u8bb8\u591a\u4fbf\u5229\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u5185\u968f\u673a\u83b7\u53d6\u4e00\u4e2a\u6570\u7ec4\u4e2d\u7684\u5143\u7d20\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nint randomAccess(int[] nums) {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nint randomIndex = ThreadLocalRandom.current().\nnextInt(0, nums.length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nint randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    array.cpp
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nint randomAccess(int* nums, int size) {\n// \u5728\u533a\u95f4 [0, size) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nint randomIndex = rand() % size;\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nint randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    array.py
    def random_access(nums: List[int]) -> int:\n\"\"\" \u968f\u673a\u8bbf\u95ee\u5143\u7d20 \"\"\"\n# \u5728\u533a\u95f4 [0, len(nums)-1] \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nrandom_index = random.randint(0, len(nums) - 1)\n# \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nrandom_num = nums[random_index]\nreturn random_num\n
    array.go
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunc randomAccess(nums []int) (randomNum int) {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nrandomIndex := rand.Intn(len(nums))\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nrandomNum = nums[randomIndex]\nreturn\n}\n
    array.js
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunction randomAccess(nums) {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nconst random_index = Math.floor(Math.random() * nums.length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nconst random_num = nums[random_index];\nreturn random_num;\n}\n
    array.ts
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunction randomAccess(nums: number[]): number {\n// \u5728\u533a\u95f4 [0, nums.length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nconst random_index = Math.floor(Math.random() * nums.length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nconst random_num = nums[random_index];\nreturn random_num;\n}\n
    array.c
    [class]{}-[func]{randomAccess}\n
    array.cs
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nint randomAccess(int[] nums)\n{\nRandom random = new();\n// \u5728\u533a\u95f4 [0, nums.Length) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nint randomIndex = random.Next(nums.Length);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nint randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    array.swift
    /* \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20 */\nfunc randomAccess(nums: [Int]) -> Int {\n// \u5728\u533a\u95f4 [0, nums.count) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6570\u5b57\nlet randomIndex = nums.indices.randomElement()!\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nlet randomNum = nums[randomIndex]\nreturn randomNum\n}\n
    array.zig
    // \u968f\u673a\u8fd4\u56de\u4e00\u4e2a\u6570\u7ec4\u5143\u7d20\nfn randomAccess(nums: []i32) i32 {\n// \u5728\u533a\u95f4 [0, nums.len) \u4e2d\u968f\u673a\u62bd\u53d6\u4e00\u4e2a\u6574\u6570\nvar randomIndex = std.crypto.random.intRangeLessThan(usize, 0, nums.len);\n// \u83b7\u53d6\u5e76\u8fd4\u56de\u968f\u673a\u5143\u7d20\nvar randomNum = nums[randomIndex];\nreturn randomNum;\n}\n
    "},{"location":"chapter_array_and_linkedlist/array/#412","title":"4.1.2. \u00a0 \u6570\u7ec4\u7f3a\u70b9","text":"

    \u6570\u7ec4\u5728\u521d\u59cb\u5316\u540e\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002\u7531\u4e8e\u7cfb\u7edf\u65e0\u6cd5\u4fdd\u8bc1\u6570\u7ec4\u4e4b\u540e\u7684\u5185\u5b58\u7a7a\u95f4\u662f\u53ef\u7528\u7684\uff0c\u56e0\u6b64\u6570\u7ec4\u957f\u5ea6\u65e0\u6cd5\u6269\u5c55\u3002\u800c\u82e5\u5e0c\u671b\u6269\u5bb9\u6570\u7ec4\uff0c\u5219\u9700\u65b0\u5efa\u4e00\u4e2a\u6570\u7ec4\uff0c\u7136\u540e\u628a\u539f\u6570\u7ec4\u5143\u7d20\u4f9d\u6b21\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\uff0c\u5728\u6570\u7ec4\u5f88\u5927\u7684\u60c5\u51b5\u4e0b\uff0c\u8fd9\u662f\u975e\u5e38\u8017\u65f6\u7684\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nint[] extend(int[] nums, int enlarge) {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nint[] res = new int[nums.length + enlarge];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < nums.length; i++) {\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.cpp
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nint* extend(int* nums, int size, int enlarge) {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nint* res = new int[size + enlarge];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < size; i++) {\nres[i] = nums[i];\n}\n// \u91ca\u653e\u5185\u5b58\ndelete[] nums;\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.py
    def extend(nums: List[int], enlarge: int) -> List[int]:\n\"\"\" \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 \"\"\"\n# \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nres = [0] * (len(nums) + enlarge)\n# \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor i in range(len(nums)):\nres[i] = nums[i]\n# \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res\n
    array.go
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nfunc extend(nums []int, enlarge int) []int {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nres := make([]int, len(nums)+enlarge)\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor i, num := range nums {\nres[i] = num\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res\n}\n
    array.js
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\n// \u8bf7\u6ce8\u610f\uff0cJavaScript \u7684 Array \u662f\u52a8\u6001\u6570\u7ec4\uff0c\u53ef\u4ee5\u76f4\u63a5\u6269\u5c55\n// \u4e3a\u4e86\u65b9\u4fbf\u5b66\u4e60\uff0c\u672c\u51fd\u6570\u5c06 Array \u770b\u4f5c\u662f\u957f\u5ea6\u4e0d\u53ef\u53d8\u7684\u6570\u7ec4\nfunction extend(nums, enlarge) {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nconst res = new Array(nums.length + enlarge).fill(0);\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.ts
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\n// \u8bf7\u6ce8\u610f\uff0cTypeScript \u7684 Array \u662f\u52a8\u6001\u6570\u7ec4\uff0c\u53ef\u4ee5\u76f4\u63a5\u6269\u5c55\n// \u4e3a\u4e86\u65b9\u4fbf\u5b66\u4e60\uff0c\u672c\u51fd\u6570\u5c06 Array \u770b\u4f5c\u662f\u957f\u5ea6\u4e0d\u53ef\u53d8\u7684\u6570\u7ec4\nfunction extend(nums: number[], enlarge: number): number[] {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nconst res = new Array(nums.length + enlarge).fill(0);\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.c
    [class]{}-[func]{extend}\n
    array.cs
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nint[] extend(int[] nums, int enlarge)\n{\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nint[] res = new int[nums.Length + enlarge];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < nums.Length; i++)\n{\nres[i] = nums[i];\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n
    array.swift
    /* \u6269\u5c55\u6570\u7ec4\u957f\u5ea6 */\nfunc extend(nums: [Int], enlarge: Int) -> [Int] {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nvar res = Array(repeating: 0, count: nums.count + enlarge)\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor i in nums.indices {\nres[i] = nums[i]\n}\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res\n}\n
    array.zig
    // \u6269\u5c55\u6570\u7ec4\u957f\u5ea6\nfn extend(mem_allocator: std.mem.Allocator, nums: []i32, enlarge: usize) ![]i32 {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u6269\u5c55\u957f\u5ea6\u540e\u7684\u6570\u7ec4\nvar res = try mem_allocator.alloc(i32, nums.len + enlarge);\nstd.mem.set(i32, res, 0);\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nstd.mem.copy(i32, res, nums);\n// \u8fd4\u56de\u6269\u5c55\u540e\u7684\u65b0\u6570\u7ec4\nreturn res;\n}\n

    \u6570\u7ec4\u4e2d\u63d2\u5165\u6216\u5220\u9664\u5143\u7d20\u6548\u7387\u4f4e\u4e0b\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981\u5728\u6570\u7ec4\u4e2d\u95f4\u63d2\u5165\u4e00\u4e2a\u5143\u7d20\uff0c\u7531\u4e8e\u6570\u7ec4\u5143\u7d20\u5728\u5185\u5b58\u4e2d\u662f\u201c\u7d27\u6328\u7740\u7684\u201d\uff0c\u5b83\u4eec\u4e4b\u95f4\u6ca1\u6709\u7a7a\u95f4\u518d\u653e\u4efb\u4f55\u6570\u636e\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u4e0d\u5f97\u4e0d\u5c06\u6b64\u7d22\u5f15\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u7136\u540e\u518d\u628a\u5143\u7d20\u8d4b\u503c\u7ed9\u8be5\u7d22\u5f15\u3002

    Fig. \u6570\u7ec4\u63d2\u5165\u5143\u7d20

    JavaC++PythonGoJavaScriptTypeScriptCC#Swift array.java
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nvoid insert(int[] nums, int num, int index) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int i = nums.length - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.cpp
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nvoid insert(int* nums, int size, int num, int index) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int i = size - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.py
    def insert(nums: List[int], num: int, index: int) -> None:\n\"\"\" \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num \"\"\"\n# \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor i in range(len(nums) - 1, index, -1):\nnums[i] = nums[i - 1]\n# \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num\n
    array.go
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunc insert(nums []int, num int, index int) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor i := len(nums) - 1; i > index; i-- {\nnums[i] = nums[i-1]\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num\n}\n
    array.js
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunction insert(nums, num, index) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let i = nums.length - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.ts
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunction insert(nums: number[], num: number, index: number): void {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let i = nums.length - 1; i > index; i--) {\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.c
    [class]{}-[func]{insert}\n
    array.cs
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nvoid insert(int[] nums, int num, int index)\n{\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int i = nums.Length - 1; i > index; i--)\n{\nnums[i] = nums[i - 1];\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num;\n}\n
    array.swift
    /* \u5728\u6570\u7ec4\u7684\u7d22\u5f15 index \u5904\u63d2\u5165\u5143\u7d20 num */\nfunc insert(nums: inout [Int], num: Int, index: Int) {\n// \u628a\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor i in sequence(first: nums.count - 1, next: { $0 > index + 1 ? $0 - 1 : nil }) {\nnums[i] = nums[i - 1]\n}\n// \u5c06 num \u8d4b\u7ed9 index \u5904\u5143\u7d20\nnums[index] = num\n}\n

    \u5220\u9664\u5143\u7d20\u4e5f\u662f\u7c7b\u4f3c\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8981\u5220\u9664\u7d22\u5f15 \\(i\\) \u5904\u7684\u5143\u7d20\uff0c\u5219\u9700\u8981\u628a\u7d22\u5f15 \\(i\\) \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\u3002\u503c\u5f97\u6ce8\u610f\u7684\u662f\uff0c\u5220\u9664\u5143\u7d20\u540e\uff0c\u539f\u5148\u672b\u5c3e\u7684\u5143\u7d20\u53d8\u5f97\u201c\u65e0\u610f\u4e49\u201d\u4e86\uff0c\u6211\u4eec\u65e0\u9700\u7279\u610f\u53bb\u4fee\u6539\u5b83\u3002

    Fig. \u6570\u7ec4\u5220\u9664\u5143\u7d20

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nvoid remove(int[] nums, int index) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int i = index; i < nums.length - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.cpp
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nvoid remove(int* nums, int size, int index) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int i = index; i < size - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.py
    def remove(nums: List[int], index: int) -> None:\n\"\"\" \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 \"\"\"\n# \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor i in range(index, len(nums) - 1):\nnums[i] = nums[i + 1]\n
    array.go
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunc remove(nums []int, index int) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor i := index; i < len(nums)-1; i++ {\nnums[i] = nums[i+1]\n}\n}\n
    array.js
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunction remove(nums, index) {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let i = index; i < nums.length - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.ts
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunction remove(nums: number[], index: number): void {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let i = index; i < nums.length - 1; i++) {\nnums[i] = nums[i + 1];\n}\n}\n
    array.c
    [class]{}-[func]{removeItem}\n
    array.cs
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nvoid remove(int[] nums, int index)\n{\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int i = index; i < nums.Length - 1; i++)\n{\nnums[i] = nums[i + 1];\n}\n}\n
    array.swift
    /* \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20 */\nfunc remove(nums: inout [Int], index: Int) {\nlet count = nums.count\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor i in sequence(first: index, next: { $0 < count - 1 - 1 ? $0 + 1 : nil }) {\nnums[i] = nums[i + 1]\n}\n}\n
    array.zig
    // \u5220\u9664\u7d22\u5f15 index \u5904\u5143\u7d20\nfn remove(nums: []i32, index: usize) void {\n// \u628a\u7d22\u5f15 index \u4e4b\u540e\u7684\u6240\u6709\u5143\u7d20\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nvar i = index;\nwhile (i < nums.len - 1) : (i += 1) {\nnums[i] = nums[i + 1];\n}\n}\n

    \u603b\u7ed3\u6765\u770b\uff0c\u6570\u7ec4\u7684\u63d2\u5165\u4e0e\u5220\u9664\u64cd\u4f5c\u6709\u4ee5\u4e0b\u7f3a\u70b9\uff1a

    • \u65f6\u95f4\u590d\u6742\u5ea6\u9ad8\uff1a\u6570\u7ec4\u7684\u63d2\u5165\u548c\u5220\u9664\u7684\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u5747\u4e3a \\(O(N)\\) \uff0c\u5176\u4e2d \\(N\\) \u4e3a\u6570\u7ec4\u957f\u5ea6\u3002
    • \u4e22\u5931\u5143\u7d20\uff1a\u7531\u4e8e\u6570\u7ec4\u7684\u957f\u5ea6\u4e0d\u53ef\u53d8\uff0c\u56e0\u6b64\u5728\u63d2\u5165\u5143\u7d20\u540e\uff0c\u8d85\u51fa\u6570\u7ec4\u957f\u5ea6\u8303\u56f4\u7684\u5143\u7d20\u4f1a\u88ab\u4e22\u5931\u3002
    • \u5185\u5b58\u6d6a\u8d39\uff1a\u6211\u4eec\u4e00\u822c\u4f1a\u521d\u59cb\u5316\u4e00\u4e2a\u6bd4\u8f83\u957f\u7684\u6570\u7ec4\uff0c\u53ea\u7528\u524d\u9762\u4e00\u90e8\u5206\uff0c\u8fd9\u6837\u5728\u63d2\u5165\u6570\u636e\u65f6\uff0c\u4e22\u5931\u7684\u672b\u5c3e\u5143\u7d20\u90fd\u662f\u6211\u4eec\u4e0d\u5173\u5fc3\u7684\uff0c\u4f46\u8fd9\u6837\u505a\u540c\u65f6\u4e5f\u4f1a\u9020\u6210\u5185\u5b58\u7a7a\u95f4\u7684\u6d6a\u8d39\u3002
    "},{"location":"chapter_array_and_linkedlist/array/#413","title":"4.1.3. \u00a0 \u6570\u7ec4\u5e38\u7528\u64cd\u4f5c","text":"

    \u6570\u7ec4\u904d\u5386\u3002\u4ee5\u4e0b\u4ecb\u7ecd\u4e24\u79cd\u5e38\u7528\u7684\u904d\u5386\u65b9\u6cd5\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u904d\u5386\u6570\u7ec4 */\nvoid traverse(int[] nums) {\nint count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.length; i++) {\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (int num : nums) {\ncount++;\n}\n}\n
    array.cpp
    /* \u904d\u5386\u6570\u7ec4 */\nvoid traverse(int* nums, int size) {\nint count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < size; i++) {\ncount++;\n}\n}\n
    array.py
    def traverse(nums: List[int]) -> None:\n\"\"\" \u904d\u5386\u6570\u7ec4 \"\"\"\ncount = 0\n# \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor i in range(len(nums)):\ncount += 1\n# \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor num in nums:\ncount += 1\n
    array.go
    /* \u904d\u5386\u6570\u7ec4 */\nfunc traverse(nums []int) {\ncount := 0\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor i := 0; i < len(nums); i++ {\ncount++\n}\ncount = 0\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor range nums {\ncount++\n}\n}\n
    array.js
    /* \u904d\u5386\u6570\u7ec4 */\nfunction traverse(nums) {\nlet count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (let num of nums) {\ncount += 1;\n}\n}\n
    array.ts
    /* \u904d\u5386\u6570\u7ec4 */\nfunction traverse(nums: number[]): void {\nlet count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (let num of nums) {\ncount += 1;\n}\n}\n
    array.c
    [class]{}-[func]{traverse}\n
    array.cs
    /* \u904d\u5386\u6570\u7ec4 */\nvoid traverse(int[] nums)\n{\nint count = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.Length; i++)\n{\ncount++;\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nforeach (int num in nums)\n{\ncount++;\n}\n}\n
    array.swift
    /* \u904d\u5386\u6570\u7ec4 */\nfunc traverse(nums: [Int]) {\nvar count = 0\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nfor _ in nums.indices {\ncount += 1\n}\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor _ in nums {\ncount += 1\n}\n}\n
    array.zig
    // \u904d\u5386\u6570\u7ec4\nfn traverse(nums: []i32) void {\nvar count: i32 = 0;\n// \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u6570\u7ec4\nvar i: i32 = 0;\nwhile (i < nums.len) : (i += 1) {\ncount += 1;\n}\ncount = 0;\n// \u76f4\u63a5\u904d\u5386\u6570\u7ec4\nfor (nums) |_| {\ncount += 1;\n}\n}\n

    \u6570\u7ec4\u67e5\u627e\u3002\u901a\u8fc7\u904d\u5386\u6570\u7ec4\uff0c\u67e5\u627e\u6570\u7ec4\u5185\u7684\u6307\u5b9a\u5143\u7d20\uff0c\u5e76\u8f93\u51fa\u5bf9\u5e94\u7d22\u5f15\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array.java
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nint find(int[] nums, int target) {\nfor (int i = 0; i < nums.length; i++) {\nif (nums[i] == target)\nreturn i;\n}\nreturn -1;\n}\n
    array.cpp
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nint find(int* nums, int size, int target) {\nfor (int i = 0; i < size; i++) {\nif (nums[i] == target)\nreturn i;\n}\nreturn -1;\n}\n
    array.py
    def find(nums: List[int], target: int) -> int:\n\"\"\" \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 \"\"\"\nfor i in range(len(nums)):\nif nums[i] == target:\nreturn i\nreturn -1\n
    array.go
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunc find(nums []int, target int) (index int) {\nindex = -1\nfor i := 0; i < len(nums); i++ {\nif nums[i] == target {\nindex = i\nbreak\n}\n}\nreturn\n}\n
    array.js
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunction find(nums, target) {\nfor (let i = 0; i < nums.length; i++) {\nif (nums[i] == target) return i;\n}\nreturn -1;\n}\n
    array.ts
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunction find(nums: number[], target: number): number {\nfor (let i = 0; i < nums.length; i++) {\nif (nums[i] === target) {\nreturn i;\n}\n}\nreturn -1;\n}\n
    array.c
    [class]{}-[func]{find}\n
    array.cs
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nint find(int[] nums, int target)\n{\nfor (int i = 0; i < nums.Length; i++)\n{\nif (nums[i] == target)\nreturn i;\n}\nreturn -1;\n}\n
    array.swift
    /* \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20 */\nfunc find(nums: [Int], target: Int) -> Int {\nfor i in nums.indices {\nif nums[i] == target {\nreturn i\n}\n}\nreturn -1\n}\n
    array.zig
    // \u5728\u6570\u7ec4\u4e2d\u67e5\u627e\u6307\u5b9a\u5143\u7d20\nfn find(nums: []i32, target: i32) i32 {\nfor (nums) |num, i| {\nif (num == target) return @intCast(i32, i);\n}\nreturn -1;\n}\n
    "},{"location":"chapter_array_and_linkedlist/array/#414","title":"4.1.4. \u00a0 \u6570\u7ec4\u5178\u578b\u5e94\u7528","text":"

    \u968f\u673a\u8bbf\u95ee\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981\u968f\u673a\u62bd\u53d6\u4e00\u4e9b\u6837\u672c\uff0c\u90a3\u4e48\u53ef\u4ee5\u7528\u6570\u7ec4\u5b58\u50a8\uff0c\u5e76\u751f\u6210\u4e00\u4e2a\u968f\u673a\u5e8f\u5217\uff0c\u6839\u636e\u7d22\u5f15\u5b9e\u73b0\u6837\u672c\u7684\u968f\u673a\u62bd\u53d6\u3002

    \u4e8c\u5206\u67e5\u627e\u3002\u4f8b\u5982\u524d\u6587\u67e5\u5b57\u5178\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b57\u5178\u4e2d\u7684\u6240\u6709\u5b57\u6309\u7167\u62fc\u97f3\u987a\u5e8f\u5b58\u50a8\u5728\u6570\u7ec4\u4e2d\uff0c\u7136\u540e\u4f7f\u7528\u4e0e\u65e5\u5e38\u67e5\u7eb8\u8d28\u5b57\u5178\u76f8\u540c\u7684\u201c\u7ffb\u5f00\u4e2d\u95f4\uff0c\u6392\u9664\u4e00\u534a\u201d\u7684\u65b9\u5f0f\uff0c\u6765\u5b9e\u73b0\u4e00\u4e2a\u67e5\u7535\u5b50\u5b57\u5178\u7684\u7b97\u6cd5\u3002

    \u6df1\u5ea6\u5b66\u4e60\u3002\u795e\u7ecf\u7f51\u7edc\u4e2d\u5927\u91cf\u4f7f\u7528\u4e86\u5411\u91cf\u3001\u77e9\u9635\u3001\u5f20\u91cf\u4e4b\u95f4\u7684\u7ebf\u6027\u4ee3\u6570\u8fd0\u7b97\uff0c\u8fd9\u4e9b\u6570\u636e\u90fd\u662f\u4ee5\u6570\u7ec4\u7684\u5f62\u5f0f\u6784\u5efa\u7684\u3002\u6570\u7ec4\u662f\u795e\u7ecf\u7f51\u7edc\u7f16\u7a0b\u4e2d\u6700\u5e38\u4f7f\u7528\u7684\u6570\u636e\u7ed3\u6784\u3002

    "},{"location":"chapter_array_and_linkedlist/linked_list/","title":"4.2. \u00a0 \u94fe\u8868","text":"

    \u5f15\u8a00

    \u5185\u5b58\u7a7a\u95f4\u662f\u6240\u6709\u7a0b\u5e8f\u7684\u516c\u5171\u8d44\u6e90\uff0c\u6392\u9664\u5df2\u5360\u7528\u7684\u5185\u5b58\uff0c\u7a7a\u95f2\u5185\u5b58\u5f80\u5f80\u662f\u6563\u843d\u5728\u5185\u5b58\u5404\u5904\u7684\u3002\u6211\u4eec\u77e5\u9053\uff0c\u5b58\u50a8\u6570\u7ec4\u9700\u8981\u5185\u5b58\u7a7a\u95f4\u8fde\u7eed\uff0c\u5f53\u6211\u4eec\u9700\u8981\u7533\u8bf7\u4e00\u4e2a\u5f88\u5927\u7684\u6570\u7ec4\u65f6\uff0c\u7cfb\u7edf\u4e0d\u4e00\u5b9a\u5b58\u5728\u8fd9\u4e48\u5927\u7684\u8fde\u7eed\u5185\u5b58\u7a7a\u95f4\u3002\u800c\u94fe\u8868\u5219\u66f4\u52a0\u7075\u6d3b\uff0c\u4e0d\u9700\u8981\u5185\u5b58\u662f\u8fde\u7eed\u7684\uff0c\u53ea\u8981\u5269\u4f59\u5185\u5b58\u7a7a\u95f4\u5927\u5c0f\u591f\u7528\u5373\u53ef\u3002

    \u300c\u94fe\u8868 Linked List\u300d\u662f\u4e00\u79cd\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5143\u7d20\u90fd\u662f\u5355\u72ec\u7684\u5bf9\u8c61\uff0c\u5404\u4e2a\u5143\u7d20\uff08\u4e00\u822c\u79f0\u4e3a\u7ed3\u70b9\uff09\u4e4b\u95f4\u901a\u8fc7\u6307\u9488\u8fde\u63a5\u3002\u7531\u4e8e\u7ed3\u70b9\u4e2d\u8bb0\u5f55\u4e86\u8fde\u63a5\u5173\u7cfb\uff0c\u56e0\u6b64\u94fe\u8868\u7684\u5b58\u50a8\u65b9\u5f0f\u76f8\u6bd4\u4e8e\u6570\u7ec4\u66f4\u52a0\u7075\u6d3b\uff0c\u7cfb\u7edf\u4e0d\u5fc5\u4fdd\u8bc1\u5185\u5b58\u5730\u5740\u7684\u8fde\u7eed\u6027\u3002

    \u94fe\u8868\u7684\u300c\u7ed3\u70b9 Node\u300d\u5305\u542b\u4e24\u9879\u6570\u636e\uff0c\u4e00\u662f\u7ed3\u70b9\u300c\u503c Value\u300d\uff0c\u4e8c\u662f\u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u300c\u6307\u9488 Pointer\u300d\uff08\u6216\u79f0\u300c\u5f15\u7528 Reference\u300d\uff09\u3002

    Fig. \u94fe\u8868\u5b9a\u4e49\u4e0e\u5b58\u50a8\u65b9\u5f0f

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nint val;        // \u7ed3\u70b9\u503c\nListNode next;  // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) { val = x; }  // \u6784\u9020\u51fd\u6570\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct ListNode {\nint val;         // \u7ed3\u70b9\u503c\nListNode *next;  // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) : val(x), next(nullptr) {}  // \u6784\u9020\u51fd\u6570\n};\n
    \"\"\" \u94fe\u8868\u7ed3\u70b9\u7c7b \"\"\" \nclass ListNode:\ndef __init__(self, val: int):\nself.val: int = val                  # \u7ed3\u70b9\u503c\nself.next: Optional[ListNode] = None # \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n
    /* \u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\ntype ListNode struct {\nVal  int       // \u7ed3\u70b9\u503c\nNext *ListNode // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n// NewListNode \u6784\u9020\u51fd\u6570\uff0c\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u94fe\u8868\nfunc NewListNode(val int) *ListNode {\nreturn &ListNode{\nVal:  val,\nNext: nil,\n}\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval;\nnext;\nconstructor(val, next) {\nthis.val = (val === undefined ? 0 : val);       // \u7ed3\u70b9\u503c\nthis.next = (next === undefined ? null : next); // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval: number;\nnext: ListNode | null;\nconstructor(val?: number, next?: ListNode | null) {\nthis.val = val === undefined ? 0 : val;        // \u7ed3\u70b9\u503c\nthis.next = next === undefined ? null : next;  // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct ListNode {\nint val;               // \u7ed3\u70b9\u503c\nstruct ListNode *next; // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n};\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode\n{\nint val;         // \u7ed3\u70b9\u503c\nListNode next;   // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\nListNode(int x) => val = x;  //\u6784\u9020\u51fd\u6570\n}\n
    /* \u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar next: ListNode? // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\ninit(x: Int) { // \u6784\u9020\u51fd\u6570\nval = x\n}\n}\n
    // \u94fe\u8868\u7ed3\u70b9\u7c7b\npub fn ListNode(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nval: T = 0, // \u7ed3\u70b9\u503c\nnext: ?*Self = null, // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n// \u6784\u9020\u51fd\u6570\npub fn init(self: *Self, x: i32) void {\nself.val = x;\nself.next = null;\n}\n};\n}\n

    \u5c3e\u7ed3\u70b9\u6307\u5411\u4ec0\u4e48\uff1f \u6211\u4eec\u4e00\u822c\u5c06\u94fe\u8868\u7684\u6700\u540e\u4e00\u4e2a\u7ed3\u70b9\u79f0\u4e3a\u300c\u5c3e\u7ed3\u70b9\u300d\uff0c\u5176\u6307\u5411\u7684\u662f\u300c\u7a7a\u300d\uff0c\u5728 Java / C++ / Python \u4e2d\u5206\u522b\u8bb0\u4e3a null / nullptr / None \u3002\u5728\u4e0d\u5f15\u8d77\u6b67\u4e49\u4e0b\uff0c\u672c\u4e66\u90fd\u4f7f\u7528 null \u6765\u8868\u793a\u7a7a\u3002

    \u94fe\u8868\u521d\u59cb\u5316\u65b9\u6cd5\u3002\u5efa\u7acb\u94fe\u8868\u5206\u4e3a\u4e24\u6b65\uff0c\u7b2c\u4e00\u6b65\u662f\u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\u5bf9\u8c61\uff0c\u7b2c\u4e8c\u6b65\u662f\u6784\u5efa\u5f15\u7528\u6307\u5411\u5173\u7cfb\u3002\u5b8c\u6210\u540e\uff0c\u5373\u53ef\u4ee5\u4ece\u94fe\u8868\u7684\u9996\u4e2a\u7ed3\u70b9\uff08\u5373\u5934\u7ed3\u70b9\uff09\u51fa\u53d1\uff0c\u8bbf\u95ee\u5176\u4f59\u6240\u6709\u7684\u7ed3\u70b9\u3002

    Tip

    \u6211\u4eec\u901a\u5e38\u5c06\u5934\u7ed3\u70b9\u5f53\u4f5c\u94fe\u8868\u7684\u4ee3\u79f0\uff0c\u4f8b\u5982\u5934\u7ed3\u70b9 head \u548c\u94fe\u8868 head \u5b9e\u9645\u4e0a\u662f\u540c\u4e49\u7684\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nListNode n0 = new ListNode(1);\nListNode n1 = new ListNode(3);\nListNode n2 = new ListNode(2);\nListNode n3 = new ListNode(5);\nListNode n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.cpp
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nListNode* n0 = new ListNode(1);\nListNode* n1 = new ListNode(3);\nListNode* n2 = new ListNode(2);\nListNode* n3 = new ListNode(5);\nListNode* n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0->next = n1;\nn1->next = n2;\nn2->next = n3;\nn3->next = n4;\n
    linked_list.py
    \"\"\" \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 \"\"\"\n# \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nn0 = ListNode(1)\nn1 = ListNode(3)\nn2 = ListNode(2)\nn3 = ListNode(5)\nn4 = ListNode(4)\n# \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1\nn1.next = n2\nn2.next = n3\nn3.next = n4\n
    linked_list.go
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nn0 := NewListNode(1)\nn1 := NewListNode(3)\nn2 := NewListNode(2)\nn3 := NewListNode(5)\nn4 := NewListNode(4)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.Next = n1\nn1.Next = n2\nn2.Next = n3\nn3.Next = n4\n
    linked_list.js
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nconst n0 = new ListNode(1);\nconst n1 = new ListNode(3);\nconst n2 = new ListNode(2);\nconst n3 = new ListNode(5);\nconst n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.ts
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nconst n0 = new ListNode(1);\nconst n1 = new ListNode(3);\nconst n2 = new ListNode(2);\nconst n3 = new ListNode(5);\nconst n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.c
    \n
    linked_list.cs
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nListNode n0 = new ListNode(1);\nListNode n1 = new ListNode(3);\nListNode n2 = new ListNode(2);\nListNode n3 = new ListNode(5);\nListNode n4 = new ListNode(4);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1;\nn1.next = n2;\nn2.next = n3;\nn3.next = n4;\n
    linked_list.swift
    /* \u521d\u59cb\u5316\u94fe\u8868 1 -> 3 -> 2 -> 5 -> 4 */\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9\nlet n0 = ListNode(x: 1)\nlet n1 = ListNode(x: 3)\nlet n2 = ListNode(x: 2)\nlet n3 = ListNode(x: 5)\nlet n4 = ListNode(x: 4)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = n1\nn1.next = n2\nn2.next = n3\nn3.next = n4\n
    linked_list.zig
    // \u521d\u59cb\u5316\u94fe\u8868\n// \u521d\u59cb\u5316\u5404\u4e2a\u7ed3\u70b9 \nvar n0 = inc.ListNode(i32){.val = 1};\nvar n1 = inc.ListNode(i32){.val = 3};\nvar n2 = inc.ListNode(i32){.val = 2};\nvar n3 = inc.ListNode(i32){.val = 5};\nvar n4 = inc.ListNode(i32){.val = 4};\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\nn0.next = &n1;\nn1.next = &n2;\nn2.next = &n3;\nn3.next = &n4;\n
    "},{"location":"chapter_array_and_linkedlist/linked_list/#421","title":"4.2.1. \u00a0 \u94fe\u8868\u4f18\u70b9","text":"

    \u5728\u94fe\u8868\u4e2d\uff0c\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u7684\u64cd\u4f5c\u6548\u7387\u9ad8\u3002\u6bd4\u5982\uff0c\u5982\u679c\u6211\u4eec\u60f3\u5728\u94fe\u8868\u4e2d\u95f4\u7684\u4e24\u4e2a\u7ed3\u70b9 A , B \u4e4b\u95f4\u63d2\u5165\u4e00\u4e2a\u65b0\u7ed3\u70b9 P \uff0c\u6211\u4eec\u53ea\u9700\u8981\u6539\u53d8\u4e24\u4e2a\u7ed3\u70b9\u6307\u9488\u5373\u53ef\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u76f8\u6bd4\u6570\u7ec4\u7684\u63d2\u5165\u64cd\u4f5c\u9ad8\u6548\u5f88\u591a\u3002

    Fig. \u94fe\u8868\u63d2\u5165\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nvoid insert(ListNode n0, ListNode P) {\nListNode n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.cpp
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nvoid insert(ListNode* n0, ListNode* P) {\nListNode* n1 = n0->next;\nP->next = n1;\nn0->next = P;\n}\n
    linked_list.py
    def insert(n0: ListNode, P: ListNode) -> None:\n\"\"\" \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P \"\"\"\nn1 = n0.next\nP.next = n1\nn0.next = P\n
    linked_list.go
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunc insertNode(n0 *ListNode, P *ListNode) {\nn1 := n0.Next\nP.Next = n1\nn0.Next = P\n}\n
    linked_list.js
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunction insert(n0, P) {\nconst n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.ts
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunction insert(n0: ListNode, P: ListNode): void {\nconst n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.c
    [class]{}-[func]{insertNode}\n
    linked_list.cs
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nvoid insert(ListNode n0, ListNode P)\n{\nListNode? n1 = n0.next;\nP.next = n1;\nn0.next = P;\n}\n
    linked_list.swift
    /* \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P */\nfunc insert(n0: ListNode, P: ListNode) {\nlet n1 = n0.next\nP.next = n1\nn0.next = P\n}\n
    linked_list.zig
    // \u5728\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u63d2\u5165\u7ed3\u70b9 P\nfn insert(n0: ?*inc.ListNode(i32), P: ?*inc.ListNode(i32)) void {\nvar n1 = n0.?.next;\nP.?.next = n1;\nn0.?.next = P;\n}\n

    \u5728\u94fe\u8868\u4e2d\u5220\u9664\u7ed3\u70b9\u4e5f\u5f88\u65b9\u4fbf\uff0c\u53ea\u9700\u8981\u6539\u53d8\u4e00\u4e2a\u7ed3\u70b9\u6307\u9488\u5373\u53ef\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u867d\u7136\u5728\u5b8c\u6210\u5220\u9664\u540e\u7ed3\u70b9 P \u4ecd\u7136\u6307\u5411 n1 \uff0c\u4f46\u5b9e\u9645\u4e0a P \u5df2\u7ecf\u4e0d\u5c5e\u4e8e\u6b64\u94fe\u8868\u4e86\uff0c\u56e0\u4e3a\u904d\u5386\u6b64\u94fe\u8868\u662f\u65e0\u6cd5\u8bbf\u95ee\u5230 P \u7684\u3002

    Fig. \u94fe\u8868\u5220\u9664\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nvoid remove(ListNode n0) {\nif (n0.next == null)\nreturn;\n// n0 -> P -> n1\nListNode P = n0.next;\nListNode n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.cpp
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nvoid remove(ListNode* n0) {\nif (n0->next == nullptr)\nreturn;\n// n0 -> P -> n1\nListNode* P = n0->next;\nListNode* n1 = P->next;\nn0->next = n1;\n// \u91ca\u653e\u5185\u5b58\ndelete P;\n}\n
    linked_list.py
    def remove(n0: ListNode) -> None:\n\"\"\" \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 \"\"\"\nif not n0.next:\nreturn\n# n0 -> P -> n1\nP = n0.next\nn1 = P.next\nn0.next = n1\n
    linked_list.go
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc removeNode(n0 *ListNode) {\nif n0.Next == nil {\nreturn\n}\n// n0 -> P -> n1\nP := n0.Next\nn1 := P.Next\nn0.Next = n1\n}\n
    linked_list.js
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction remove(n0) {\nif (!n0.next)\nreturn;\n// n0 -> P -> n1\nconst P = n0.next;\nconst n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.ts
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction remove(n0: ListNode): void {\nif (!n0.next) {\nreturn;\n}\n// n0 -> P -> n1\nconst P = n0.next;\nconst n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.c
    [class]{}-[func]{removeNode}\n
    linked_list.cs
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nvoid remove(ListNode n0)\n{\nif (n0.next == null)\nreturn;\n// n0 -> P -> n1\nListNode P = n0.next;\nListNode? n1 = P.next;\nn0.next = n1;\n}\n
    linked_list.swift
    /* \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc remove(n0: ListNode) {\nif n0.next == nil {\nreturn\n}\n// n0 -> P -> n1\nlet P = n0.next\nlet n1 = P?.next\nn0.next = n1\nP?.next = nil\n}\n
    linked_list.zig
    // \u5220\u9664\u94fe\u8868\u7684\u7ed3\u70b9 n0 \u4e4b\u540e\u7684\u9996\u4e2a\u7ed3\u70b9\nfn remove(n0: ?*inc.ListNode(i32)) void {\nif (n0.?.next == null) return;\n// n0 -> P -> n1\nvar P = n0.?.next;\nvar n1 = P.?.next;\nn0.?.next = n1;\n}\n
    "},{"location":"chapter_array_and_linkedlist/linked_list/#422","title":"4.2.2. \u00a0 \u94fe\u8868\u7f3a\u70b9","text":"

    \u94fe\u8868\u8bbf\u95ee\u7ed3\u70b9\u6548\u7387\u4f4e\u3002\u4e0a\u8282\u63d0\u5230\uff0c\u6570\u7ec4\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u4e0b\u8bbf\u95ee\u4efb\u610f\u5143\u7d20\uff0c\u4f46\u94fe\u8868\u65e0\u6cd5\u76f4\u63a5\u8bbf\u95ee\u4efb\u610f\u7ed3\u70b9\u3002\u8fd9\u662f\u56e0\u4e3a\u8ba1\u7b97\u673a\u9700\u8981\u4ece\u5934\u7ed3\u70b9\u51fa\u53d1\uff0c\u4e00\u4e2a\u4e00\u4e2a\u5730\u5411\u540e\u904d\u5386\u5230\u76ee\u6807\u7ed3\u70b9\u3002\u4f8b\u5982\uff0c\u5018\u82e5\u60f3\u8981\u8bbf\u95ee\u94fe\u8868\u7d22\u5f15\u4e3a index \uff08\u5373\u7b2c index + 1 \u4e2a\uff09\u7684\u7ed3\u70b9\uff0c\u90a3\u4e48\u9700\u8981 index \u6b21\u8bbf\u95ee\u64cd\u4f5c\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nListNode access(ListNode head, int index) {\nfor (int i = 0; i < index; i++) {\nif (head == null)\nreturn null;\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.cpp
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nListNode* access(ListNode* head, int index) {\nfor (int i = 0; i < index; i++) {\nif (head == nullptr)\nreturn nullptr;\nhead = head->next;\n}\nreturn head;\n}\n
    linked_list.py
    def access(head: ListNode, index: int) -> Optional[ListNode]:\n\"\"\" \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 \"\"\"\nfor _ in range(index):\nif not head:\nreturn None\nhead = head.next\nreturn head\n
    linked_list.go
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunc access(head *ListNode, index int) *ListNode {\nfor i := 0; i < index; i++ {\nif head == nil {\nreturn nil\n}\nhead = head.Next\n}\nreturn head\n}\n
    linked_list.js
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunction access(head, index) {\nfor (let i = 0; i < index; i++) {\nif (!head) {\nreturn null;\n}\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.ts
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunction access(head: ListNode | null, index: number): ListNode | null {\nfor (let i = 0; i < index; i++) {\nif (!head) {\nreturn null;\n}\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.c
    [class]{}-[func]{access}\n
    linked_list.cs
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nListNode? access(ListNode head, int index)\n{\nfor (int i = 0; i < index; i++)\n{\nif (head == null)\nreturn null;\nhead = head.next;\n}\nreturn head;\n}\n
    linked_list.swift
    /* \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9 */\nfunc access(head: ListNode, index: Int) -> ListNode? {\nvar head: ListNode? = head\nfor _ in 0 ..< index {\nif head == nil {\nreturn nil\n}\nhead = head?.next\n}\nreturn head\n}\n
    linked_list.zig
    // \u8bbf\u95ee\u94fe\u8868\u4e2d\u7d22\u5f15\u4e3a index \u7684\u7ed3\u70b9\nfn access(node: ?*inc.ListNode(i32), index: i32) ?*inc.ListNode(i32) {\nvar head = node;\nvar i: i32 = 0;\nwhile (i < index) : (i += 1) {\nhead = head.?.next;\nif (head == null) return null;\n}\nreturn head;\n}\n

    \u94fe\u8868\u7684\u5185\u5b58\u5360\u7528\u591a\u3002\u94fe\u8868\u4ee5\u7ed3\u70b9\u4e3a\u5355\u4f4d\uff0c\u6bcf\u4e2a\u7ed3\u70b9\u9664\u4e86\u4fdd\u5b58\u503c\u5916\uff0c\u8fd8\u9700\u989d\u5916\u4fdd\u5b58\u6307\u9488\uff08\u5f15\u7528\uff09\u3002\u8fd9\u610f\u5473\u7740\u540c\u6837\u6570\u636e\u91cf\u4e0b\uff0c\u94fe\u8868\u6bd4\u6570\u7ec4\u9700\u8981\u5360\u7528\u66f4\u591a\u5185\u5b58\u7a7a\u95f4\u3002

    "},{"location":"chapter_array_and_linkedlist/linked_list/#423","title":"4.2.3. \u00a0 \u94fe\u8868\u5e38\u7528\u64cd\u4f5c","text":"

    \u904d\u5386\u94fe\u8868\u67e5\u627e\u3002\u904d\u5386\u94fe\u8868\uff0c\u67e5\u627e\u94fe\u8868\u5185\u503c\u4e3a target \u7684\u7ed3\u70b9\uff0c\u8f93\u51fa\u7ed3\u70b9\u5728\u94fe\u8868\u4e2d\u7684\u7d22\u5f15\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linked_list.java
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nint find(ListNode head, int target) {\nint index = 0;\nwhile (head != null) {\nif (head.val == target)\nreturn index;\nhead = head.next;\nindex++;\n}\nreturn -1;\n}\n
    linked_list.cpp
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nint find(ListNode* head, int target) {\nint index = 0;\nwhile (head != nullptr) {\nif (head->val == target)\nreturn index;\nhead = head->next;\nindex++;\n}\nreturn -1;\n}\n
    linked_list.py
    def find(head: ListNode, target: int) -> int:\n\"\"\" \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 \"\"\"\nindex = 0\nwhile head:\nif head.val == target:\nreturn index\nhead = head.next\nindex += 1\nreturn -1\n
    linked_list.go
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc findNode(head *ListNode, target int) int {\nindex := 0\nfor head != nil {\nif head.Val == target {\nreturn index\n}\nhead = head.Next\nindex++\n}\nreturn -1\n}\n
    linked_list.js
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction find(head, target) {\nlet index = 0;\nwhile (head !== null) {\nif (head.val === target) {\nreturn index;\n}\nhead = head.next;\nindex += 1;\n}\nreturn -1;\n}\n
    linked_list.ts
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunction find(head: ListNode | null, target: number): number {\nlet index = 0;\nwhile (head !== null) {\nif (head.val === target) {\nreturn index;\n}\nhead = head.next;\nindex += 1;\n}\nreturn -1;\n}\n
    linked_list.c
    [class]{}-[func]{findNode}\n
    linked_list.cs
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nint find(ListNode head, int target)\n{\nint index = 0;\nwhile (head != null)\n{\nif (head.val == target)\nreturn index;\nhead = head.next;\nindex++;\n}\nreturn -1;\n}\n
    linked_list.swift
    /* \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9 */\nfunc find(head: ListNode, target: Int) -> Int {\nvar head: ListNode? = head\nvar index = 0\nwhile head != nil {\nif head?.val == target {\nreturn index\n}\nhead = head?.next\nindex += 1\n}\nreturn -1\n}\n
    linked_list.zig
    // \u5728\u94fe\u8868\u4e2d\u67e5\u627e\u503c\u4e3a target \u7684\u9996\u4e2a\u7ed3\u70b9\nfn find(node: ?*inc.ListNode(i32), target: i32) i32 {\nvar head = node;\nvar index: i32 = 0;\nwhile (head != null) {\nif (head.?.val == target) return index;\nhead = head.?.next;\nindex += 1;\n}\nreturn -1;\n}\n
    "},{"location":"chapter_array_and_linkedlist/linked_list/#424","title":"4.2.4. \u00a0 \u5e38\u89c1\u94fe\u8868\u7c7b\u578b","text":"

    \u5355\u5411\u94fe\u8868\u3002\u5373\u4e0a\u8ff0\u4ecb\u7ecd\u7684\u666e\u901a\u94fe\u8868\u3002\u5355\u5411\u94fe\u8868\u7684\u7ed3\u70b9\u6709\u300c\u503c\u300d\u548c\u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u300c\u6307\u9488\uff08\u5f15\u7528\uff09\u300d\u4e24\u9879\u6570\u636e\u3002\u6211\u4eec\u5c06\u9996\u4e2a\u7ed3\u70b9\u79f0\u4e3a\u5934\u7ed3\u70b9\uff0c\u5c3e\u7ed3\u70b9\u6307\u5411 null \u3002

    \u73af\u5f62\u94fe\u8868\u3002\u5982\u679c\u6211\u4eec\u4ee4\u5355\u5411\u94fe\u8868\u7684\u5c3e\u7ed3\u70b9\u6307\u5411\u5934\u7ed3\u70b9\uff08\u5373\u9996\u5c3e\u76f8\u63a5\uff09\uff0c\u5219\u5f97\u5230\u4e00\u4e2a\u73af\u5f62\u94fe\u8868\u3002\u5728\u73af\u5f62\u94fe\u8868\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u4efb\u610f\u7ed3\u70b9\u770b\u4f5c\u662f\u5934\u7ed3\u70b9\u3002

    \u53cc\u5411\u94fe\u8868\u3002\u5355\u5411\u94fe\u8868\u4ec5\u8bb0\u5f55\u4e86\u4e00\u4e2a\u65b9\u5411\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\uff0c\u5728\u53cc\u5411\u94fe\u8868\u7684\u7ed3\u70b9\u5b9a\u4e49\u4e2d\uff0c\u540c\u65f6\u6709\u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\uff08\u540e\u7ee7\u7ed3\u70b9\uff09\u548c\u4e0a\u4e00\u7ed3\u70b9\uff08\u524d\u9a71\u7ed3\u70b9\uff09\u7684\u300c\u6307\u9488\uff08\u5f15\u7528\uff09\u300d\u3002\u53cc\u5411\u94fe\u8868\u76f8\u5bf9\u4e8e\u5355\u5411\u94fe\u8868\u66f4\u52a0\u7075\u6d3b\uff0c\u5373\u53ef\u4ee5\u671d\u4e24\u4e2a\u65b9\u5411\u904d\u5386\u94fe\u8868\uff0c\u4f46\u4e5f\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nint val;        // \u7ed3\u70b9\u503c\nListNode next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) { val = x; }  // \u6784\u9020\u51fd\u6570\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct ListNode {\nint val;         // \u7ed3\u70b9\u503c\nListNode *next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode *prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) : val(x), next(nullptr), prev(nullptr) {}  // \u6784\u9020\u51fd\u6570\n};\n
    \"\"\" \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b \"\"\" \nclass ListNode:\ndef __init__(self, val: int):\nself.val: int = val                   # \u7ed3\u70b9\u503c\nself.next: Optional[ListNode] = None  # \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nself.prev: Optional[ListNode] = None  # \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7ed3\u6784\u4f53 */\ntype DoublyListNode struct {\nVal  int             // \u7ed3\u70b9\u503c\nNext *DoublyListNode // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nPrev *DoublyListNode // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n// NewDoublyListNode \u521d\u59cb\u5316\nfunc NewDoublyListNode(val int) *DoublyListNode {\nreturn &DoublyListNode{\nVal:  val,\nNext: nil,\nPrev: nil,\n}\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval;\nnext;\nprev;\nconstructor(val, next) {\nthis.val = val  ===  undefined ? 0 : val;        // \u7ed3\u70b9\u503c\nthis.next = next  ===  undefined ? null : next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nthis.prev = prev  ===  undefined ? null : prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nval: number;\nnext: ListNode | null;\nprev: ListNode | null;\nconstructor(val?: number, next?: ListNode | null, prev?: ListNode | null) {\nthis.val = val  ===  undefined ? 0 : val;        // \u7ed3\u70b9\u503c\nthis.next = next  ===  undefined ? null : next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nthis.prev = prev  ===  undefined ? null : prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n}\n}\n
    \n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nint val;        // \u7ed3\u70b9\u503c\nListNode next;  // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode prev;  // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nListNode(int x) => val = x;  // \u6784\u9020\u51fd\u6570\n}\n
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b */\nclass ListNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar next: ListNode? // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nvar prev: ListNode? // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\ninit(x: Int) { // \u6784\u9020\u51fd\u6570\nval = x\n}\n}\n
    // \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\u7c7b\npub fn ListNode(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nval: T = 0, // \u7ed3\u70b9\u503c\nnext: ?*Self = null, // \u6307\u5411\u540e\u7ee7\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\nprev: ?*Self = null, // \u6307\u5411\u524d\u9a71\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n// \u6784\u9020\u51fd\u6570\npub fn init(self: *Self, x: i32) void {\nself.val = x;\nself.next = null;\nself.prev = null;\n}\n};\n}\n

    Fig. \u5e38\u89c1\u94fe\u8868\u79cd\u7c7b

    "},{"location":"chapter_array_and_linkedlist/list/","title":"4.3. \u00a0 \u5217\u8868","text":"

    \u7531\u4e8e\u957f\u5ea6\u4e0d\u53ef\u53d8\uff0c\u6570\u7ec4\u7684\u5b9e\u7528\u6027\u5927\u5927\u964d\u4f4e\u3002\u5728\u5f88\u591a\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e8b\u5148\u5e76\u4e0d\u77e5\u9053\u4f1a\u8f93\u5165\u591a\u5c11\u6570\u636e\uff0c\u8fd9\u5c31\u4e3a\u6570\u7ec4\u957f\u5ea6\u7684\u9009\u62e9\u5e26\u6765\u4e86\u5f88\u5927\u56f0\u96be\u3002\u957f\u5ea6\u9009\u5c0f\u4e86\uff0c\u9700\u8981\u5728\u6dfb\u52a0\u6570\u636e\u4e2d\u9891\u7e41\u5730\u6269\u5bb9\u6570\u7ec4\uff1b\u957f\u5ea6\u9009\u5927\u4e86\uff0c\u53c8\u9020\u6210\u5185\u5b58\u7a7a\u95f4\u7684\u6d6a\u8d39\u3002

    \u4e3a\u4e86\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u8bde\u751f\u4e86\u4e00\u79cd\u88ab\u79f0\u4e3a\u300c\u5217\u8868 List\u300d\u7684\u6570\u636e\u7ed3\u6784\u3002\u5217\u8868\u53ef\u4ee5\u88ab\u7406\u89e3\u4e3a\u957f\u5ea6\u53ef\u53d8\u7684\u6570\u7ec4\uff0c\u56e0\u6b64\u4e5f\u5e38\u88ab\u79f0\u4e3a\u300c\u52a8\u6001\u6570\u7ec4 Dynamic Array\u300d\u3002\u5217\u8868\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\uff0c\u7ee7\u627f\u4e86\u6570\u7ec4\u7684\u4f18\u70b9\uff0c\u540c\u65f6\u8fd8\u53ef\u4ee5\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u5b9e\u65f6\u6269\u5bb9\u3002\u5728\u5217\u8868\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u81ea\u7531\u5730\u6dfb\u52a0\u5143\u7d20\uff0c\u800c\u4e0d\u7528\u62c5\u5fc3\u8d85\u8fc7\u5bb9\u91cf\u9650\u5236\u3002

    "},{"location":"chapter_array_and_linkedlist/list/#431","title":"4.3.1. \u00a0 \u5217\u8868\u5e38\u7528\u64cd\u4f5c","text":"

    \u521d\u59cb\u5316\u5217\u8868\u3002\u6211\u4eec\u901a\u5e38\u4f1a\u4f7f\u7528\u5230\u201c\u65e0\u521d\u59cb\u503c\u201d\u548c\u201c\u6709\u521d\u59cb\u503c\u201d\u7684\u4e24\u79cd\u521d\u59cb\u5316\u65b9\u6cd5\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nList<Integer> list1 = new ArrayList<>();\n// \u6709\u521d\u59cb\u503c\uff08\u6ce8\u610f\u6570\u7ec4\u7684\u5143\u7d20\u7c7b\u578b\u9700\u4e3a int[] \u7684\u5305\u88c5\u7c7b Integer[]\uff09\nInteger[] numbers = new Integer[] { 1, 3, 2, 5, 4 };\nList<Integer> list = new ArrayList<>(Arrays.asList(numbers));\n
    list.cpp
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u9700\u6ce8\u610f\uff0cC++ \u4e2d vector \u5373\u662f\u672c\u6587\u63cf\u8ff0\u7684 list\n// \u65e0\u521d\u59cb\u503c\nvector<int> list1;\n// \u6709\u521d\u59cb\u503c\nvector<int> list = { 1, 3, 2, 5, 4 };\n
    list.py
    \"\"\" \u521d\u59cb\u5316\u5217\u8868 \"\"\"\n# \u65e0\u521d\u59cb\u503c\nlist1: List[int] = []\n# \u6709\u521d\u59cb\u503c\nlist: List[int] = [1, 3, 2, 5, 4]\n
    list_test.go
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nlist1 := []int\n// \u6709\u521d\u59cb\u503c\nlist := []int{1, 3, 2, 5, 4}\n
    list.js
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nconst list1 = [];\n// \u6709\u521d\u59cb\u503c\nconst list = [1, 3, 2, 5, 4];\n
    list.ts
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nconst list1: number[] = [];\n// \u6709\u521d\u59cb\u503c\nconst list: number[] = [1, 3, 2, 5, 4];\n
    list.c
    \n
    list.cs
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nList<int> list1 = new ();\n// \u6709\u521d\u59cb\u503c\nint[] numbers = new int[] { 1, 3, 2, 5, 4 };\nList<int> list = numbers.ToList();\n
    list.swift
    /* \u521d\u59cb\u5316\u5217\u8868 */\n// \u65e0\u521d\u59cb\u503c\nlet list1: [Int] = []\n// \u6709\u521d\u59cb\u503c\nvar list = [1, 3, 2, 5, 4]\n
    list.zig
    // \u521d\u59cb\u5316\u5217\u8868\nvar list = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer list.deinit();\ntry list.appendSlice(&[_]i32{ 1, 3, 2, 5, 4 });\n

    \u8bbf\u95ee\u4e0e\u66f4\u65b0\u5143\u7d20\u3002\u5217\u8868\u7684\u5e95\u5c42\u6570\u636e\u7ed3\u6784\u662f\u6570\u7ec4\uff0c\u56e0\u6b64\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u5185\u8bbf\u95ee\u4e0e\u66f4\u65b0\u5143\u7d20\uff0c\u6548\u7387\u5f88\u9ad8\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u8bbf\u95ee\u5143\u7d20 */\nint num = list.get(1);  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist.set(1, 0);  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.cpp
    /* \u8bbf\u95ee\u5143\u7d20 */\nint num = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.py
    \"\"\" \u8bbf\u95ee\u5143\u7d20 \"\"\"\nnum: int = list[1]  # \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n\"\"\" \u66f4\u65b0\u5143\u7d20 \"\"\"\nlist[1] = 0    # \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list_test.go
    /* \u8bbf\u95ee\u5143\u7d20 */\nnum := list[1]  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0     // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.js
    /* \u8bbf\u95ee\u5143\u7d20 */\nconst num = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.ts
    /* \u8bbf\u95ee\u5143\u7d20 */\nconst num: number = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.c
    \n
    list.cs
    /* \u8bbf\u95ee\u5143\u7d20 */\nint num = list[1];  // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0;  // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.swift
    /* \u8bbf\u95ee\u5143\u7d20 */\nlet num = list[1] // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n/* \u66f4\u65b0\u5143\u7d20 */\nlist[1] = 0 // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0\n
    list.zig
    // \u8bbf\u95ee\u5143\u7d20\nvar num = list.items[1]; // \u8bbf\u95ee\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\n// \u66f4\u65b0\u5143\u7d20\nlist.items[1] = 0; // \u5c06\u7d22\u5f15 1 \u5904\u7684\u5143\u7d20\u66f4\u65b0\u4e3a 0  \n

    \u5728\u5217\u8868\u4e2d\u6dfb\u52a0\u3001\u63d2\u5165\u3001\u5220\u9664\u5143\u7d20\u3002\u76f8\u5bf9\u4e8e\u6570\u7ec4\uff0c\u5217\u8868\u53ef\u4ee5\u81ea\u7531\u5730\u6dfb\u52a0\u4e0e\u5220\u9664\u5143\u7d20\u3002\u5728\u5217\u8868\u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u4f46\u662f\u63d2\u5165\u4e0e\u5220\u9664\u5143\u7d20\u7684\u6548\u7387\u4ecd\u4e0e\u6570\u7ec4\u4e00\u6837\u4f4e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.clear();\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.add(1);\nlist.add(3);\nlist.add(2);\nlist.add(5);\nlist.add(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.add(3, 6);  // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist.remove(3);  // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.cpp
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.clear();\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.push_back(1);\nlist.push_back(3);\nlist.push_back(2);\nlist.push_back(5);\nlist.push_back(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.insert(list.begin() + 3, 6);  // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist.erase(list.begin() + 3);      // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.py
    \"\"\" \u6e05\u7a7a\u5217\u8868 \"\"\"\nlist.clear()\n\"\"\" \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 \"\"\"\nlist.append(1)\nlist.append(3)\nlist.append(2)\nlist.append(5)\nlist.append(4)\n\"\"\" \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 \"\"\"\nlist.insert(3, 6)  # \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n\"\"\" \u5220\u9664\u5143\u7d20 \"\"\"\nlist.pop(3)        # \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list_test.go
    /* \u6e05\u7a7a\u5217\u8868 */\nlist = nil\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist = append(list, 1)\nlist = append(list, 3)\nlist = append(list, 2)\nlist = append(list, 5)\nlist = append(list, 4)\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist = append(list[:3], append([]int{6}, list[3:]...)...) // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist = append(list[:3], list[4:]...) // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.js
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.length = 0;\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.push(1);\nlist.push(3);\nlist.push(2);\nlist.push(5);\nlist.push(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.splice(3, 0, 6);\n/* \u5220\u9664\u5143\u7d20 */\nlist.splice(3, 1);\n
    list.ts
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.length = 0;\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.push(1);\nlist.push(3);\nlist.push(2);\nlist.push(5);\nlist.push(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.splice(3, 0, 6);\n/* \u5220\u9664\u5143\u7d20 */\nlist.splice(3, 1);\n
    list.c
    \n
    list.cs
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.Clear();\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.Add(1);\nlist.Add(3);\nlist.Add(2);\nlist.Add(5);\nlist.Add(4);\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.Insert(3, 6);\n/* \u5220\u9664\u5143\u7d20 */\nlist.RemoveAt(3);\n
    list.swift
    /* \u6e05\u7a7a\u5217\u8868 */\nlist.removeAll()\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nlist.append(1)\nlist.append(3)\nlist.append(2)\nlist.append(5)\nlist.append(4)\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nlist.insert(6, at: 3) // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n/* \u5220\u9664\u5143\u7d20 */\nlist.remove(at: 3) // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n
    list.zig
    // \u6e05\u7a7a\u5217\u8868\nlist.clearRetainingCapacity();\n// \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\ntry list.append(1);\ntry list.append(3);\ntry list.append(2);\ntry list.append(5);\ntry list.append(4);\n// \u4e2d\u95f4\u63d2\u5165\u5143\u7d20\ntry list.insert(3, 6); // \u5728\u7d22\u5f15 3 \u5904\u63d2\u5165\u6570\u5b57 6\n// \u5220\u9664\u5143\u7d20\n_ = list.orderedRemove(3); // \u5220\u9664\u7d22\u5f15 3 \u5904\u7684\u5143\u7d20\n

    \u904d\u5386\u5217\u8868\u3002\u4e0e\u6570\u7ec4\u4e00\u6837\uff0c\u5217\u8868\u53ef\u4ee5\u4f7f\u7528\u7d22\u5f15\u904d\u5386\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528 for-each \u76f4\u63a5\u904d\u5386\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nint count = 0;\nfor (int i = 0; i < list.size(); i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (int n : list) {\ncount++;\n}\n
    list.cpp
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nint count = 0;\nfor (int i = 0; i < list.size(); i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (int n : list) {\ncount++;\n}\n
    list.py
    \"\"\" \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 \"\"\"\ncount: int = 0\nfor i in range(len(list)):\ncount += 1\n\"\"\" \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 \"\"\"\ncount: int = 0\nfor n in list:\ncount += 1\n
    list_test.go
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\ncount := 0\nfor i := 0; i < len(list); i++ {\ncount++\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0\nfor range list {\ncount++\n}\n
    list.js
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nlet count = 0;\nfor (let i = 0; i < list.length; i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (const n of list) {\ncount++;\n}\n
    list.ts
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nlet count = 0;\nfor (let i = 0; i < list.length; i++) {\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nfor (const n of list) {\ncount++;\n}\n
    list.c
    \n
    list.cs
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nint count = 0;\nfor (int i = 0; i < list.Count(); i++)\n{\ncount++;\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0;\nforeach (int n in list)\n{\ncount++;\n}\n
    list.swift
    /* \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868 */\nvar count = 0\nfor _ in list.indices {\ncount += 1\n}\n/* \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20 */\ncount = 0\nfor _ in list {\ncount += 1\n}\n
    list.zig
    // \u901a\u8fc7\u7d22\u5f15\u904d\u5386\u5217\u8868\nvar count: i32 = 0;\nvar i: i32 = 0;\nwhile (i < list.items.len) : (i += 1) {\ncount += 1;\n}\n// \u76f4\u63a5\u904d\u5386\u5217\u8868\u5143\u7d20\ncount = 0;\nfor (list.items) |_| {\ncount += 1;\n}\n

    \u62fc\u63a5\u4e24\u4e2a\u5217\u8868\u3002\u518d\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\u8868 list1 \uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5176\u4e2d\u4e00\u4e2a\u5217\u8868\u62fc\u63a5\u5230\u53e6\u4e00\u4e2a\u7684\u5c3e\u90e8\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nList<Integer> list1 = new ArrayList<>(Arrays.asList(new Integer[] { 6, 8, 7, 10, 9 }));\nlist.addAll(list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.cpp
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nvector<int> list1 = { 6, 8, 7, 10, 9 };\n// \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\nlist.insert(list.end(), list1.begin(), list1.end());\n
    list.py
    \"\"\" \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 \"\"\"\nlist1: List[int] = [6, 8, 7, 10, 9]\nlist += list1  # \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list_test.go
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nlist1 := []int{6, 8, 7, 10, 9}\nlist = append(list, list1...)  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.js
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nconst list1 = [6, 8, 7, 10, 9];\nlist.push(...list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.ts
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nconst list1: number[] = [6, 8, 7, 10, 9];\nlist.push(...list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.c
    \n
    list.cs
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nList<int> list1 = new() { 6, 8, 7, 10, 9 };\nlist.AddRange(list1);  // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.swift
    /* \u62fc\u63a5\u4e24\u4e2a\u5217\u8868 */\nlet list1 = [6, 8, 7, 10, 9]\nlist.append(contentsOf: list1) // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n
    list.zig
    // \u62fc\u63a5\u4e24\u4e2a\u5217\u8868\nvar list1 = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer list1.deinit();\ntry list1.appendSlice(&[_]i32{ 6, 8, 7, 10, 9 });\ntry list.insertSlice(list.items.len, list1.items); // \u5c06\u5217\u8868 list1 \u62fc\u63a5\u5230 list \u4e4b\u540e\n

    \u6392\u5e8f\u5217\u8868\u3002\u6392\u5e8f\u4e5f\u662f\u5e38\u7528\u7684\u65b9\u6cd5\u4e4b\u4e00\uff0c\u5b8c\u6210\u5217\u8868\u6392\u5e8f\u540e\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4f7f\u7528\u5728\u6570\u7ec4\u7c7b\u7b97\u6cd5\u9898\u4e2d\u7ecf\u5e38\u8003\u5bdf\u7684\u300c\u4e8c\u5206\u67e5\u627e\u300d\u548c\u300c\u53cc\u6307\u9488\u300d\u7b97\u6cd5\u4e86\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig list.java
    /* \u6392\u5e8f\u5217\u8868 */\nCollections.sort(list);  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.cpp
    /* \u6392\u5e8f\u5217\u8868 */\nsort(list.begin(), list.end());  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.py
    \"\"\" \u6392\u5e8f\u5217\u8868 \"\"\"\nlist.sort()  # \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list_test.go
    /* \u6392\u5e8f\u5217\u8868 */\nsort.Ints(list)  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.js
    /* \u6392\u5e8f\u5217\u8868 */  list.sort((a, b) => a - b);  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.ts
    /* \u6392\u5e8f\u5217\u8868 */\nlist.sort((a, b) => a - b);  // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.c
    \n
    list.cs
    /* \u6392\u5e8f\u5217\u8868 */\nlist.Sort(); // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.swift
    /* \u6392\u5e8f\u5217\u8868 */\nlist.sort() // \u6392\u5e8f\u540e\uff0c\u5217\u8868\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\n
    list.zig
    // \u6392\u5e8f\u5217\u8868\nstd.sort.sort(i32, list.items, {}, comptime std.sort.asc(i32));\n
    "},{"location":"chapter_array_and_linkedlist/list/#432","title":"4.3.2. \u00a0 \u5217\u8868\u7b80\u6613\u5b9e\u73b0 *","text":"

    \u4e3a\u4e86\u5e2e\u52a9\u52a0\u6df1\u5bf9\u5217\u8868\u7684\u7406\u89e3\uff0c\u6211\u4eec\u5728\u6b64\u63d0\u4f9b\u4e00\u4e2a\u5217\u8868\u7684\u7b80\u6613\u7248\u672c\u7684\u5b9e\u73b0\u3002\u9700\u8981\u5173\u6ce8\u4e09\u4e2a\u6838\u5fc3\u70b9\uff1a

    • \u521d\u59cb\u5bb9\u91cf\uff1a\u9009\u53d6\u4e00\u4e2a\u5408\u7406\u7684\u6570\u7ec4\u7684\u521d\u59cb\u5bb9\u91cf initialCapacity \u3002\u5728\u672c\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u9009\u62e9 10 \u4f5c\u4e3a\u521d\u59cb\u5bb9\u91cf\u3002
    • \u6570\u91cf\u8bb0\u5f55\uff1a\u9700\u8981\u58f0\u660e\u4e00\u4e2a\u53d8\u91cf size \uff0c\u7528\u6765\u8bb0\u5f55\u5217\u8868\u5f53\u524d\u6709\u591a\u5c11\u4e2a\u5143\u7d20\uff0c\u5e76\u968f\u7740\u5143\u7d20\u63d2\u5165\u4e0e\u5220\u9664\u5b9e\u65f6\u66f4\u65b0\u3002\u6839\u636e\u6b64\u53d8\u91cf\uff0c\u53ef\u4ee5\u5b9a\u4f4d\u5217\u8868\u7684\u5c3e\u90e8\uff0c\u4ee5\u53ca\u5224\u65ad\u662f\u5426\u9700\u8981\u6269\u5bb9\u3002
    • \u6269\u5bb9\u673a\u5236\uff1a\u63d2\u5165\u5143\u7d20\u6709\u53ef\u80fd\u5bfc\u81f4\u8d85\u51fa\u5217\u8868\u5bb9\u91cf\uff0c\u6b64\u65f6\u9700\u8981\u6269\u5bb9\u5217\u8868\uff0c\u65b9\u6cd5\u662f\u5efa\u7acb\u4e00\u4e2a\u66f4\u5927\u7684\u6570\u7ec4\u6765\u66ff\u6362\u5f53\u524d\u6570\u7ec4\u3002\u9700\u8981\u7ed9\u5b9a\u4e00\u4e2a\u6269\u5bb9\u500d\u6570 extendRatio \uff0c\u5728\u672c\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u89c4\u5b9a\u6bcf\u6b21\u5c06\u6570\u7ec4\u6269\u5bb9\u81f3\u4e4b\u524d\u7684 2 \u500d\u3002

    \u672c\u793a\u4f8b\u662f\u4e3a\u4e86\u5e2e\u52a9\u8bfb\u8005\u5bf9\u5982\u4f55\u5b9e\u73b0\u5217\u8868\u4ea7\u751f\u76f4\u89c2\u7684\u8ba4\u8bc6\u3002\u5b9e\u9645\u7f16\u7a0b\u8bed\u8a00\u4e2d\uff0c\u5217\u8868\u7684\u5b9e\u73b0\u8fdc\u6bd4\u4ee5\u4e0b\u4ee3\u7801\u590d\u6742\u4e14\u6807\u51c6\uff0c\u611f\u5174\u8da3\u7684\u8bfb\u8005\u53ef\u4ee5\u67e5\u9605\u6e90\u7801\u5b66\u4e60\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_list.java
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate int[] nums;           // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate int capacity = 10;    // \u5217\u8868\u5bb9\u91cf\nprivate int size = 0;         // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate int extendRatio = 2;  // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\npublic MyList() {\nnums = new int[capacity];\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\npublic int size() {\nreturn size;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\npublic int capacity() {\nreturn capacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\npublic int get(int index) {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\npublic void set(int index, int num) {\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\nnums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\npublic void add(int num) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size == capacity())\nextendCapacity();\nnums[size] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nsize++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\npublic void insert(int index, int num) {\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size == capacity())\nextendCapacity();\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int j = size - 1; j >= index; j--) {\nnums[j + 1] = nums[j];\n}\nnums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nsize++;\n}\n/* \u5220\u9664\u5143\u7d20 */\npublic int remove(int index) {\nif (index < 0 || index >= size)\nthrow new IndexOutOfBoundsException(\"\u7d22\u5f15\u8d8a\u754c\");\nint num = nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int j = index; j < size - 1; j++) {\nnums[j] = nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nsize--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\npublic void extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nnums = Arrays.copyOf(nums, capacity() * extendRatio);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\ncapacity = nums.length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\npublic int[] toArray() {\nint size = size();\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] nums = new int[size];\nfor (int i = 0; i < size; i++) {\nnums[i] = get(i);\n}\nreturn nums;\n}\n}\n
    my_list.cpp
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate:\nint* nums;                // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nint numsCapacity = 10;    // \u5217\u8868\u5bb9\u91cf\nint numsSize = 0;         // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nint extendRatio = 2;      // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nMyList() {\nnums = new int[numsCapacity];\n}\n/* \u6790\u6784\u65b9\u6cd5 */\n~MyList() {\ndelete[] nums;\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\nint size() {\nreturn numsSize;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\nint capacity() {\nreturn numsCapacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nint get(int index) {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nvoid set(int index, int num) {\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\nnums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nvoid add(int num) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size() == capacity())\nextendCapacity();\nnums[size()] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nvoid insert(int index, int num) {\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (size() == capacity())\nextendCapacity();\n// \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int j = size() - 1; j >= index; j--) {\nnums[j + 1] = nums[j];\n}\nnums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u5220\u9664\u5143\u7d20 */\nint remove(int index) {\nif (index < 0 || index >= size())\nthrow out_of_range(\"\u7d22\u5f15\u8d8a\u754c\");\nint num = nums[index];\n// \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int j = index; j < size() - 1; j++) {\nnums[j] = nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\nvoid extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size * extendRatio \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nint newCapacity = capacity() * extendRatio;\nint* tmp = nums;\nnums = new int[newCapacity];\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nfor (int i = 0; i < size(); i++) {\nnums[i] = tmp[i];\n}\n// \u91ca\u653e\u5185\u5b58\ndelete[] tmp;\nnumsCapacity = newCapacity;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a Vector \u7528\u4e8e\u6253\u5370 */\nvector<int> toVector() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvector<int> vec(size());\nfor (int i = 0; i < size(); i++) {\nvec[i] = nums[i];\n}\nreturn vec;\n}\n};\n
    my_list.py
    class MyList:\n\"\"\" \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__capacity: int = 10                       # \u5217\u8868\u5bb9\u91cf\nself.__nums: List[int] = [0] * self.__capacity  # \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nself.__size: int = 0                            # \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nself.__extend_ratio: int = 2                    # \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09 \"\"\"\nreturn self.__size\ndef capacity(self) -> int:\n\"\"\" \u83b7\u53d6\u5217\u8868\u5bb9\u91cf \"\"\"\nreturn self.__capacity\ndef get(self, index: int) -> int:\n\"\"\" \u8bbf\u95ee\u5143\u7d20 \"\"\"\n# \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\nreturn self.__nums[index]\ndef set(self, num: int, index: int) -> None:\n\"\"\" \u66f4\u65b0\u5143\u7d20 \"\"\"\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\nself.__nums[index] = num\ndef add(self, num: int) -> None:\n\"\"\" \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 \"\"\"\n# \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif self.size() == self.capacity():\nself.extend_capacity()\nself.__nums[self.__size] = num\nself.__size += 1\ndef insert(self, num: int, index: int) -> None:\n\"\"\" \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 \"\"\"\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\n# \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif self.__size == self.capacity():\nself.extend_capacity()\n# \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor j in range(self.__size - 1, index - 1, -1):\nself.__nums[j + 1] = self.__nums[j]\nself.__nums[index] = num\n# \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.__size += 1\ndef remove(self, index: int) -> int:\n\"\"\" \u5220\u9664\u5143\u7d20 \"\"\"\nassert index >= 0 and index < self.__size, \"\u7d22\u5f15\u8d8a\u754c\"\nnum = self.__nums[index]\n# \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor j in range(index, self.__size - 1):\nself.__nums[j] = self.__nums[j + 1]\n# \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.__size -= 1\n# \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num\ndef extend_capacity(self) -> None:\n\"\"\" \u5217\u8868\u6269\u5bb9 \"\"\"\n# \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a self.__size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nself.__nums = self.__nums + [0] * self.capacity() * (self.__extend_ratio - 1)\n# \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nself.__capacity = len(self.__nums)\ndef to_array(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u6709\u6548\u957f\u5ea6\u7684\u5217\u8868 \"\"\"\nreturn self.__nums[:self.__size]\n
    my_list.go
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\ntype myList struct {\nnumsCapacity int\nnums         []int\nnumsSize     int\nextendRatio  int\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nfunc newMyList() *myList {\nreturn &myList{\nnumsCapacity: 10,              // \u5217\u8868\u5bb9\u91cf\nnums:         make([]int, 10), // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nnumsSize:     0,               // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nextendRatio:  2,               // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n}\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09 */\nfunc (l *myList) size() int {\nreturn l.numsSize\n}\n/*  \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\nfunc (l *myList) capacity() int {\nreturn l.numsCapacity\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nfunc (l *myList) get(index int) int {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nreturn l.nums[index]\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nfunc (l *myList) set(num, index int) {\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nl.nums[index] = num\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nfunc (l *myList) add(num int) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif l.numsSize == l.numsCapacity {\nl.extendCapacity()\n}\nl.nums[l.numsSize] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nl.numsSize++\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nfunc (l *myList) insert(num, index int) {\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif l.numsSize == l.numsCapacity {\nl.extendCapacity()\n}\n// \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor j := l.numsSize - 1; j >= index; j-- {\nl.nums[j+1] = l.nums[j]\n}\nl.nums[index] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nl.numsSize++\n}\n/* \u5220\u9664\u5143\u7d20 */\nfunc (l *myList) remove(index int) int {\nif index < 0 || index >= l.numsSize {\npanic(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nnum := l.nums[index]\n// \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor j := index; j < l.numsSize-1; j++ {\nl.nums[j] = l.nums[j+1]\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nl.numsSize--\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num\n}\n/* \u5217\u8868\u6269\u5bb9 */\nfunc (l *myList) extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a self.__size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nl.nums = append(l.nums, make([]int, l.numsCapacity*(l.extendRatio-1))...)\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nl.numsCapacity = len(l.nums)\n}\n/* \u8fd4\u56de\u6709\u6548\u957f\u5ea6\u7684\u5217\u8868 */\nfunc (l *myList) toArray() []int {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nreturn l.nums[:l.numsSize]\n}\n
    my_list.js
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\n#nums = new Array(); // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\n#capacity = 10; // \u5217\u8868\u5bb9\u91cf\n#size = 0; // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\n#extendRatio = 2; // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor() {\nthis.#nums = new Array(this.#capacity);\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\nsize() {\nreturn this.#size;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\ncapacity() {\nreturn this.#capacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nget(index) {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nreturn this.#nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nset(index, num) {\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nthis.#nums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nadd(num) {\n// \u5982\u679c\u957f\u5ea6\u7b49\u4e8e\u5bb9\u91cf\uff0c\u5219\u9700\u8981\u6269\u5bb9\nif (this.#size === this.#capacity) {\nthis.extendCapacity();\n}\n// \u5c06\u65b0\u5143\u7d20\u6dfb\u52a0\u5230\u5217\u8868\u5c3e\u90e8\nthis.#nums[this.#size] = num;\nthis.#size++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\ninsert(index, num) {\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (this.#size === this.#capacity) {\nthis.extendCapacity();\n}\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let j = this.#size - 1; j >= index; j--) {\nthis.#nums[j + 1] = this.#nums[j];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis.#nums[index] = num;\nthis.#size++;\n}\n/* \u5220\u9664\u5143\u7d20 */\nremove(index) {\nif (index < 0 || index >= this.#size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nlet num = this.#nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let j = index; j < this.#size - 1; j++) {\nthis.#nums[j] = this.#nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis.#size--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\nextendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nthis.#nums = this.#nums.concat(\nnew Array(this.capacity() * (this.#extendRatio - 1))\n);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nthis.#capacity = this.#nums.length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\ntoArray() {\nlet size = this.size();\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst nums = new Array(size);\nfor (let i = 0; i < size; i++) {\nnums[i] = this.get(i);\n}\nreturn nums;\n}\n}\n
    my_list.ts
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate nums: Array<number>; // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate _capacity: number = 10; // \u5217\u8868\u5bb9\u91cf\nprivate _size: number = 0; // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate extendRatio: number = 2; // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor() {\nthis.nums = new Array(this._capacity);\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\npublic size(): number {\nreturn this._size;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\npublic capacity(): number {\nreturn this._capacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\npublic get(index: number): number {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nreturn this.nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\npublic set(index: number, num: number): void {\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nthis.nums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\npublic add(num: number): void {\n// \u5982\u679c\u957f\u5ea6\u7b49\u4e8e\u5bb9\u91cf\uff0c\u5219\u9700\u8981\u6269\u5bb9\nif (this._size === this._capacity)\nthis.extendCapacity();\n// \u5c06\u65b0\u5143\u7d20\u6dfb\u52a0\u5230\u5217\u8868\u5c3e\u90e8\nthis.nums[this._size] = num;\nthis._size++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\npublic insert(index: number, num: number): void {\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (this._size === this._capacity) {\nthis.extendCapacity();\n}\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (let j = this._size - 1; j >= index; j--) {\nthis.nums[j + 1] = this.nums[j];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis.nums[index] = num;\nthis._size++;\n}\n/* \u5220\u9664\u5143\u7d20 */\npublic remove(index: number): number {\nif (index < 0 || index >= this._size)\nthrow new Error('\u7d22\u5f15\u8d8a\u754c');\nlet num = this.nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (let j = index; j < this._size - 1; j++) {\nthis.nums[j] = this.nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nthis._size--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\npublic extendCapacity(): void {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nthis.nums = this.nums.concat(\nnew Array(this.capacity() * (this.extendRatio - 1))\n);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nthis._capacity = this.nums.length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\npublic toArray(): number[] {\nlet size = this.size();\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst nums = new Array(size);\nfor (let i = 0; i < size; i++) {\nnums[i] = this.get(i);\n}\nreturn nums;\n}\n}\n
    my_list.c
    [class]{myList}-[func]{}\n
    my_list.cs
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList\n{\nprivate int[] nums;           // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate int numsCapacity = 10;    // \u5217\u8868\u5bb9\u91cf\nprivate int numsSize = 0;         // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate int extendRatio = 2;  // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\npublic MyList()\n{\nnums = new int[numsCapacity];\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\npublic int size()\n{\nreturn numsSize;\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\npublic int capacity()\n{\nreturn numsCapacity;\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\npublic int get(int index)\n{\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn nums[index];\n}\n/* \u66f4\u65b0\u5143\u7d20 */\npublic void set(int index, int num)\n{\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\nnums[index] = num;\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\npublic void add(int num)\n{\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (numsSize == numsCapacity)\nextendCapacity();\nnums[numsSize] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\npublic void insert(int index, int num)\n{\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (numsSize == numsCapacity)\nextendCapacity();\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor (int j = numsSize - 1; j >= index; j--)\n{\nnums[j + 1] = nums[j];\n}\nnums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize++;\n}\n/* \u5220\u9664\u5143\u7d20 */\npublic int remove(int index)\n{\nif (index < 0 || index >= numsSize)\nthrow new IndexOutOfRangeException(\"\u7d22\u5f15\u8d8a\u754c\");\nint num = nums[index];\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor (int j = index; j < numsSize - 1; j++)\n{\nnums[j] = nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nnumsSize--;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n/* \u5217\u8868\u6269\u5bb9 */\npublic void extendCapacity()\n{\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a numsCapacity * extendRatio \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nSystem.Array.Resize(ref nums, numsCapacity * extendRatio);\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nnumsCapacity = nums.Length;\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\npublic int[] toArray()\n{\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] nums = new int[numsSize];\nfor (int i = 0; i < numsSize; i++)\n{\nnums[i] = get(i);\n}\nreturn nums;\n}\n}\n
    my_list.swift
    /* \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0 */\nclass MyList {\nprivate var nums: [Int] // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nprivate var _capacity = 10 // \u5217\u8868\u5bb9\u91cf\nprivate var _size = 0 // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nprivate let extendRatio = 2 // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\n/* \u6784\u9020\u65b9\u6cd5 */\ninit() {\nnums = Array(repeating: 0, count: _capacity)\n}\n/* \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09*/\nfunc size() -> Int {\n_size\n}\n/* \u83b7\u53d6\u5217\u8868\u5bb9\u91cf */\nfunc capacity() -> Int {\n_capacity\n}\n/* \u8bbf\u95ee\u5143\u7d20 */\nfunc get(index: Int) -> Int {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u9519\u8bef\uff0c\u4e0b\u540c\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nreturn nums[index]\n}\n/* \u66f4\u65b0\u5143\u7d20 */\nfunc set(index: Int, num: Int) {\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nnums[index] = num\n}\n/* \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20 */\nfunc add(num: Int) {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif _size == _capacity {\nextendCapacity()\n}\nnums[_size] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\n_size += 1\n}\n/* \u4e2d\u95f4\u63d2\u5165\u5143\u7d20 */\nfunc insert(index: Int, num: Int) {\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif _size == _capacity {\nextendCapacity()\n}\n// \u5c06\u7d22\u5f15 index \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfor j in sequence(first: _size - 1, next: { $0 >= index + 1 ? $0 - 1 : nil }) {\nnums[j + 1] = nums[j]\n}\nnums[index] = num\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\n_size += 1\n}\n/* \u5220\u9664\u5143\u7d20 */\n@discardableResult\nfunc remove(index: Int) -> Int {\nif index < 0 || index >= _size {\nfatalError(\"\u7d22\u5f15\u8d8a\u754c\")\n}\nlet num = nums[index]\n// \u5c06\u7d22\u5f15 index \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nfor j in index ..< (_size - 1) {\nnums[j] = nums[j + 1]\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\n_size -= 1\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num\n}\n/* \u5217\u8868\u6269\u5bb9 */\nfunc extendCapacity() {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nnums = nums + Array(repeating: 0, count: _capacity * (extendRatio - 1))\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\n_capacity = nums.count\n}\n/* \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4 */\nfunc toArray() -> [Int] {\nvar nums = Array(repeating: 0, count: _size)\nfor i in 0 ..< _size {\nnums[i] = get(index: i)\n}\nreturn nums\n}\n}\n
    my_list.zig
    // \u5217\u8868\u7c7b\u7b80\u6613\u5b9e\u73b0\nfn MyList(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nnums: []T = undefined,                        // \u6570\u7ec4\uff08\u5b58\u50a8\u5217\u8868\u5143\u7d20\uff09\nnumsCapacity: usize = 10,                     // \u5217\u8868\u5bb9\u91cf\nnumSize: usize = 0,                           // \u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\nextendRatio: usize = 2,                       // \u6bcf\u6b21\u5217\u8868\u6269\u5bb9\u7684\u500d\u6570\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined, // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u5217\u8868\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.nums = try self.mem_allocator.alloc(T, self.numsCapacity);\nstd.mem.set(T, self.nums, @as(T, 0));\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u5217\u8868\u957f\u5ea6\uff08\u5373\u5f53\u524d\u5143\u7d20\u6570\u91cf\uff09\npub fn size(self: *Self) usize {\nreturn self.numSize;\n}\n// \u83b7\u53d6\u5217\u8868\u5bb9\u91cf\npub fn capacity(self: *Self) usize {\nreturn self.numsCapacity;\n}\n// \u8bbf\u95ee\u5143\u7d20\npub fn get(self: *Self, index: usize) T {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\nreturn self.nums[index];\n}  // \u66f4\u65b0\u5143\u7d20\npub fn set(self: *Self, index: usize, num: T) void {\n// \u7d22\u5f15\u5982\u679c\u8d8a\u754c\u5219\u629b\u51fa\u5f02\u5e38\uff0c\u4e0b\u540c\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\nself.nums[index] = num;\n}  // \u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\npub fn add(self: *Self, num: T) !void {\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (self.size() == self.capacity()) try self.extendCapacity();\nself.nums[self.size()] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.numSize += 1;\n}  // \u4e2d\u95f4\u63d2\u5165\u5143\u7d20\npub fn insert(self: *Self, index: usize, num: T) !void {\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\n// \u5143\u7d20\u6570\u91cf\u8d85\u51fa\u5bb9\u91cf\u65f6\uff0c\u89e6\u53d1\u6269\u5bb9\u673a\u5236\nif (self.size() == self.capacity()) try self.extendCapacity();\n// \u7d22\u5f15 i \u4ee5\u53ca\u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nvar j = self.size() - 1;\nwhile (j >= index) : (j -= 1) {\nself.nums[j + 1] = self.nums[j];\n}\nself.nums[index] = num;\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.numSize += 1;\n}\n// \u5220\u9664\u5143\u7d20\npub fn remove(self: *Self, index: usize) T {\nif (index < 0 or index >= self.size()) @panic(\"\u7d22\u5f15\u8d8a\u754c\");\nvar num = self.nums[index];\n// \u7d22\u5f15 i \u4e4b\u540e\u7684\u5143\u7d20\u90fd\u5411\u524d\u79fb\u52a8\u4e00\u4f4d\nvar j = index;\nwhile (j < self.size() - 1) : (j += 1) {\nself.nums[j] = self.nums[j + 1];\n}\n// \u66f4\u65b0\u5143\u7d20\u6570\u91cf\nself.numSize -= 1;\n// \u8fd4\u56de\u88ab\u5220\u9664\u5143\u7d20\nreturn num;\n}\n// \u5217\u8868\u6269\u5bb9\npub fn extendCapacity(self: *Self) !void {\n// \u65b0\u5efa\u4e00\u4e2a\u957f\u5ea6\u4e3a size * extendRatio \u7684\u6570\u7ec4\uff0c\u5e76\u5c06\u539f\u6570\u7ec4\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\nvar newCapacity = self.capacity() * self.extendRatio;\nvar extend = try self.mem_allocator.alloc(T, newCapacity);\nstd.mem.set(T, extend, @as(T, 0));\n// \u5c06\u539f\u6570\u7ec4\u4e2d\u7684\u6240\u6709\u5143\u7d20\u590d\u5236\u5230\u65b0\u6570\u7ec4\nstd.mem.copy(T, extend, self.nums);\nself.nums = extend;\n// \u66f4\u65b0\u5217\u8868\u5bb9\u91cf\nself.numsCapacity = newCapacity;\n}\n// \u5c06\u5217\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar nums = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, nums, @as(T, 0));\nfor (nums) |*num, i| {\nnum.* = self.get(i);\n}\nreturn nums;\n}\n};\n}\n
    "},{"location":"chapter_array_and_linkedlist/summary/","title":"4.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u6570\u7ec4\u548c\u94fe\u8868\u662f\u4e24\u79cd\u57fa\u672c\u6570\u636e\u7ed3\u6784\uff0c\u4ee3\u8868\u4e86\u6570\u636e\u5728\u8ba1\u7b97\u673a\u5185\u5b58\u4e2d\u7684\u4e24\u79cd\u5b58\u50a8\u65b9\u5f0f\uff0c\u5373\u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8\u548c\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8\u3002\u4e24\u8005\u7684\u4f18\u70b9\u4e0e\u7f3a\u70b9\u5448\u73b0\u51fa\u6b64\u6d88\u5f7c\u957f\u7684\u5173\u7cfb\u3002
    • \u6570\u7ec4\u652f\u6301\u968f\u673a\u8bbf\u95ee\u3001\u5185\u5b58\u7a7a\u95f4\u5360\u7528\u5c0f\uff1b\u4f46\u63d2\u5165\u4e0e\u5220\u9664\u5143\u7d20\u6548\u7387\u4f4e\uff0c\u4e14\u521d\u59cb\u5316\u540e\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002
    • \u94fe\u8868\u53ef\u901a\u8fc7\u66f4\u6539\u6307\u9488\u5b9e\u73b0\u9ad8\u6548\u7684\u7ed3\u70b9\u63d2\u5165\u4e0e\u5220\u9664\uff0c\u5e76\u4e14\u53ef\u4ee5\u7075\u6d3b\u5730\u4fee\u6539\u957f\u5ea6\uff1b\u4f46\u7ed3\u70b9\u8bbf\u95ee\u6548\u7387\u4f4e\u3001\u5360\u7528\u5185\u5b58\u591a\u3002\u5e38\u89c1\u7684\u94fe\u8868\u7c7b\u578b\u6709\u5355\u5411\u94fe\u8868\u3001\u5faa\u73af\u94fe\u8868\u3001\u53cc\u5411\u94fe\u8868\u3002
    • \u5217\u8868\u53c8\u79f0\u52a8\u6001\u6570\u7ec4\uff0c\u662f\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u4e00\u79cd\u6570\u636e\u7ed3\u6784\uff0c\u5176\u4fdd\u5b58\u4e86\u6570\u7ec4\u7684\u4f18\u52bf\uff0c\u4e14\u53ef\u4ee5\u7075\u6d3b\u6539\u53d8\u957f\u5ea6\u3002\u5217\u8868\u7684\u51fa\u73b0\u5927\u5927\u63d0\u5347\u4e86\u6570\u7ec4\u7684\u5b9e\u7528\u6027\uff0c\u4f46\u526f\u4f5c\u7528\u662f\u4f1a\u9020\u6210\u90e8\u5206\u5185\u5b58\u7a7a\u95f4\u6d6a\u8d39\u3002
    • \u4e0b\u8868\u603b\u7ed3\u5bf9\u6bd4\u4e86\u6570\u7ec4\u4e0e\u94fe\u8868\u7684\u5404\u9879\u7279\u6027\u3002
    \u6570\u7ec4 \u94fe\u8868 \u5b58\u50a8\u65b9\u5f0f \u8fde\u7eed\u5185\u5b58\u7a7a\u95f4 \u79bb\u6563\u5185\u5b58\u7a7a\u95f4 \u6570\u636e\u7ed3\u6784\u957f\u5ea6 \u957f\u5ea6\u4e0d\u53ef\u53d8 \u957f\u5ea6\u53ef\u53d8 \u5185\u5b58\u4f7f\u7528\u7387 \u5360\u7528\u5185\u5b58\u5c11\u3001\u7f13\u5b58\u5c40\u90e8\u6027\u597d \u5360\u7528\u5185\u5b58\u591a \u4f18\u52bf\u64cd\u4f5c \u968f\u673a\u8bbf\u95ee \u63d2\u5165\u3001\u5220\u9664

    \u7f13\u5b58\u5c40\u90e8\u6027\u7684\u7b80\u5355\u89e3\u91ca

    \u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u6570\u636e\u8bfb\u5199\u901f\u5ea6\u6392\u5e8f\u662f\u201c\u786c\u76d8 < \u5185\u5b58 < CPU \u7f13\u5b58\u201d\u3002\u5f53\u6211\u4eec\u8bbf\u95ee\u6570\u7ec4\u5143\u7d20\u65f6\uff0c\u8ba1\u7b97\u673a\u4e0d\u4ec5\u4f1a\u52a0\u8f7d\u5b83\uff0c\u8fd8\u4f1a\u7f13\u5b58\u5176\u5468\u56f4\u7684\u5176\u5b83\u6570\u636e\uff0c\u4ece\u800c\u501f\u52a9\u9ad8\u901f\u7f13\u5b58\u6765\u63d0\u5347\u540e\u7eed\u64cd\u4f5c\u7684\u6267\u884c\u901f\u5ea6\u3002\u94fe\u8868\u5219\u4e0d\u7136\uff0c\u8ba1\u7b97\u673a\u53ea\u80fd\u6328\u4e2a\u5730\u7f13\u5b58\u5404\u4e2a\u7ed3\u70b9\uff0c\u8fd9\u6837\u7684\u591a\u6b21\u201c\u642c\u8fd0\u201d\u964d\u4f4e\u4e86\u6574\u4f53\u6548\u7387\u3002

    • \u4e0b\u8868\u5bf9\u6bd4\u4e86\u6570\u7ec4\u4e0e\u94fe\u8868\u7684\u5404\u79cd\u64cd\u4f5c\u6548\u7387\u3002
    \u64cd\u4f5c \u6570\u7ec4 \u94fe\u8868 \u8bbf\u95ee\u5143\u7d20 \\(O(1)\\) \\(O(N)\\) \u6dfb\u52a0\u5143\u7d20 \\(O(N)\\) \\(O(1)\\) \u5220\u9664\u5143\u7d20 \\(O(N)\\) \\(O(1)\\)"},{"location":"chapter_computational_complexity/performance_evaluation/","title":"2.1. \u00a0 \u7b97\u6cd5\u6548\u7387\u8bc4\u4f30","text":""},{"location":"chapter_computational_complexity/performance_evaluation/#211","title":"2.1.1. \u00a0 \u7b97\u6cd5\u8bc4\u4ef7\u7ef4\u5ea6","text":"

    \u5728\u5f00\u59cb\u5b66\u4e60\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u4eec\u9996\u5148\u8981\u60f3\u6e05\u695a\u7b97\u6cd5\u7684\u8bbe\u8ba1\u76ee\u6807\u662f\u4ec0\u4e48\uff0c\u6216\u8005\u8bf4\uff0c\u5982\u4f55\u6765\u8bc4\u5224\u7b97\u6cd5\u7684\u597d\u4e0e\u574f\u3002\u6574\u4f53\u4e0a\u770b\uff0c\u6211\u4eec\u8bbe\u8ba1\u7b97\u6cd5\u65f6\u8ffd\u6c42\u4e24\u4e2a\u5c42\u9762\u7684\u76ee\u6807\u3002

    1. \u627e\u5230\u95ee\u9898\u89e3\u6cd5\u3002\u7b97\u6cd5\u9700\u8981\u80fd\u591f\u5728\u89c4\u5b9a\u7684\u8f93\u5165\u8303\u56f4\u4e0b\uff0c\u53ef\u9760\u5730\u6c42\u5f97\u95ee\u9898\u7684\u6b63\u786e\u89e3\u3002
    2. \u5bfb\u6c42\u6700\u4f18\u89e3\u6cd5\u3002\u540c\u4e00\u4e2a\u95ee\u9898\u53ef\u80fd\u5b58\u5728\u591a\u79cd\u89e3\u6cd5\uff0c\u800c\u6211\u4eec\u5e0c\u671b\u7b97\u6cd5\u6548\u7387\u5c3d\u53ef\u80fd\u7684\u9ad8\u3002

    \u6362\u8a00\u4e4b\uff0c\u5728\u53ef\u4ee5\u89e3\u51b3\u95ee\u9898\u7684\u524d\u63d0\u4e0b\uff0c\u7b97\u6cd5\u6548\u7387\u5219\u662f\u4e3b\u8981\u8bc4\u4ef7\u7ef4\u5ea6\uff0c\u5305\u62ec\uff1a

    • \u65f6\u95f4\u6548\u7387\uff0c\u5373\u7b97\u6cd5\u7684\u8fd0\u884c\u901f\u5ea6\u7684\u5feb\u6162\u3002
    • \u7a7a\u95f4\u6548\u7387\uff0c\u5373\u7b97\u6cd5\u5360\u7528\u7684\u5185\u5b58\u7a7a\u95f4\u5927\u5c0f\u3002

    \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u8ffd\u6c42\u201c\u8fd0\u884c\u901f\u5ea6\u5feb\u3001\u5360\u7528\u5185\u5b58\u5c11\u201d\uff0c\u800c\u5982\u4f55\u53bb\u8bc4\u4ef7\u7b97\u6cd5\u6548\u7387\u5219\u662f\u975e\u5e38\u91cd\u8981\u7684\u95ee\u9898\uff0c\u56e0\u4e3a\u53ea\u6709\u77e5\u9053\u5982\u4f55\u8bc4\u4ef7\u7b97\u6cd5\uff0c\u624d\u80fd\u53bb\u505a\u7b97\u6cd5\u4e4b\u95f4\u7684\u5bf9\u6bd4\u5206\u6790\uff0c\u4ee5\u53ca\u4f18\u5316\u7b97\u6cd5\u8bbe\u8ba1\u3002

    "},{"location":"chapter_computational_complexity/performance_evaluation/#212","title":"2.1.2. \u00a0 \u6548\u7387\u8bc4\u4f30\u65b9\u6cd5","text":""},{"location":"chapter_computational_complexity/performance_evaluation/#_1","title":"\u5b9e\u9645\u6d4b\u8bd5","text":"

    \u5047\u8bbe\u6211\u4eec\u73b0\u5728\u6709\u7b97\u6cd5 A \u548c \u7b97\u6cd5 B \uff0c\u90fd\u80fd\u591f\u89e3\u51b3\u540c\u4e00\u95ee\u9898\uff0c\u73b0\u5728\u9700\u8981\u5bf9\u6bd4\u4e24\u4e2a\u7b97\u6cd5\u4e4b\u95f4\u7684\u6548\u7387\u3002\u6211\u4eec\u80fd\u591f\u60f3\u5230\u7684\u6700\u76f4\u63a5\u7684\u65b9\u5f0f\uff0c\u5c31\u662f\u627e\u4e00\u53f0\u8ba1\u7b97\u673a\uff0c\u628a\u4e24\u4e2a\u7b97\u6cd5\u90fd\u5b8c\u6574\u8dd1\u4e00\u904d\uff0c\u5e76\u76d1\u63a7\u8bb0\u5f55\u8fd0\u884c\u65f6\u95f4\u548c\u5185\u5b58\u5360\u7528\u60c5\u51b5\u3002\u8fd9\u79cd\u8bc4\u4f30\u65b9\u5f0f\u80fd\u591f\u53cd\u6620\u771f\u5b9e\u60c5\u51b5\uff0c\u4f46\u662f\u4e5f\u5b58\u5728\u5f88\u5927\u7684\u786c\u4f24\u3002

    \u96be\u4ee5\u6392\u9664\u6d4b\u8bd5\u73af\u5883\u7684\u5e72\u6270\u56e0\u7d20\u3002\u786c\u4ef6\u914d\u7f6e\u4f1a\u5f71\u54cd\u5230\u7b97\u6cd5\u7684\u6027\u80fd\u8868\u73b0\u3002\u4f8b\u5982\uff0c\u5728\u67d0\u53f0\u8ba1\u7b97\u673a\u4e2d\uff0c\u7b97\u6cd5 A \u6bd4\u7b97\u6cd5 B \u8fd0\u884c\u65f6\u95f4\u66f4\u77ed\uff1b\u4f46\u6362\u5230\u53e6\u4e00\u53f0\u914d\u7f6e\u4e0d\u540c\u7684\u8ba1\u7b97\u673a\u4e2d\uff0c\u53ef\u80fd\u4f1a\u5f97\u5230\u76f8\u53cd\u7684\u6d4b\u8bd5\u7ed3\u679c\u3002\u8fd9\u610f\u5473\u7740\u6211\u4eec\u9700\u8981\u5728\u5404\u79cd\u673a\u5668\u4e0a\u5c55\u5f00\u6d4b\u8bd5\uff0c\u800c\u8fd9\u662f\u4e0d\u73b0\u5b9e\u7684\u3002

    \u5c55\u5f00\u5b8c\u6574\u6d4b\u8bd5\u975e\u5e38\u8017\u8d39\u8d44\u6e90\u3002\u968f\u7740\u8f93\u5165\u6570\u636e\u91cf\u7684\u5927\u5c0f\u53d8\u5316\uff0c\u7b97\u6cd5\u4f1a\u5448\u73b0\u51fa\u4e0d\u540c\u7684\u6548\u7387\u8868\u73b0\u3002\u6bd4\u5982\uff0c\u6709\u53ef\u80fd\u8f93\u5165\u6570\u636e\u91cf\u8f83\u5c0f\u65f6\uff0c\u7b97\u6cd5 A \u8fd0\u884c\u65f6\u95f4\u77ed\u4e8e\u7b97\u6cd5 B \uff0c\u800c\u5728\u8f93\u5165\u6570\u636e\u91cf\u8f83\u5927\u65f6\uff0c\u6d4b\u8bd5\u7ed3\u679c\u622a\u7136\u76f8\u53cd\u3002\u56e0\u6b64\uff0c\u82e5\u60f3\u8981\u8fbe\u5230\u5177\u6709\u8bf4\u670d\u529b\u7684\u5bf9\u6bd4\u7ed3\u679c\uff0c\u90a3\u4e48\u9700\u8981\u8f93\u5165\u5404\u79cd\u4f53\u91cf\u6570\u636e\uff0c\u8fd9\u6837\u7684\u6d4b\u8bd5\u9700\u8981\u5360\u7528\u5927\u91cf\u8ba1\u7b97\u8d44\u6e90\u3002

    "},{"location":"chapter_computational_complexity/performance_evaluation/#_2","title":"\u7406\u8bba\u4f30\u7b97","text":"

    \u65e2\u7136\u5b9e\u9645\u6d4b\u8bd5\u5177\u6709\u5f88\u5927\u7684\u5c40\u9650\u6027\uff0c\u90a3\u4e48\u6211\u4eec\u662f\u5426\u53ef\u4ee5\u4ec5\u901a\u8fc7\u4e00\u4e9b\u8ba1\u7b97\uff0c\u5c31\u83b7\u77e5\u7b97\u6cd5\u7684\u6548\u7387\u6c34\u5e73\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6211\u4eec\u5c06\u6b64\u4f30\u7b97\u65b9\u6cd5\u79f0\u4e3a\u300c\u590d\u6742\u5ea6\u5206\u6790 Complexity Analysis\u300d\u6216\u300c\u6e10\u8fd1\u590d\u6742\u5ea6\u5206\u6790 Asymptotic Complexity Analysis\u300d\u3002

    \u590d\u6742\u5ea6\u5206\u6790\u8bc4\u4f30\u7684\u662f\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u968f\u7740\u8f93\u5165\u6570\u636e\u91cf\u589e\u591a\u65f6\u7684\u589e\u957f\u8d8b\u52bf\u3002\u8fd9\u53e5\u8bdd\u6709\u4e9b\u62d7\u53e3\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5176\u5206\u4e3a\u4e09\u4e2a\u91cd\u70b9\u6765\u7406\u89e3\uff1a

    • \u201c\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u201d\u53ef\u5206\u4e3a\u201c\u8fd0\u884c\u65f6\u95f4\u201d\u548c\u201c\u5360\u7528\u7a7a\u95f4\u201d\uff0c\u8fdb\u800c\u53ef\u5c06\u590d\u6742\u5ea6\u5206\u4e3a\u300c\u65f6\u95f4\u590d\u6742\u5ea6 Time Complexity\u300d\u548c\u300c\u7a7a\u95f4\u590d\u6742\u5ea6 Space Complexity\u300d\u3002
    • \u201c\u968f\u7740\u8f93\u5165\u6570\u636e\u91cf\u589e\u591a\u65f6\u201d\u4ee3\u8868\u590d\u6742\u5ea6\u4e0e\u8f93\u5165\u6570\u636e\u91cf\u6709\u5173\uff0c\u53cd\u6620\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u4e0e\u8f93\u5165\u6570\u636e\u91cf\u4e4b\u95f4\u7684\u5173\u7cfb\uff1b
    • \u201c\u589e\u957f\u8d8b\u52bf\u201d\u8868\u793a\u590d\u6742\u5ea6\u5206\u6790\u4e0d\u5173\u5fc3\u7b97\u6cd5\u5177\u4f53\u4f7f\u7528\u4e86\u591a\u5c11\u65f6\u95f4\u6216\u5360\u7528\u4e86\u591a\u5c11\u7a7a\u95f4\uff0c\u800c\u662f\u7ed9\u51fa\u4e00\u79cd\u201c\u8d8b\u52bf\u6027\u5206\u6790\u201d\uff1b

    \u590d\u6742\u5ea6\u5206\u6790\u514b\u670d\u4e86\u5b9e\u9645\u6d4b\u8bd5\u65b9\u6cd5\u7684\u5f0a\u7aef\u3002\u4e00\u662f\u72ec\u7acb\u4e8e\u6d4b\u8bd5\u73af\u5883\uff0c\u5206\u6790\u7ed3\u679c\u9002\u7528\u4e8e\u6240\u6709\u8fd0\u884c\u5e73\u53f0\u3002\u4e8c\u662f\u53ef\u4ee5\u4f53\u73b0\u4e0d\u540c\u6570\u636e\u91cf\u4e0b\u7684\u7b97\u6cd5\u6548\u7387\uff0c\u5c24\u5176\u662f\u53ef\u4ee5\u53cd\u6620\u5927\u6570\u636e\u91cf\u4e0b\u7684\u7b97\u6cd5\u6027\u80fd\u3002

    \u5982\u679c\u611f\u89c9\u5bf9\u590d\u6742\u5ea6\u5206\u6790\u7684\u6982\u5ff5\u4e00\u77e5\u534a\u89e3\uff0c\u65e0\u9700\u62c5\u5fc3\uff0c\u540e\u7eed\u7ae0\u8282\u4f1a\u5c55\u5f00\u4ecb\u7ecd\u3002

    "},{"location":"chapter_computational_complexity/performance_evaluation/#213","title":"2.1.3. \u00a0 \u590d\u6742\u5ea6\u5206\u6790\u91cd\u8981\u6027","text":"

    \u590d\u6742\u5ea6\u5206\u6790\u7ed9\u51fa\u4e00\u628a\u8bc4\u4ef7\u7b97\u6cd5\u6548\u7387\u7684\u201c\u6807\u5c3a\u201d\uff0c\u544a\u8bc9\u6211\u4eec\u6267\u884c\u67d0\u4e2a\u7b97\u6cd5\u9700\u8981\u591a\u5c11\u65f6\u95f4\u548c\u7a7a\u95f4\u8d44\u6e90\uff0c\u4e5f\u8ba9\u6211\u4eec\u53ef\u4ee5\u5f00\u5c55\u4e0d\u540c\u7b97\u6cd5\u4e4b\u95f4\u7684\u6548\u7387\u5bf9\u6bd4\u3002

    \u590d\u6742\u5ea6\u662f\u4e2a\u6570\u5b66\u6982\u5ff5\uff0c\u5bf9\u4e8e\u521d\u5b66\u8005\u53ef\u80fd\u6bd4\u8f83\u62bd\u8c61\uff0c\u5b66\u4e60\u96be\u5ea6\u76f8\u5bf9\u8f83\u9ad8\u3002\u4ece\u8fd9\u4e2a\u89d2\u5ea6\u51fa\u53d1\uff0c\u5176\u5e76\u4e0d\u9002\u5408\u4f5c\u4e3a\u7b2c\u4e00\u7ae0\u5185\u5bb9\u3002\u4f46\u662f\uff0c\u5f53\u6211\u4eec\u8ba8\u8bba\u67d0\u4e2a\u6570\u636e\u7ed3\u6784\u6216\u8005\u7b97\u6cd5\u7684\u7279\u70b9\u65f6\uff0c\u96be\u4ee5\u907f\u514d\u9700\u8981\u5206\u6790\u5b83\u7684\u8fd0\u884c\u901f\u5ea6\u548c\u7a7a\u95f4\u4f7f\u7528\u60c5\u51b5\u3002\u56e0\u6b64\uff0c\u5728\u5c55\u5f00\u5b66\u4e60\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e4b\u524d\uff0c\u5efa\u8bae\u8bfb\u8005\u5148\u5bf9\u590d\u6742\u5ea6\u5efa\u7acb\u8d77\u521d\u6b65\u7684\u4e86\u89e3\uff0c\u5e76\u4e14\u80fd\u591f\u5b8c\u6210\u7b80\u5355\u6848\u4f8b\u7684\u590d\u6742\u5ea6\u5206\u6790\u3002

    "},{"location":"chapter_computational_complexity/space_complexity/","title":"2.3. \u00a0 \u7a7a\u95f4\u590d\u6742\u5ea6","text":"

    \u300c\u7a7a\u95f4\u590d\u6742\u5ea6 Space Complexity\u300d\u7edf\u8ba1 \u7b97\u6cd5\u4f7f\u7528\u5185\u5b58\u7a7a\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf\u3002\u8fd9\u4e2a\u6982\u5ff5\u4e0e\u65f6\u95f4\u590d\u6742\u5ea6\u5f88\u7c7b\u4f3c\u3002

    "},{"location":"chapter_computational_complexity/space_complexity/#231","title":"2.3.1. \u00a0 \u7b97\u6cd5\u76f8\u5173\u7a7a\u95f4","text":"

    \u7b97\u6cd5\u8fd0\u884c\u4e2d\uff0c\u4f7f\u7528\u7684\u5185\u5b58\u7a7a\u95f4\u4e3b\u8981\u6709\u4ee5\u4e0b\u51e0\u79cd\uff1a

    • \u300c\u8f93\u5165\u7a7a\u95f4\u300d\u7528\u4e8e\u5b58\u50a8\u7b97\u6cd5\u7684\u8f93\u5165\u6570\u636e\uff1b
    • \u300c\u6682\u5b58\u7a7a\u95f4\u300d\u7528\u4e8e\u5b58\u50a8\u7b97\u6cd5\u8fd0\u884c\u4e2d\u7684\u53d8\u91cf\u3001\u5bf9\u8c61\u3001\u51fd\u6570\u4e0a\u4e0b\u6587\u7b49\u6570\u636e\uff1b
    • \u300c\u8f93\u51fa\u7a7a\u95f4\u300d\u7528\u4e8e\u5b58\u50a8\u7b97\u6cd5\u7684\u8f93\u51fa\u6570\u636e\uff1b

    Tip

    \u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u7edf\u8ba1\u8303\u56f4\u662f\u300c\u6682\u5b58\u7a7a\u95f4\u300d+\u300c\u8f93\u51fa\u7a7a\u95f4\u300d\u3002

    \u6682\u5b58\u7a7a\u95f4\u53ef\u5206\u4e3a\u4e09\u4e2a\u90e8\u5206\uff1a

    • \u300c\u6682\u5b58\u6570\u636e\u300d\u7528\u4e8e\u4fdd\u5b58\u7b97\u6cd5\u8fd0\u884c\u4e2d\u7684\u5404\u79cd \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61 \u7b49\u3002
    • \u300c\u6808\u5e27\u7a7a\u95f4\u300d\u7528\u4e8e\u4fdd\u5b58\u8c03\u7528\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u6570\u636e\u3002\u7cfb\u7edf\u6bcf\u6b21\u8c03\u7528\u51fd\u6570\u90fd\u4f1a\u5728\u6808\u7684\u9876\u90e8\u521b\u5efa\u4e00\u4e2a\u6808\u5e27\uff0c\u51fd\u6570\u8fd4\u56de\u65f6\uff0c\u6808\u5e27\u7a7a\u95f4\u4f1a\u88ab\u91ca\u653e\u3002
    • \u300c\u6307\u4ee4\u7a7a\u95f4\u300d\u7528\u4e8e\u4fdd\u5b58\u7f16\u8bd1\u540e\u7684\u7a0b\u5e8f\u6307\u4ee4\uff0c\u5728\u5b9e\u9645\u7edf\u8ba1\u4e2d\u4e00\u822c\u5ffd\u7565\u4e0d\u8ba1\u3002

    Fig. \u7b97\u6cd5\u4f7f\u7528\u7684\u76f8\u5173\u7a7a\u95f4

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u7c7b */\nclass Node {\nint val;\nNode next;\nNode(int x) { val = x; }\n}\n/* \u51fd\u6570 */\nint function() {\n// do something...\nreturn 0;\n}\nint algorithm(int n) {        // \u8f93\u5165\u6570\u636e\nfinal int a = 0;          // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nint b = 0;                // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nNode node = new Node(0);  // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nint c = function();       // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7ed3\u6784\u4f53 */\nstruct Node {\nint val;\nNode *next;\nNode(int x) : val(x), next(nullptr) {}\n};\n/* \u51fd\u6570 */\nint func() {\n// do something...\nreturn 0;\n}\nint algorithm(int n) {        // \u8f93\u5165\u6570\u636e\nconst int a = 0;          // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nint b = 0;                // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nNode* node = new Node(0); // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nint c = func();           // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    \"\"\" \u7c7b \"\"\"\nclass Node:\ndef __init__(self, x: int):\nself.val: int = x                 # \u7ed3\u70b9\u503c\nself.next: Optional[Node] = None  # \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u6307\u9488\uff08\u5f15\u7528\uff09\n\"\"\" \u51fd\u6570 \"\"\"\ndef function() -> int:\n# do something...\nreturn 0\ndef algorithm(n) -> int:  # \u8f93\u5165\u6570\u636e\nb: int = 0            # \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nnode = Node(0)        # \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nc: int = function()   # \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c      # \u8f93\u51fa\u6570\u636e\n
    /* \u7ed3\u6784\u4f53 */\ntype node struct {\nval  int\nnext *node\n}\n/* \u521b\u5efa node \u7ed3\u6784\u4f53  */\nfunc newNode(val int) *node {\nreturn &node{val: val}\n}\n/* \u51fd\u6570 */\nfunc function() int {\n// do something...\nreturn 0\n}\nfunc algorithm(n int) int { // \u8f93\u5165\u6570\u636e\nconst a = 0             // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nb := 0                  // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nnewNode(0)              // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nc := function()         // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c        // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7c7b */\nclass Node {\nval;\nnext;\nconstructor(val) {\nthis.val = val === undefined ? 0 : val; // \u7ed3\u70b9\u503c\nthis.next = null;                       // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n/* \u51fd\u6570 */\nfunction constFunc() {\n// do something\nreturn 0;\n}\nfunction algorithm(n) {       // \u8f93\u5165\u6570\u636e\nconst a = 0;              // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nconst b = 0;              // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nconst node = new Node(0); // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nconst c = constFunc();    // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7c7b */\nclass Node {\nval: number;\nnext: Node | null;\nconstructor(val?: number) {\nthis.val = val === undefined ? 0 : val; // \u7ed3\u70b9\u503c\nthis.next = null;                       // \u6307\u5411\u4e0b\u4e00\u7ed3\u70b9\u7684\u5f15\u7528\n}\n}\n/* \u51fd\u6570 */\nfunction constFunc(): number {\n// do something\nreturn 0;\n}\nfunction algorithm(n: number): number { // \u8f93\u5165\u6570\u636e\nconst a = 0;                        // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nconst b = 0;                        // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nconst node = new Node(0);           // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nconst c = constFunc();              // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;                   // \u8f93\u51fa\u6570\u636e\n}\n
    \n
    /* \u7c7b */\nclass Node\n{\nint val;\nNode next;\nNode(int x) { val = x; }\n}\n/* \u51fd\u6570 */\nint function()\n{\n// do something...\nreturn 0;\n}\nint algorithm(int n)          // \u8f93\u5165\u6570\u636e\n{\nint a = 0;                // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nint b = 0;                // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nNode node = new Node(0);  // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nint c = function();       // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c;         // \u8f93\u51fa\u6570\u636e\n}\n
    /* \u7c7b */\nclass Node {\nvar val: Int\nvar next: Node?\ninit(x: Int) {\nval = x\n}\n}\n/* \u51fd\u6570 */\nfunc function() -> Int {\n// do something...\nreturn 0\n}\nfunc algorithm(n: Int) -> Int { // \u8f93\u5165\u6570\u636e\nlet a = 0 // \u6682\u5b58\u6570\u636e\uff08\u5e38\u91cf\uff09\nvar b = 0 // \u6682\u5b58\u6570\u636e\uff08\u53d8\u91cf\uff09\nlet node = Node(x: 0) // \u6682\u5b58\u6570\u636e\uff08\u5bf9\u8c61\uff09\nlet c = function() // \u6808\u5e27\u7a7a\u95f4\uff08\u8c03\u7528\u51fd\u6570\uff09\nreturn a + b + c // \u8f93\u51fa\u6570\u636e\n}\n
    \n
    "},{"location":"chapter_computational_complexity/space_complexity/#232","title":"2.3.2. \u00a0 \u63a8\u7b97\u65b9\u6cd5","text":"

    \u7a7a\u95f4\u590d\u6742\u5ea6\u7684\u63a8\u7b97\u65b9\u6cd5\u548c\u65f6\u95f4\u590d\u6742\u5ea6\u603b\u4f53\u7c7b\u4f3c\uff0c\u53ea\u662f\u4ece\u7edf\u8ba1\u201c\u8ba1\u7b97\u64cd\u4f5c\u6570\u91cf\u201d\u53d8\u4e3a\u7edf\u8ba1\u201c\u4f7f\u7528\u7a7a\u95f4\u5927\u5c0f\u201d\u3002\u4e0e\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u540c\u7684\u662f\uff0c\u6211\u4eec\u4e00\u822c\u53ea\u5173\u6ce8\u300c\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u300d\u3002\u8fd9\u662f\u56e0\u4e3a\u5185\u5b58\u7a7a\u95f4\u662f\u4e00\u4e2a\u786c\u6027\u8981\u6c42\uff0c\u6211\u4eec\u5fc5\u987b\u4fdd\u8bc1\u5728\u6240\u6709\u8f93\u5165\u6570\u636e\u4e0b\u90fd\u6709\u8db3\u591f\u7684\u5185\u5b58\u7a7a\u95f4\u9884\u7559\u3002

    \u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u4e2d\u7684\u201c\u6700\u5dee\u201d\u6709\u4e24\u5c42\u542b\u4e49\uff0c\u5206\u522b\u4e3a\u8f93\u5165\u6570\u636e\u7684\u6700\u5dee\u5206\u5e03\u3001\u7b97\u6cd5\u8fd0\u884c\u4e2d\u7684\u6700\u5dee\u65f6\u95f4\u70b9\u3002

    • \u4ee5\u6700\u5dee\u8f93\u5165\u6570\u636e\u4e3a\u51c6\u3002\u5f53 \\(n < 10\\) \u65f6\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff1b\u4f46\u662f\u5f53 \\(n > 10\\) \u65f6\uff0c\u521d\u59cb\u5316\u7684\u6570\u7ec4 nums \u4f7f\u7528 \\(O(n)\\) \u7a7a\u95f4\uff1b\u56e0\u6b64\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff1b
    • \u4ee5\u7b97\u6cd5\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u7684\u5cf0\u503c\u5185\u5b58\u4e3a\u51c6\u3002\u7a0b\u5e8f\u5728\u6267\u884c\u6700\u540e\u4e00\u884c\u4e4b\u524d\uff0c\u4f7f\u7528 \\(O(1)\\) \u7a7a\u95f4\uff1b\u5f53\u521d\u59cb\u5316\u6570\u7ec4 nums \u65f6\uff0c\u7a0b\u5e8f\u4f7f\u7528 \\(O(n)\\) \u7a7a\u95f4\uff1b\u56e0\u6b64\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff1b
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    void algorithm(int n) {\nint a = 0;                   // O(1)\nint[] b = new int[10000];    // O(1)\nif (n > 10)\nint[] nums = new int[n]; // O(n)\n}\n
    void algorithm(int n) {\nint a = 0;               // O(1)\nvector<int> b(10000);    // O(1)\nif (n > 10)\nvector<int> nums(n); // O(n)\n}\n
    def algorithm(n: int) -> None:\na: int = 0                     # O(1)\nb: List[int] = [0] * 10000     # O(1)\nif n > 10:\nnums: List[int] = [0] * n  # O(n)\n
    func algorithm(n int) {\na := 0                      // O(1)\nb := make([]int, 10000)     // O(1)\nvar nums []int\nif n > 10 {\nnums := make([]int, n)  // O(n)\n}\nfmt.Println(a, b, nums)\n}\n
    function algorithm(n) {\nconst a = 0;                   // O(1)\nconst b = new Array(10000);    // O(1)\nif (n > 10) {\nconst nums = new Array(n); // O(n)\n}\n}\n
    function algorithm(n: number): void {\nconst a = 0;                   // O(1)\nconst b = new Array(10000);    // O(1)\nif (n > 10) {\nconst nums = new Array(n); // O(n)\n}\n}\n
    \n
    void algorithm(int n)\n{\nint a = 0;                   // O(1)\nint[] b = new int[10000];    // O(1)\nif (n > 10)\n{\nint[] nums = new int[n]; // O(n)\n}\n}\n
    func algorithm(n: Int) {\nlet a = 0 // O(1)\nlet b = Array(repeating: 0, count: 10000) // O(1)\nif n > 10 {\nlet nums = Array(repeating: 0, count: n) // O(n)\n}\n}\n
    \n

    \u5728\u9012\u5f52\u51fd\u6570\u4e2d\uff0c\u9700\u8981\u6ce8\u610f\u7edf\u8ba1\u6808\u5e27\u7a7a\u95f4\u3002\u4f8b\u5982\u51fd\u6570 loop()\uff0c\u5728\u5faa\u73af\u4e2d\u8c03\u7528\u4e86 \\(n\\) \u6b21 function() \uff0c\u6bcf\u8f6e\u4e2d\u7684 function() \u90fd\u8fd4\u56de\u5e76\u91ca\u653e\u4e86\u6808\u5e27\u7a7a\u95f4\uff0c\u56e0\u6b64\u7a7a\u95f4\u590d\u6742\u5ea6\u4ecd\u4e3a \\(O(1)\\) \u3002\u800c\u9012\u5f52\u51fd\u6570 recur() \u5728\u8fd0\u884c\u4e2d\u4f1a\u540c\u65f6\u5b58\u5728 \\(n\\) \u4e2a\u672a\u8fd4\u56de\u7684 recur() \uff0c\u4ece\u800c\u4f7f\u7528 \\(O(n)\\) \u7684\u6808\u5e27\u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    int function() {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nvoid loop(int n) {\nfor (int i = 0; i < n; i++) {\nfunction();\n}\n}\n/* \u9012\u5f52 O(n) */\nvoid recur(int n) {\nif (n == 1) return;\nreturn recur(n - 1);\n}\n
    int func() {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nvoid loop(int n) {\nfor (int i = 0; i < n; i++) {\nfunc();\n}\n}\n/* \u9012\u5f52 O(n) */\nvoid recur(int n) {\nif (n == 1) return;\nreturn recur(n - 1);\n}\n
    def function() -> int:\n# do something\nreturn 0\n\"\"\" \u5faa\u73af O(1) \"\"\"\ndef loop(n: int) -> None:\nfor _ in range(n):\nfunction()\n\"\"\" \u9012\u5f52 O(n) \"\"\"\ndef recur(n: int) -> int:\nif n == 1: return\nreturn recur(n - 1)\n
    func function() int {\n// do something\nreturn 0\n}\n/* \u5faa\u73af O(1) */\nfunc loop(n int) {\nfor i := 0; i < n; i++ {\nfunction()\n}\n}\n/* \u9012\u5f52 O(n) */\nfunc recur(n int) {\nif n == 1 {\nreturn\n}\nrecur(n - 1)\n}\n
    function constFunc() {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nfunction loop(n) {\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n/* \u9012\u5f52 O(n) */\nfunction recur(n) {\nif (n === 1) return;\nreturn recur(n - 1);\n}\n
    function constFunc(): number {\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nfunction loop(n: number): void {\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n/* \u9012\u5f52 O(n) */\nfunction recur(n: number): void {\nif (n === 1) return;\nreturn recur(n - 1);\n}\n
    \n
    int function()\n{\n// do something\nreturn 0;\n}\n/* \u5faa\u73af O(1) */\nvoid loop(int n)\n{\nfor (int i = 0; i < n; i++)\n{\nfunction();\n}\n}\n/* \u9012\u5f52 O(n) */\nint recur(int n)\n{\nif (n == 1) return 1;\nreturn recur(n - 1);\n}\n
    @discardableResult\nfunc function() -> Int {\n// do something\nreturn 0\n}\n/* \u5faa\u73af O(1) */\nfunc loop(n: Int) {\nfor _ in 0 ..< n {\nfunction()\n}\n}\n/* \u9012\u5f52 O(n) */\nfunc recur(n: Int) {\nif n == 1 {\nreturn\n}\nrecur(n: n - 1)\n}\n
    \n
    "},{"location":"chapter_computational_complexity/space_complexity/#233","title":"2.3.3. \u00a0 \u5e38\u89c1\u7c7b\u578b","text":"

    \u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u5e38\u89c1\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u7c7b\u578b\u6709\uff08\u4ece\u4f4e\u5230\u9ad8\u6392\u5217\uff09

    \\[ \\begin{aligned} O(1) < O(\\log n) < O(n) < O(n^2) < O(2^n) \\newline \\text{\u5e38\u6570\u9636} < \\text{\u5bf9\u6570\u9636} < \\text{\u7ebf\u6027\u9636} < \\text{\u5e73\u65b9\u9636} < \\text{\u6307\u6570\u9636} \\end{aligned} \\]

    Fig. \u7a7a\u95f4\u590d\u6742\u5ea6\u7684\u5e38\u89c1\u7c7b\u578b

    Tip

    \u90e8\u5206\u793a\u4f8b\u4ee3\u7801\u9700\u8981\u4e00\u4e9b\u524d\u7f6e\u77e5\u8bc6\uff0c\u5305\u62ec\u6570\u7ec4\u3001\u94fe\u8868\u3001\u4e8c\u53c9\u6811\u3001\u9012\u5f52\u7b97\u6cd5\u7b49\u3002\u5982\u679c\u9047\u5230\u770b\u4e0d\u61c2\u7684\u5730\u65b9\u65e0\u9700\u62c5\u5fc3\uff0c\u53ef\u4ee5\u5728\u5b66\u4e60\u5b8c\u540e\u9762\u7ae0\u8282\u540e\u518d\u6765\u590d\u4e60\uff0c\u73b0\u9636\u6bb5\u5148\u805a\u7126\u5728\u7406\u89e3\u7a7a\u95f4\u590d\u6742\u5ea6\u542b\u4e49\u548c\u63a8\u7b97\u65b9\u6cd5\u4e0a\u3002

    "},{"location":"chapter_computational_complexity/space_complexity/#o1","title":"\u5e38\u6570\u9636 \\(O(1)\\)","text":"

    \u5e38\u6570\u9636\u5e38\u89c1\u4e8e\u6570\u91cf\u4e0e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\u7684\u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u3002

    \u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u5728\u5faa\u73af\u4e2d\u521d\u59cb\u5316\u53d8\u91cf\u6216\u8c03\u7528\u51fd\u6570\u800c\u5360\u7528\u7684\u5185\u5b58\uff0c\u5728\u8fdb\u5165\u4e0b\u4e00\u5faa\u73af\u540e\u5c31\u4f1a\u88ab\u91ca\u653e\uff0c\u5373\u4e0d\u4f1a\u7d2f\u79ef\u5360\u7528\u7a7a\u95f4\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4ecd\u4e3a \\(O(1)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u5e38\u6570\u9636 */\nvoid constant(int n) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nfinal int a = 0;\nint b = 0;\nint[] nums = new int[10000];\nListNode node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nint c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nfunction();\n}\n}\n
    space_complexity.cpp
    /* \u5e38\u6570\u9636 */\nvoid constant(int n) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst int a = 0;\nint b = 0;\nvector<int> nums(10000);\nListNode node(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nint c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++) {\nfunc();\n}\n}\n
    space_complexity.py
    def constant(n: int) -> None:\n\"\"\" \u5e38\u6570\u9636 \"\"\"\n# \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\na: int = 0\nnums: List[int] = [0] * 10000\nnode = ListNode(0)\n# \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in range(n):\nc: int = 0\n# \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in range(n):\nfunction()\n
    space_complexity.go
    /* \u5e38\u6570\u9636 */\nfunc spaceConstant(n int) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a = 0\nb := 0\nnums := make([]int, 10000)\nListNode := newNode(0)\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nvar c int\nfor i := 0; i < n; i++ {\nc = 0\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor i := 0; i < n; i++ {\nfunction()\n}\nfmt.Println(a, b, nums, c, ListNode)\n}\n
    space_complexity.js
    /* \u5e38\u6570\u9636 */\nfunction constant(n) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a = 0;\nconst b = 0;\nconst nums = new Array(10000);\nconst node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconst c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n
    space_complexity.ts
    /* \u5e38\u6570\u9636 */\nfunction constant(n: number): void {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a = 0;\nconst b = 0;\nconst nums = new Array(10000);\nconst node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconst c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (let i = 0; i < n; i++) {\nconstFunc();\n}\n}\n
    space_complexity.c
    [class]{}-[func]{spaceConstant}\n
    space_complexity.cs
    /* \u5e38\u6570\u9636 */\nvoid constant(int n)\n{\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nint a = 0;\nint b = 0;\nint[] nums = new int[10000];\nListNode node = new ListNode(0);\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++)\n{\nint c = 0;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor (int i = 0; i < n; i++)\n{\nfunction();\n}\n}\n
    space_complexity.swift
    /* \u5e38\u6570\u9636 */\nfunc constant(n: Int) {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nlet a = 0\nvar b = 0\nlet nums = Array(repeating: 0, count: 10000)\nlet node = ListNode(x: 0)\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in 0 ..< n {\nlet c = 0\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\nfor _ in 0 ..< n {\nfunction()\n}\n}\n
    space_complexity.zig
    // \u5e38\u6570\u9636\nfn constant(n: i32) void {\n// \u5e38\u91cf\u3001\u53d8\u91cf\u3001\u5bf9\u8c61\u5360\u7528 O(1) \u7a7a\u95f4\nconst a: i32 = 0;\nvar b: i32 = 0;\nvar nums = [_]i32{0}**10000;\nvar node = inc.ListNode(i32){.val = 0};\nvar i: i32 = 0;\n// \u5faa\u73af\u4e2d\u7684\u53d8\u91cf\u5360\u7528 O(1) \u7a7a\u95f4\nwhile (i < n) : (i += 1) {\nvar c: i32 = 0;\n_ = c;\n}\n// \u5faa\u73af\u4e2d\u7684\u51fd\u6570\u5360\u7528 O(1) \u7a7a\u95f4\ni = 0;\nwhile (i < n) : (i += 1) {\n_ = function();\n}\n_ = a;\n_ = b;\n_ = nums;\n_ = node;\n}\n
    "},{"location":"chapter_computational_complexity/space_complexity/#on","title":"\u7ebf\u6027\u9636 \\(O(n)\\)","text":"

    \u7ebf\u6027\u9636\u5e38\u89c1\u4e8e\u5143\u7d20\u6570\u91cf\u4e0e \\(n\\) \u6210\u6b63\u6bd4\u7684\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\u7b49\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u7ebf\u6027\u9636 */\nvoid linear(int n) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nint[] nums = new int[n];\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nList<ListNode> nodes = new ArrayList<>();\nfor (int i = 0; i < n; i++) {\nnodes.add(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nMap<Integer, String> map = new HashMap<>();\nfor (int i = 0; i < n; i++) {\nmap.put(i, String.valueOf(i));\n}\n}\n
    space_complexity.cpp
    /* \u7ebf\u6027\u9636 */\nvoid linear(int n) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nvector<int> nums(n);\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvector<ListNode> nodes;\nfor (int i = 0; i < n; i++) {\nnodes.push_back(ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nunordered_map<int, string> map;\nfor (int i = 0; i < n; i++) {\nmap[i] = to_string(i);\n}\n}\n
    space_complexity.py
    def linear(n: int) -> None:\n\"\"\" \u7ebf\u6027\u9636 \"\"\"\n# \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nnums: List[int] = [0] * n\n# \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nmapp: Dict = {}\nfor i in range(n):\nmapp[i] = str(i)\n
    space_complexity.go
    /* \u7ebf\u6027\u9636 */\nfunc spaceLinear(n int) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\n_ = make([]int, n)\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvar nodes []*node\nfor i := 0; i < n; i++ {\nnodes = append(nodes, newNode(i))\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nm := make(map[int]string, n)\nfor i := 0; i < n; i++ {\nm[i] = strconv.Itoa(i)\n}\n}\n
    space_complexity.js
    /* \u7ebf\u6027\u9636 */\nfunction linear(n) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nconst nums = new Array(n);\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst nodes = [];\nfor (let i = 0; i < n; i++) {\nnodes.push(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst map = new Map();\nfor (let i = 0; i < n; i++) {\nmap.set(i, i.toString());\n}\n}\n
    space_complexity.ts
    /* \u7ebf\u6027\u9636 */\nfunction linear(n: number): void {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nconst nums = new Array(n);\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst nodes: ListNode[] = [];\nfor (let i = 0; i < n; i++) {\nnodes.push(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nconst map = new Map();\nfor (let i = 0; i < n; i++) {\nmap.set(i, i.toString());\n}\n}\n
    space_complexity.c
    [class]{}-[func]{spaceLinear}\n
    space_complexity.cs
    /* \u7ebf\u6027\u9636 */\nvoid linear(int n)\n{\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nint[] nums = new int[n];\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nList<ListNode> nodes = new();\nfor (int i = 0; i < n; i++)\n{\nnodes.Add(new ListNode(i));\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nDictionary<int, String> map = new();\nfor (int i = 0; i < n; i++)\n{\nmap.Add(i, i.ToString());\n}\n}\n
    space_complexity.swift
    /* \u7ebf\u6027\u9636 */\nfunc linear(n: Int) {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nlet nums = Array(repeating: 0, count: n)\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nlet nodes = (0 ..< n).map { ListNode(x: $0) }\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nlet map = Dictionary(uniqueKeysWithValues: (0 ..< n).map { ($0, \"\\($0)\") })\n}\n
    space_complexity.zig
    // \u7ebf\u6027\u9636\nfn linear(comptime n: i32) !void {\n// \u957f\u5ea6\u4e3a n \u7684\u6570\u7ec4\u5360\u7528 O(n) \u7a7a\u95f4\nvar nums = [_]i32{0}**n;\n// \u957f\u5ea6\u4e3a n \u7684\u5217\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvar nodes = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer nodes.deinit();\nvar i: i32 = 0;\nwhile (i < n) : (i += 1) {\ntry nodes.append(i);\n}\n// \u957f\u5ea6\u4e3a n \u7684\u54c8\u5e0c\u8868\u5360\u7528 O(n) \u7a7a\u95f4\nvar map = std.AutoArrayHashMap(i32, []const u8).init(std.heap.page_allocator);\ndefer map.deinit();\nvar j: i32 = 0;\nwhile (j < n) : (j += 1) {\nconst string = try std.fmt.allocPrint(std.heap.page_allocator, \"{d}\", .{j});\ndefer std.heap.page_allocator.free(string);\ntry map.put(i, string);\n}\n_ = nums;\n}\n

    \u4ee5\u4e0b\u9012\u5f52\u51fd\u6570\u4f1a\u540c\u65f6\u5b58\u5728 \\(n\\) \u4e2a\u672a\u8fd4\u56de\u7684 algorithm() \u51fd\u6570\uff0c\u4f7f\u7528 \\(O(n)\\) \u5927\u5c0f\u7684\u6808\u5e27\u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nvoid linearRecur(int n) {\nSystem.out.println(\"\u9012\u5f52 n = \" + n);\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.cpp
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nvoid linearRecur(int n) {\ncout << \"\u9012\u5f52 n = \" << n << endl;\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.py
    def linear_recur(n: int) -> None:\n\"\"\" \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 \"\"\"\nprint(\"\u9012\u5f52 n =\", n)\nif n == 1: return\nlinear_recur(n - 1)\n
    space_complexity.go
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc spaceLinearRecur(n int) {\nfmt.Println(\"\u9012\u5f52 n =\", n)\nif n == 1 {\nreturn\n}\nspaceLinearRecur(n - 1)\n}\n
    space_complexity.js
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction linearRecur(n) {\nconsole.log(`\u9012\u5f52 n = ${n}`);\nif (n === 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.ts
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction linearRecur(n: number): void {\nconsole.log(`\u9012\u5f52 n = ${n}`);\nif (n === 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.c
    [class]{}-[func]{spaceLinearRecur}\n
    space_complexity.cs
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nvoid linearRecur(int n)\n{\nConsole.WriteLine(\"\u9012\u5f52 n = \" + n);\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n
    space_complexity.swift
    /* \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc linearRecur(n: Int) {\nprint(\"\u9012\u5f52 n = \\(n)\")\nif n == 1 {\nreturn\n}\nlinearRecur(n: n - 1)\n}\n
    space_complexity.zig
    // \u7ebf\u6027\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn linearRecur(comptime n: i32) void {\nstd.debug.print(\"\u9012\u5f52 n = {}\\n\", .{n});\nif (n == 1) return;\nlinearRecur(n - 1);\n}\n

    Fig. \u9012\u5f52\u51fd\u6570\u4ea7\u751f\u7684\u7ebf\u6027\u9636\u7a7a\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/space_complexity/#on2","title":"\u5e73\u65b9\u9636 \\(O(n^2)\\)","text":"

    \u5e73\u65b9\u9636\u5e38\u89c1\u4e8e\u5143\u7d20\u6570\u91cf\u4e0e \\(n\\) \u6210\u5e73\u65b9\u5173\u7cfb\u7684\u77e9\u9635\u3001\u56fe\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u5e73\u65b9\u9636 */\nvoid quadratic(int n) {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nint[][] numMatrix = new int[n][n];\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nList<List<Integer>> numList = new ArrayList<>();\nfor (int i = 0; i < n; i++) {\nList<Integer> tmp = new ArrayList<>();\nfor (int j = 0; j < n; j++) {\ntmp.add(0);\n}\nnumList.add(tmp);\n}\n}\n
    space_complexity.cpp
    /* \u5e73\u65b9\u9636 */\nvoid quadratic(int n) {\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nvector<vector<int>> numMatrix;\nfor (int i = 0; i < n; i++) {\nvector<int> tmp;\nfor (int j = 0; j < n; j++) {\ntmp.push_back(0);\n}\nnumMatrix.push_back(tmp);\n}\n}\n
    space_complexity.py
    def quadratic(n: int) -> None:\n\"\"\" \u5e73\u65b9\u9636 \"\"\"\n# \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nnum_matrix: List[List[int]] = [[0] * n for _ in range(n)]\n
    space_complexity.go
    /* \u5e73\u65b9\u9636 */\nfunc spaceQuadratic(n int) {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nnumMatrix := make([][]int, n)\nfor i := 0; i < n; i++ {\nnumMatrix[i] = make([]int, n)\n}\n}\n
    space_complexity.js
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n) {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numMatrix = Array(n).fill(null).map(() => Array(n).fill(null));\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numList = [];\nfor (let i = 0; i < n; i++) {\nconst tmp = [];\nfor (let j = 0; j < n; j++) {\ntmp.push(0);\n}\nnumList.push(tmp);\n}\n}\n
    space_complexity.ts
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n: number): void {\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numMatrix = Array(n)\n.fill(null)\n.map(() => Array(n).fill(null));\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nconst numList = [];\nfor (let i = 0; i < n; i++) {\nconst tmp = [];\nfor (let j = 0; j < n; j++) {\ntmp.push(0);\n}\nnumList.push(tmp);\n}\n}\n
    space_complexity.c
    [class]{}-[func]{spaceQuadratic}\n
    space_complexity.cs
    /* \u5e73\u65b9\u9636 */\nvoid quadratic(int n)\n{\n// \u77e9\u9635\u5360\u7528 O(n^2) \u7a7a\u95f4\nint[,] numMatrix = new int[n, n];\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nList<List<int>> numList = new();\nfor (int i = 0; i < n; i++)\n{\nList<int> tmp = new();\nfor (int j = 0; j < n; j++)\n{\ntmp.Add(0);\n}\nnumList.Add(tmp);\n}\n}\n
    space_complexity.swift
    /* \u5e73\u65b9\u9636 */\nfunc quadratic(n: Int) {\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nlet numList = Array(repeating: Array(repeating: 0, count: n), count: n)\n}\n
    space_complexity.zig
    // \u5e73\u65b9\u9636\nfn quadratic(n: i32) !void {\n// \u4e8c\u7ef4\u5217\u8868\u5360\u7528 O(n^2) \u7a7a\u95f4\nvar nodes = std.ArrayList(std.ArrayList(i32)).init(std.heap.page_allocator);\ndefer nodes.deinit();\nvar i: i32 = 0;\nwhile (i < n) : (i += 1) {\nvar tmp = std.ArrayList(i32).init(std.heap.page_allocator);\ndefer tmp.deinit();\nvar j: i32 = 0;\nwhile (j < n) : (j += 1) {\ntry tmp.append(0);\n}\ntry nodes.append(tmp);\n}\n}\n

    \u5728\u4ee5\u4e0b\u9012\u5f52\u51fd\u6570\u4e2d\uff0c\u540c\u65f6\u5b58\u5728 \\(n\\) \u4e2a\u672a\u8fd4\u56de\u7684 algorithm() \uff0c\u5e76\u4e14\u6bcf\u4e2a\u51fd\u6570\u4e2d\u90fd\u521d\u59cb\u5316\u4e86\u4e00\u4e2a\u6570\u7ec4\uff0c\u957f\u5ea6\u5206\u522b\u4e3a \\(n, n-1, n-2, ..., 2, 1\\) \uff0c\u5e73\u5747\u957f\u5ea6\u4e3a \\(\\frac{n}{2}\\) \uff0c\u56e0\u6b64\u603b\u4f53\u4f7f\u7528 \\(O(n^2)\\) \u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint quadraticRecur(int n) {\nif (n <= 0) return 0;\n// \u6570\u7ec4 nums \u957f\u5ea6\u4e3a n, n-1, ..., 2, 1\nint[] nums = new int[n];\nSystem.out.println(\"\u9012\u5f52 n = \" + n + \" \u4e2d\u7684 nums \u957f\u5ea6 = \" + nums.length);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.cpp
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint quadraticRecur(int n) {\nif (n <= 0) return 0;\nvector<int> nums(n);\ncout << \"\u9012\u5f52 n = \" << n << \" \u4e2d\u7684 nums \u957f\u5ea6 = \" << nums.size() << endl;\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.py
    def quadratic_recur(n: int) -> int:\n\"\"\" \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 \"\"\"\nif n <= 0: return 0\n# \u6570\u7ec4 nums \u957f\u5ea6\u4e3a n, n-1, ..., 2, 1\nnums: List[int] = [0] * n\nreturn quadratic_recur(n - 1)\n
    space_complexity.go
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc spaceQuadraticRecur(n int) int {\nif n <= 0 {\nreturn 0\n}\nnums := make([]int, n)\nfmt.Printf(\"\u9012\u5f52 n = %d \u4e2d\u7684 nums \u957f\u5ea6 = %d \\n\", n, len(nums))\nreturn spaceQuadraticRecur(n - 1)\n}\n
    space_complexity.js
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction quadraticRecur(n) {\nif (n <= 0) return 0;\nconst nums = new Array(n);\nconsole.log(`\u9012\u5f52 n = ${n} \u4e2d\u7684 nums \u957f\u5ea6 = ${nums.length}`);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.ts
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction quadraticRecur(n: number): number {\nif (n <= 0) return 0;\nconst nums = new Array(n);\nconsole.log(`\u9012\u5f52 n = ${n} \u4e2d\u7684 nums \u957f\u5ea6 = ${nums.length}`);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.c
    [class]{}-[func]{spaceQuadraticRecur}\n
    space_complexity.cs
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint quadraticRecur(int n)\n{\nif (n <= 0) return 0;\nint[] nums = new int[n];\nConsole.WriteLine(\"\u9012\u5f52 n = \" + n + \" \u4e2d\u7684 nums \u957f\u5ea6 = \" + nums.Length);\nreturn quadraticRecur(n - 1);\n}\n
    space_complexity.swift
    /* \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\n@discardableResult\nfunc quadraticRecur(n: Int) -> Int {\nif n <= 0 {\nreturn 0\n}\n// \u6570\u7ec4 nums \u957f\u5ea6\u4e3a n, n-1, ..., 2, 1\nlet nums = Array(repeating: 0, count: n)\nprint(\"\u9012\u5f52 n = \\(n) \u4e2d\u7684 nums \u957f\u5ea6 = \\(nums.count)\")\nreturn quadraticRecur(n: n - 1)\n}\n
    space_complexity.zig
    // \u5e73\u65b9\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn quadraticRecur(comptime n: i32) i32 {\nif (n <= 0) return 0;\nvar nums = [_]i32{0}**n;\nstd.debug.print(\"\u9012\u5f52 n = {} \u4e2d\u7684 nums \u957f\u5ea6 = {}\\n\", .{n, nums.len});\nreturn quadraticRecur(n - 1);\n}\n

    Fig. \u9012\u5f52\u51fd\u6570\u4ea7\u751f\u7684\u5e73\u65b9\u9636\u7a7a\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/space_complexity/#o2n","title":"\u6307\u6570\u9636 \\(O(2^n)\\)","text":"

    \u6307\u6570\u9636\u5e38\u89c1\u4e8e\u4e8c\u53c9\u6811\u3002\u9ad8\u5ea6\u4e3a \\(n\\) \u7684\u300c\u6ee1\u4e8c\u53c9\u6811\u300d\u7684\u7ed3\u70b9\u6570\u91cf\u4e3a \\(2^n - 1\\) \uff0c\u4f7f\u7528 \\(O(2^n)\\) \u7a7a\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig space_complexity.java
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nTreeNode buildTree(int n) {\nif (n == 0) return null;\nTreeNode root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.cpp
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nTreeNode* buildTree(int n) {\nif (n == 0) return nullptr;\nTreeNode* root = new TreeNode(0);\nroot->left = buildTree(n - 1);\nroot->right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.py
    def build_tree(n: int) -> Optional[TreeNode]:\n\"\"\" \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 \"\"\"\nif n == 0: return None\nroot = TreeNode(0)\nroot.left = build_tree(n - 1)\nroot.right = build_tree(n - 1)\nreturn root\n
    space_complexity.go
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunc buildTree(n int) *treeNode {\nif n == 0 {\nreturn nil\n}\nroot := newTreeNode(0)\nroot.left = buildTree(n - 1)\nroot.right = buildTree(n - 1)\nreturn root\n}\n
    space_complexity.js
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunction buildTree(n) {\nif (n === 0) return null;\nconst root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.ts
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunction buildTree(n: number): TreeNode | null {\nif (n === 0) return null;\nconst root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.c
    [class]{}-[func]{buildTree}\n
    space_complexity.cs
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nTreeNode? buildTree(int n)\n{\nif (n == 0) return null;\nTreeNode root = new TreeNode(0);\nroot.left = buildTree(n - 1);\nroot.right = buildTree(n - 1);\nreturn root;\n}\n
    space_complexity.swift
    /* \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09 */\nfunc buildTree(n: Int) -> TreeNode? {\nif n == 0 {\nreturn nil\n}\nlet root = TreeNode(x: 0)\nroot.left = buildTree(n: n - 1)\nroot.right = buildTree(n: n - 1)\nreturn root\n}\n
    space_complexity.zig
    // \u6307\u6570\u9636\uff08\u5efa\u7acb\u6ee1\u4e8c\u53c9\u6811\uff09\nfn buildTree(mem_allocator: std.mem.Allocator, n: i32) !?*inc.TreeNode(i32) {\nif (n == 0) return null;\nconst root = try mem_allocator.create(inc.TreeNode(i32));\nroot.init(0);\nroot.left = try buildTree(mem_allocator, n - 1);\nroot.right = try buildTree(mem_allocator, n - 1);\nreturn root;\n}\n

    Fig. \u6ee1\u4e8c\u53c9\u6811\u4ea7\u751f\u7684\u6307\u6570\u9636\u7a7a\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/space_complexity/#olog-n","title":"\u5bf9\u6570\u9636 \\(O(\\log n)\\)","text":"

    \u5bf9\u6570\u9636\u5e38\u89c1\u4e8e\u5206\u6cbb\u7b97\u6cd5\u3001\u6570\u636e\u7c7b\u578b\u8f6c\u6362\u7b49\u3002

    \u4f8b\u5982\u300c\u5f52\u5e76\u6392\u5e8f\u300d\uff0c\u957f\u5ea6\u4e3a \\(n\\) \u7684\u6570\u7ec4\u53ef\u4ee5\u5f62\u6210\u9ad8\u5ea6\u4e3a \\(\\log n\\) \u7684\u9012\u5f52\u6811\uff0c\u56e0\u6b64\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \u3002

    \u518d\u4f8b\u5982\u300c\u6570\u5b57\u8f6c\u5316\u4e3a\u5b57\u7b26\u4e32\u300d\uff0c\u8f93\u5165\u4efb\u610f\u6b63\u6574\u6570 \\(n\\) \uff0c\u5b83\u7684\u4f4d\u6570\u4e3a \\(\\log_{10} n\\) \uff0c\u5373\u5bf9\u5e94\u5b57\u7b26\u4e32\u957f\u5ea6\u4e3a \\(\\log_{10} n\\) \uff0c\u56e0\u6b64\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log_{10} n) = O(\\log n)\\) \u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/","title":"2.4. \u00a0 \u6743\u8861\u65f6\u95f4\u4e0e\u7a7a\u95f4","text":"

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u7a7a\u95f4\u590d\u6742\u5ea6\u90fd\u80fd\u591f\u8fbe\u5230\u6700\u4f18\uff0c\u800c\u5b9e\u9645\u4e0a\uff0c\u540c\u65f6\u4f18\u5316\u65f6\u95f4\u590d\u6742\u5ea6\u548c\u7a7a\u95f4\u590d\u6742\u5ea6\u662f\u975e\u5e38\u56f0\u96be\u7684\u3002

    \u964d\u4f4e\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u5f80\u5f80\u662f\u4ee5\u63d0\u5347\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a\u4ee3\u4ef7\u7684\uff0c\u53cd\u4e4b\u4ea6\u7136\u3002\u6211\u4eec\u628a\u727a\u7272\u5185\u5b58\u7a7a\u95f4\u6765\u63d0\u5347\u7b97\u6cd5\u8fd0\u884c\u901f\u5ea6\u7684\u601d\u8def\u79f0\u4e3a\u300c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u300d\uff1b\u53cd\u4e4b\uff0c\u79f0\u4e4b\u4e3a\u300c\u4ee5\u65f6\u95f4\u6362\u7a7a\u95f4\u300d\u3002\u9009\u62e9\u54ea\u79cd\u601d\u8def\u53d6\u51b3\u4e8e\u6211\u4eec\u66f4\u770b\u91cd\u54ea\u4e2a\u65b9\u9762\u3002

    \u5927\u591a\u6570\u60c5\u51b5\u4e0b\uff0c\u65f6\u95f4\u90fd\u662f\u6bd4\u7a7a\u95f4\u66f4\u5b9d\u8d35\u7684\uff0c\u53ea\u8981\u7a7a\u95f4\u590d\u6742\u5ea6\u4e0d\u8981\u592a\u79bb\u8c31\u3001\u80fd\u63a5\u53d7\u5c31\u884c\uff0c\u56e0\u6b64\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u6700\u4e3a\u5e38\u7528\u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/#241","title":"2.4.1. \u00a0 \u793a\u4f8b\u9898\u76ee *","text":"

    \u4ee5 LeetCode \u5168\u7ad9\u7b2c\u4e00\u9898 \u4e24\u6570\u4e4b\u548c \u4e3a\u4f8b\u3002

    \u4e24\u6570\u4e4b\u548c

    \u7ed9\u5b9a\u4e00\u4e2a\u6574\u6570\u6570\u7ec4 nums \u548c\u4e00\u4e2a\u6574\u6570\u76ee\u6807\u503c target \uff0c\u8bf7\u4f60\u5728\u8be5\u6570\u7ec4\u4e2d\u627e\u51fa\u201c\u548c\u201d\u4e3a\u76ee\u6807\u503c target \u7684\u90a3\u4e24\u4e2a\u6574\u6570\uff0c\u5e76\u8fd4\u56de\u5b83\u4eec\u7684\u6570\u7ec4\u4e0b\u6807\u3002

    \u4f60\u53ef\u4ee5\u5047\u8bbe\u6bcf\u79cd\u8f93\u5165\u53ea\u4f1a\u5bf9\u5e94\u4e00\u4e2a\u7b54\u6848\u3002\u4f46\u662f\uff0c\u6570\u7ec4\u4e2d\u540c\u4e00\u4e2a\u5143\u7d20\u5728\u7b54\u6848\u91cc\u4e0d\u80fd\u91cd\u590d\u51fa\u73b0\u3002

    \u4f60\u53ef\u4ee5\u6309\u4efb\u610f\u987a\u5e8f\u8fd4\u56de\u7b54\u6848\u3002

    \u300c\u66b4\u529b\u679a\u4e3e\u300d\u548c\u300c\u8f85\u52a9\u54c8\u5e0c\u8868\u300d\u5206\u522b\u5bf9\u5e94 \u7a7a\u95f4\u6700\u4f18 \u548c \u65f6\u95f4\u6700\u4f18 \u7684\u4e24\u79cd\u89e3\u6cd5\u3002\u672c\u7740\u65f6\u95f4\u6bd4\u7a7a\u95f4\u66f4\u5b9d\u8d35\u7684\u539f\u5219\uff0c\u540e\u8005\u662f\u672c\u9898\u7684\u6700\u4f73\u89e3\u6cd5\u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/#_1","title":"\u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e","text":"

    \u8003\u8651\u76f4\u63a5\u904d\u5386\u6240\u6709\u6240\u6709\u53ef\u80fd\u6027\u3002\u901a\u8fc7\u5f00\u542f\u4e00\u4e2a\u4e24\u5c42\u5faa\u73af\uff0c\u5224\u65ad\u4e24\u4e2a\u6574\u6570\u7684\u548c\u662f\u5426\u4e3a target \uff0c\u82e5\u662f\u5219\u8fd4\u56de\u5b83\u4fe9\u7684\u7d22\u5f15\uff08\u5373\u4e0b\u6807\uff09\u5373\u53ef\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig leetcode_two_sum.java
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nint[] twoSumBruteForce(int[] nums, int target) {\nint size = nums.length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (int i = 0; i < size - 1; i++) {\nfor (int j = i + 1; j < size; j++) {\nif (nums[i] + nums[j] == target)\nreturn new int[] { i, j };\n}\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.cpp
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nvector<int> twoSumBruteForce(vector<int>& nums, int target) {\nint size = nums.size();\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (int i = 0; i < size - 1; i++) {\nfor (int j = i + 1; j < size; j++) {\nif (nums[i] + nums[j] == target)\nreturn { i, j };\n}\n}\nreturn {};\n}\n
    leetcode_two_sum.py
    def two_sum_brute_force(nums: List[int], target: int) -> List[int]:\n\"\"\" \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e \"\"\"\n# \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor i in range(len(nums) - 1):\nfor j in range(i + 1, len(nums)):\nif nums[i] + nums[j] == target:\nreturn [i, j]\nreturn []\n
    leetcode_two_sum.go
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunc twoSumBruteForce(nums []int, target int) []int {\nsize := len(nums)\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor i := 0; i < size-1; i++ {\nfor j := i + 1; i < size; j++ {\nif nums[i]+nums[j] == target {\nreturn []int{i, j}\n}\n}\n}\nreturn nil\n}\n
    leetcode_two_sum.js
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunction twoSumBruteForce(nums, target) {\nconst n = nums.length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (let i = 0; i < n; i++) {\nfor (let j = i + 1; j < n; j++) {\nif (nums[i] + nums[j] === target) {\nreturn [i, j];\n}\n}\n}\nreturn [];\n}\n
    leetcode_two_sum.ts
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunction twoSumBruteForce(nums: number[], target: number): number[] {\nconst n = nums.length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (let i = 0; i < n; i++) {\nfor (let j = i + 1; j < n; j++) {\nif (nums[i] + nums[j] === target) {\nreturn [i, j];\n}\n}\n}\nreturn [];\n};\n
    leetcode_two_sum.c
    [class]{}-[func]{twoSumBruteForce}\n
    leetcode_two_sum.cs
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nint[] twoSumBruteForce(int[] nums, int target)\n{\nint size = nums.Length;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor (int i = 0; i < size - 1; i++)\n{\nfor (int j = i + 1; j < size; j++)\n{\nif (nums[i] + nums[j] == target)\nreturn new int[] { i, j };\n}\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.swift
    /* \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e */\nfunc twoSumBruteForce(nums: [Int], target: Int) -> [Int] {\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nfor i in nums.indices.dropLast() {\nfor j in nums.indices.dropFirst(i + 1) {\nif nums[i] + nums[j] == target {\nreturn [i, j]\n}\n}\n}\nreturn [0]\n}\n
    leetcode_two_sum.zig
    // \u65b9\u6cd5\u4e00\uff1a\u66b4\u529b\u679a\u4e3e\nfn twoSumBruteForce(nums: []i32, target: i32) ?[2]i32 {\nvar size: usize = nums.len;\nvar i: usize = 0;\n// \u4e24\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n^2)\nwhile (i < size - 1) : (i += 1) {\nvar j = i + 1;\nwhile (j < size) : (j += 1) {\nif (nums[i] + nums[j] == target) {\nreturn [_]i32{@intCast(i32, i), @intCast(i32, j)};\n}\n}\n}\nreturn null;\n}\n

    \u8be5\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N^2)\\) \uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u5c5e\u4e8e\u65f6\u95f4\u6362\u7a7a\u95f4\u3002\u672c\u65b9\u6cd5\u65f6\u95f4\u590d\u6742\u5ea6\u8f83\u9ad8\uff0c\u5728\u5927\u6570\u636e\u91cf\u4e0b\u975e\u5e38\u8017\u65f6\u3002

    "},{"location":"chapter_computational_complexity/space_time_tradeoff/#_2","title":"\u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868","text":"

    \u8003\u8651\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868\uff0ckey \u4e3a\u6570\u7ec4\u5143\u7d20\u3001value \u4e3a\u5143\u7d20\u7d22\u5f15\u3002\u5faa\u73af\u904d\u5386\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e2a\u5143\u7d20 num \uff0c\u5e76\u6267\u884c\uff1a

    1. \u5224\u65ad\u6570\u5b57 target - num \u662f\u5426\u5728\u54c8\u5e0c\u8868\u4e2d\uff0c\u82e5\u662f\u5219\u76f4\u63a5\u8fd4\u56de\u8be5\u4e24\u4e2a\u5143\u7d20\u7684\u7d22\u5f15\uff1b
    2. \u5c06\u5143\u7d20 num \u548c\u5176\u7d22\u5f15\u6dfb\u52a0\u8fdb\u54c8\u5e0c\u8868\uff1b
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig leetcode_two_sum.java
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nint[] twoSumHashTable(int[] nums, int target) {\nint size = nums.length;\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nMap<Integer, Integer> dic = new HashMap<>();\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (int i = 0; i < size; i++) {\nif (dic.containsKey(target - nums[i])) {\nreturn new int[] { dic.get(target - nums[i]), i };\n}\ndic.put(nums[i], i);\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.cpp
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nvector<int> twoSumHashTable(vector<int>& nums, int target) {\nint size = nums.size();\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nunordered_map<int, int> dic;\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (int i = 0; i < size; i++) {\nif (dic.find(target - nums[i]) != dic.end()) {\nreturn { dic[target - nums[i]], i };\n}\ndic.emplace(nums[i], i);\n}\nreturn {};\n}\n
    leetcode_two_sum.py
    def two_sum_hash_table(nums: List[int], target: int) -> List[int]:\n\"\"\" \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 \"\"\"\n# \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\ndic = {}\n# \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor i in range(len(nums)):\nif target - nums[i] in dic:\nreturn [dic[target - nums[i]], i]\ndic[nums[i]] = i\nreturn []\n
    leetcode_two_sum.go
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunc twoSumHashTable(nums []int, target int) []int {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nhashTable := map[int]int{}\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor idx, val := range nums {\nif preIdx, ok := hashTable[target-val]; ok {\nreturn []int{preIdx, idx}\n}\nhashTable[val] = idx\n}\nreturn nil\n}\n
    leetcode_two_sum.js
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunction twoSumHashTable(nums, target) {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nlet m = {};\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (let i = 0; i < nums.length; i++) {\nif (m[nums[i]] !== undefined) {\nreturn [m[nums[i]], i];\n} else {\nm[target - nums[i]] = i;\n}\n}\nreturn [];\n}\n
    leetcode_two_sum.ts
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunction twoSumHashTable(nums: number[], target: number): number[] {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nlet m: Map<number, number> = new Map();\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (let i = 0; i < nums.length; i++) {\nlet index = m.get(nums[i]);\nif (index !== undefined) {\nreturn [index, i];\n} else {\nm.set(target - nums[i], i);\n}\n}\nreturn [];\n};\n
    leetcode_two_sum.c
    [class]{}-[func]{twoSumHashTable}\n
    leetcode_two_sum.cs
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nint[] twoSumHashTable(int[] nums, int target)\n{\nint size = nums.Length;\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nDictionary<int, int> dic = new();\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor (int i = 0; i < size; i++)\n{\nif (dic.ContainsKey(target - nums[i]))\n{\nreturn new int[] { dic[target - nums[i]], i };\n}\ndic.Add(nums[i], i);\n}\nreturn new int[0];\n}\n
    leetcode_two_sum.swift
    /* \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868 */\nfunc twoSumHashTable(nums: [Int], target: Int) -> [Int] {\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nvar dic: [Int: Int] = [:]\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nfor i in nums.indices {\nif let j = dic[target - nums[i]] {\nreturn [j, i]\n}\ndic[nums[i]] = i\n}\nreturn [0]\n}\n
    leetcode_two_sum.zig
    // \u65b9\u6cd5\u4e8c\uff1a\u8f85\u52a9\u54c8\u5e0c\u8868\nfn twoSumHashTable(nums: []i32, target: i32) !?[2]i32 {\nvar size: usize = nums.len;\n// \u8f85\u52a9\u54c8\u5e0c\u8868\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6 O(n)\nvar dic = std.AutoHashMap(i32, i32).init(std.heap.page_allocator);\ndefer dic.deinit();\nvar i: usize = 0;\n// \u5355\u5c42\u5faa\u73af\uff0c\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nwhile (i < size) : (i += 1) {\nif (dic.contains(target - nums[i])) {\nreturn [_]i32{dic.get(target - nums[i]).?, @intCast(i32, i)};\n}\ntry dic.put(nums[i], @intCast(i32, i));\n}\nreturn null;\n}\n

    \u8be5\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \uff0c\u4f53\u73b0\u7a7a\u95f4\u6362\u65f6\u95f4\u3002\u672c\u65b9\u6cd5\u867d\u7136\u5f15\u5165\u4e86\u989d\u5916\u7a7a\u95f4\u4f7f\u7528\uff0c\u4f46\u65f6\u95f4\u548c\u7a7a\u95f4\u4f7f\u7528\u6574\u4f53\u66f4\u52a0\u5747\u8861\uff0c\u56e0\u6b64\u4e3a\u672c\u9898\u6700\u4f18\u89e3\u6cd5\u3002

    "},{"location":"chapter_computational_complexity/summary/","title":"2.5. \u00a0 \u5c0f\u7ed3","text":""},{"location":"chapter_computational_complexity/summary/#_1","title":"\u7b97\u6cd5\u6548\u7387\u8bc4\u4f30","text":"
    • \u300c\u65f6\u95f4\u6548\u7387\u300d\u548c\u300c\u7a7a\u95f4\u6548\u7387\u300d\u662f\u7b97\u6cd5\u6027\u80fd\u7684\u4e24\u4e2a\u91cd\u8981\u7684\u8bc4\u4ef7\u7ef4\u5ea6\u3002
    • \u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u300c\u5b9e\u9645\u6d4b\u8bd5\u300d\u6765\u8bc4\u4f30\u7b97\u6cd5\u6548\u7387\uff0c\u4f46\u96be\u4ee5\u6392\u9664\u6d4b\u8bd5\u73af\u5883\u7684\u5e72\u6270\uff0c\u5e76\u4e14\u975e\u5e38\u8017\u8d39\u8ba1\u7b97\u8d44\u6e90\u3002
    • \u300c\u590d\u6742\u5ea6\u5206\u6790\u300d\u514b\u670d\u4e86\u5b9e\u9645\u6d4b\u8bd5\u7684\u5f0a\u7aef\uff0c\u5206\u6790\u7ed3\u679c\u9002\u7528\u4e8e\u6240\u6709\u8fd0\u884c\u5e73\u53f0\uff0c\u5e76\u4e14\u53ef\u4ee5\u4f53\u73b0\u4e0d\u540c\u6570\u636e\u5927\u5c0f\u4e0b\u7684\u7b97\u6cd5\u6548\u7387\u3002
    "},{"location":"chapter_computational_complexity/summary/#_2","title":"\u65f6\u95f4\u590d\u6742\u5ea6","text":"
    • \u300c\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u7edf\u8ba1\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf\uff0c\u53ef\u4ee5\u6709\u6548\u8bc4\u4f30\u7b97\u6cd5\u6548\u7387\uff0c\u4f46\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u53ef\u80fd\u5931\u6548\uff0c\u6bd4\u5982\u5728\u8f93\u5165\u6570\u636e\u91cf\u8f83\u5c0f\u6216\u65f6\u95f4\u590d\u6742\u5ea6\u76f8\u540c\u65f6\uff0c\u65e0\u6cd5\u7cbe\u786e\u5bf9\u6bd4\u7b97\u6cd5\u6548\u7387\u7684\u4f18\u52a3\u6027\u3002
    • \u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u4f7f\u7528\u5927 \\(O\\) \u7b26\u53f7\u8868\u793a\uff0c\u5373\u51fd\u6570\u6e10\u8fd1\u4e0a\u754c\uff0c\u5176\u53cd\u6620\u5f53 \\(n\\) \u8d8b\u4e8e\u6b63\u65e0\u7a77\u65f6\uff0c\\(T(n)\\) \u5904\u4e8e\u4f55\u79cd\u589e\u957f\u7ea7\u522b\u3002
    • \u63a8\u7b97\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u4e3a\u4e24\u6b65\uff0c\u9996\u5148\u7edf\u8ba1\u8ba1\u7b97\u64cd\u4f5c\u6570\u91cf\uff0c\u518d\u5224\u65ad\u6e10\u8fd1\u4e0a\u754c\u3002
    • \u5e38\u89c1\u65f6\u95f4\u590d\u6742\u5ea6\u4ece\u5c0f\u5230\u5927\u6392\u5217\u6709 \\(O(1)\\) , \\(O(\\log n)\\) , \\(O(n)\\) , \\(O(n \\log n)\\) , \\(O(n^2)\\) , \\(O(2^n)\\) , \\(O(n!)\\) \u3002
    • \u67d0\u4e9b\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u662f\u6052\u5b9a\u7684\uff0c\u800c\u662f\u4e0e\u8f93\u5165\u6570\u636e\u7684\u5206\u5e03\u6709\u5173\u3002\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u4e3a\u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u548c\u300c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u300d\uff0c\u540e\u8005\u51e0\u4e4e\u4e0d\u7528\uff0c\u56e0\u4e3a\u8f93\u5165\u6570\u636e\u9700\u8981\u6ee1\u8db3\u82db\u523b\u7684\u6761\u4ef6\u624d\u80fd\u8fbe\u5230\u6700\u4f73\u60c5\u51b5\u3002
    • \u300c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u53ef\u4ee5\u53cd\u6620\u5728\u968f\u673a\u6570\u636e\u8f93\u5165\u4e0b\u7684\u7b97\u6cd5\u6548\u7387\uff0c\u6700\u8d34\u5408\u5b9e\u9645\u4f7f\u7528\u60c5\u51b5\u4e0b\u7684\u7b97\u6cd5\u6027\u80fd\u3002\u8ba1\u7b97\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u9700\u8981\u7edf\u8ba1\u8f93\u5165\u6570\u636e\u7684\u5206\u5e03\uff0c\u4ee5\u53ca\u7efc\u5408\u540e\u7684\u6570\u5b66\u671f\u671b\u3002
    "},{"location":"chapter_computational_complexity/summary/#_3","title":"\u7a7a\u95f4\u590d\u6742\u5ea6","text":"
    • \u4e0e\u65f6\u95f4\u590d\u6742\u5ea6\u7684\u5b9a\u4e49\u7c7b\u4f3c\uff0c\u300c\u7a7a\u95f4\u590d\u6742\u5ea6\u300d\u7edf\u8ba1\u7b97\u6cd5\u5360\u7528\u7a7a\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf\u3002

    • \u7b97\u6cd5\u8fd0\u884c\u4e2d\u76f8\u5173\u5185\u5b58\u7a7a\u95f4\u53ef\u5206\u4e3a\u8f93\u5165\u7a7a\u95f4\u3001\u6682\u5b58\u7a7a\u95f4\u3001\u8f93\u51fa\u7a7a\u95f4\u3002\u901a\u5e38\u60c5\u51b5\u4e0b\uff0c\u8f93\u5165\u7a7a\u95f4\u4e0d\u8ba1\u5165\u7a7a\u95f4\u590d\u6742\u5ea6\u8ba1\u7b97\u3002\u6682\u5b58\u7a7a\u95f4\u53ef\u5206\u4e3a\u6307\u4ee4\u7a7a\u95f4\u3001\u6570\u636e\u7a7a\u95f4\u3001\u6808\u5e27\u7a7a\u95f4\uff0c\u5176\u4e2d\u6808\u5e27\u7a7a\u95f4\u4e00\u822c\u5728\u9012\u5f52\u51fd\u6570\u4e2d\u624d\u4f1a\u5f71\u54cd\u5230\u7a7a\u95f4\u590d\u6742\u5ea6\u3002

    • \u6211\u4eec\u4e00\u822c\u53ea\u5173\u5fc3\u300c\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u300d\uff0c\u5373\u7edf\u8ba1\u7b97\u6cd5\u5728\u300c\u6700\u5dee\u8f93\u5165\u6570\u636e\u300d\u548c\u300c\u6700\u5dee\u8fd0\u884c\u65f6\u95f4\u70b9\u300d\u4e0b\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u3002
    • \u5e38\u89c1\u7a7a\u95f4\u590d\u6742\u5ea6\u4ece\u5c0f\u5230\u5927\u6392\u5217\u6709 \\(O(1)\\) , \\(O(\\log n)\\) , \\(O(n)\\) , \\(O(n^2)\\) , \\(O(2^n)\\) \u3002
    "},{"location":"chapter_computational_complexity/time_complexity/","title":"2.2. \u00a0 \u65f6\u95f4\u590d\u6742\u5ea6","text":""},{"location":"chapter_computational_complexity/time_complexity/#221","title":"2.2.1. \u00a0 \u7edf\u8ba1\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4","text":"

    \u8fd0\u884c\u65f6\u95f4\u80fd\u591f\u76f4\u89c2\u4e14\u51c6\u786e\u5730\u4f53\u73b0\u51fa\u7b97\u6cd5\u7684\u6548\u7387\u6c34\u5e73\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981 \u51c6\u786e\u9884\u4f30\u4e00\u6bb5\u4ee3\u7801\u7684\u8fd0\u884c\u65f6\u95f4 \uff0c\u8be5\u5982\u4f55\u505a\u5462\uff1f

    1. \u9996\u5148\u9700\u8981 \u786e\u5b9a\u8fd0\u884c\u5e73\u53f0 \uff0c\u5305\u62ec\u786c\u4ef6\u914d\u7f6e\u3001\u7f16\u7a0b\u8bed\u8a00\u3001\u7cfb\u7edf\u73af\u5883\u7b49\uff0c\u8fd9\u4e9b\u90fd\u4f1a\u5f71\u54cd\u5230\u4ee3\u7801\u7684\u8fd0\u884c\u6548\u7387\u3002
    2. \u8bc4\u4f30 \u5404\u79cd\u8ba1\u7b97\u64cd\u4f5c\u7684\u6240\u9700\u8fd0\u884c\u65f6\u95f4 \uff0c\u4f8b\u5982\u52a0\u6cd5\u64cd\u4f5c + \u9700\u8981 1 ns \uff0c\u4e58\u6cd5\u64cd\u4f5c * \u9700\u8981 10 ns \uff0c\u6253\u5370\u64cd\u4f5c\u9700\u8981 5 ns \u7b49\u3002
    3. \u6839\u636e\u4ee3\u7801 \u7edf\u8ba1\u6240\u6709\u8ba1\u7b97\u64cd\u4f5c\u7684\u6570\u91cf \uff0c\u5e76\u5c06\u6240\u6709\u64cd\u4f5c\u7684\u6267\u884c\u65f6\u95f4\u6c42\u548c\uff0c\u5373\u53ef\u5f97\u5230\u8fd0\u884c\u65f6\u95f4\u3002

    \u4f8b\u5982\u4ee5\u4e0b\u4ee3\u7801\uff0c\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u6839\u636e\u4ee5\u4e0a\u65b9\u6cd5\uff0c\u53ef\u4ee5\u5f97\u5230\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u4e3a \\(6n + 12\\) ns \u3002

    \\[ 1 + 1 + 10 + (1 + 5) \\times n = 6n + 12 \\] JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n) {\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {  // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nSystem.out.println(0);     // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n) {\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {  // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\ncout << 0 << endl;         // 5 ns\n}\n}\n
    # \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\ndef algorithm(n: int) -> None:\na = 2      # 1 ns\na = a + 1  # 1 ns\na = a * 2  # 10 ns\n# \u5faa\u73af n \u6b21\nfor _ in range(n):  # 1 ns\nprint(0)        # 5 ns\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunc algorithm(n int) {\na := 2      // 1 ns\na = a + 1   // 1 ns\na = a * 2   // 10 ns\n// \u5faa\u73af n \u6b21\nfor i := 0; i < n; i++ {    // 1 ns\nfmt.Println(a)          // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunction algorithm(n) {\nvar a = 2; // 1 ns\na = a + 1; // 1 ns\na = a * 2; // 10 ns\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++) { // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nconsole.log(0); // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunction algorithm(n: number): void {\nvar a: number = 2; // 1 ns\na = a + 1; // 1 ns\na = a * 2; // 10 ns\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++) { // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nconsole.log(0); // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n) {\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {   // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nprintf(\"%d\", 0);            // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nvoid algorithm(int n)\n{\nint a = 2;  // 1 ns\na = a + 1;  // 1 ns\na = a * 2;  // 10 ns\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++)\n{  // 1 ns \uff0c\u6bcf\u8f6e\u90fd\u8981\u6267\u884c i++\nConsole.WriteLine(0);     // 5 ns\n}\n}\n
    // \u5728\u67d0\u8fd0\u884c\u5e73\u53f0\u4e0b\nfunc algorithm(n: Int) {\nvar a = 2 // 1 ns\na = a + 1 // 1 ns\na = a * 2 // 10 ns\n// \u5faa\u73af n \u6b21\nfor _ in 0 ..< n { // 1 ns\nprint(0) // 5 ns\n}\n}\n
    \n

    \u4f46\u5b9e\u9645\u4e0a\uff0c \u7edf\u8ba1\u7b97\u6cd5\u7684\u8fd0\u884c\u65f6\u95f4\u65e2\u4e0d\u5408\u7406\u4e5f\u4e0d\u73b0\u5b9e\u3002\u9996\u5148\uff0c\u6211\u4eec\u4e0d\u5e0c\u671b\u9884\u4f30\u65f6\u95f4\u548c\u8fd0\u884c\u5e73\u53f0\u7ed1\u5b9a\uff0c\u6bd5\u7adf\u7b97\u6cd5\u9700\u8981\u8dd1\u5728\u5404\u5f0f\u5404\u6837\u7684\u5e73\u53f0\u4e4b\u4e0a\u3002\u5176\u6b21\uff0c\u6211\u4eec\u5f88\u96be\u83b7\u77e5\u6bcf\u4e00\u79cd\u64cd\u4f5c\u7684\u8fd0\u884c\u65f6\u95f4\uff0c\u8fd9\u4e3a\u9884\u4f30\u8fc7\u7a0b\u5e26\u6765\u4e86\u6781\u5927\u7684\u96be\u5ea6\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#222","title":"2.2.2. \u00a0 \u7edf\u8ba1\u65f6\u95f4\u589e\u957f\u8d8b\u52bf","text":"

    \u300c\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u6790\u300d\u91c7\u53d6\u4e86\u4e0d\u540c\u7684\u505a\u6cd5\uff0c\u5176\u7edf\u8ba1\u7684\u4e0d\u662f\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\uff0c\u800c\u662f \u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u968f\u7740\u6570\u636e\u91cf\u53d8\u5927\u65f6\u7684\u589e\u957f\u8d8b\u52bf \u3002

    \u201c\u65f6\u95f4\u589e\u957f\u8d8b\u52bf\u201d\u8fd9\u4e2a\u6982\u5ff5\u6bd4\u8f83\u62bd\u8c61\uff0c\u6211\u4eec\u501f\u52a9\u4e00\u4e2a\u4f8b\u5b50\u6765\u7406\u89e3\u3002\u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u7ed9\u5b9a\u4e09\u4e2a\u7b97\u6cd5 A , B , C \u3002

    • \u7b97\u6cd5 A \u53ea\u6709 \\(1\\) \u4e2a\u6253\u5370\u64cd\u4f5c\uff0c\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u4e0d\u968f\u7740 \\(n\\) \u589e\u5927\u800c\u589e\u957f\u3002\u6211\u4eec\u79f0\u6b64\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a\u300c\u5e38\u6570\u9636\u300d\u3002
    • \u7b97\u6cd5 B \u4e2d\u7684\u6253\u5370\u64cd\u4f5c\u9700\u8981\u5faa\u73af \\(n\\) \u6b21\uff0c\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u968f\u7740 \\(n\\) \u589e\u5927\u6210\u7ebf\u6027\u589e\u957f\u3002\u6b64\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u88ab\u79f0\u4e3a\u300c\u7ebf\u6027\u9636\u300d\u3002
    • \u7b97\u6cd5 C \u4e2d\u7684\u6253\u5370\u64cd\u4f5c\u9700\u8981\u5faa\u73af \\(1000000\\) \u6b21\uff0c\u4f46\u8fd0\u884c\u65f6\u95f4\u4ecd\u4e0e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\u3002\u56e0\u6b64 C \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u548c A \u76f8\u540c\uff0c\u4ecd\u4e3a\u300c\u5e38\u6570\u9636\u300d\u3002
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n) {\nSystem.out.println(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n) {\nfor (int i = 0; i < n; i++) {\nSystem.out.println(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n) {\nfor (int i = 0; i < 1000000; i++) {\nSystem.out.println(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n) {\ncout << 0 << endl;\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n) {\nfor (int i = 0; i < n; i++) {\ncout << 0 << endl;\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n) {\nfor (int i = 0; i < 1000000; i++) {\ncout << 0 << endl;\n}\n}\n
    # \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\ndef algorithm_A(n: int) -> None:\nprint(0)\n# \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\ndef algorithm_B(n: int) -> None:\nfor _ in range(n):\nprint(0)\n# \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\ndef algorithm_C(n: int) -> None:\nfor _ in range(1000000):\nprint(0)\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithm_A(n int) {\nfmt.Println(0)\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunc algorithm_B(n int) {\nfor i := 0; i < n; i++ {\nfmt.Println(0)\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithm_C(n int) {\nfor i := 0; i < 1000000; i++ {\nfmt.Println(0)\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_A(n) {\nconsole.log(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunction algorithm_B(n) {\nfor (let i = 0; i < n; i++) {\nconsole.log(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_C(n) {\nfor (let i = 0; i < 1000000; i++) {\nconsole.log(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_A(n: number): void {\nconsole.log(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunction algorithm_B(n: number): void {\nfor (let i = 0; i < n; i++) {\nconsole.log(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunction algorithm_C(n: number): void {\nfor (let i = 0; i < 1000000; i++) {\nconsole.log(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n) {\nprintf(\"%d\", 0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n) {\nfor (int i = 0; i < n; i++) {\nprintf(\"%d\", 0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n) {\nfor (int i = 0; i < 1000000; i++) {\nprintf(\"%d\", 0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_A(int n)\n{\nConsole.WriteLine(0);\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nvoid algorithm_B(int n)\n{\nfor (int i = 0; i < n; i++)\n{\nConsole.WriteLine(0);\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nvoid algorithm_C(int n)\n{\nfor (int i = 0; i < 1000000; i++)\n{\nConsole.WriteLine(0);\n}\n}\n
    // \u7b97\u6cd5 A \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithmA(n: Int) {\nprint(0)\n}\n// \u7b97\u6cd5 B \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u7ebf\u6027\u9636\nfunc algorithmB(n: Int) {\nfor _ in 0 ..< n {\nprint(0)\n}\n}\n// \u7b97\u6cd5 C \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u5e38\u6570\u9636\nfunc algorithmC(n: Int) {\nfor _ in 0 ..< 1000000 {\nprint(0)\n}\n}\n
    \n

    Fig. \u7b97\u6cd5 A, B, C \u7684\u65f6\u95f4\u589e\u957f\u8d8b\u52bf

    \u76f8\u6bd4\u76f4\u63a5\u7edf\u8ba1\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u6790\u7684\u505a\u6cd5\u6709\u4ec0\u4e48\u597d\u5904\u5462\uff1f\u4ee5\u53ca\u6709\u4ec0\u4e48\u4e0d\u8db3\uff1f

    \u65f6\u95f4\u590d\u6742\u5ea6\u53ef\u4ee5\u6709\u6548\u8bc4\u4f30\u7b97\u6cd5\u6548\u7387\u3002\u7b97\u6cd5 B \u8fd0\u884c\u65f6\u95f4\u7684\u589e\u957f\u662f\u7ebf\u6027\u7684\uff0c\u5728 \\(n > 1\\) \u65f6\u6162\u4e8e\u7b97\u6cd5 A \uff0c\u5728 \\(n > 1000000\\) \u65f6\u6162\u4e8e\u7b97\u6cd5 C \u3002\u5b9e\u8d28\u4e0a\uff0c\u53ea\u8981\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u8db3\u591f\u5927\uff0c\u590d\u6742\u5ea6\u4e3a\u300c\u5e38\u6570\u9636\u300d\u7684\u7b97\u6cd5\u4e00\u5b9a\u4f18\u4e8e\u300c\u7ebf\u6027\u9636\u300d\u7684\u7b97\u6cd5\uff0c\u8fd9\u4e5f\u6b63\u662f\u65f6\u95f4\u589e\u957f\u8d8b\u52bf\u7684\u542b\u4e49\u3002

    \u65f6\u95f4\u590d\u6742\u5ea6\u7684\u63a8\u7b97\u65b9\u6cd5\u66f4\u52a0\u7b80\u4fbf\u3002\u5728\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u6790\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u7edf\u8ba1\u300c\u8ba1\u7b97\u64cd\u4f5c\u7684\u8fd0\u884c\u65f6\u95f4\u300d\u7b80\u5316\u4e3a\u7edf\u8ba1\u300c\u8ba1\u7b97\u64cd\u4f5c\u7684\u6570\u91cf\u300d\uff0c\u8fd9\u662f\u56e0\u4e3a\uff0c\u65e0\u8bba\u662f\u8fd0\u884c\u5e73\u53f0\u8fd8\u662f\u8ba1\u7b97\u64cd\u4f5c\u7c7b\u578b\uff0c\u90fd\u4e0e\u7b97\u6cd5\u8fd0\u884c\u65f6\u95f4\u7684\u589e\u957f\u8d8b\u52bf\u65e0\u5173\u3002\u56e0\u800c\uff0c\u6211\u4eec\u53ef\u4ee5\u7b80\u5355\u5730\u5c06\u6240\u6709\u8ba1\u7b97\u64cd\u4f5c\u7684\u6267\u884c\u65f6\u95f4\u7edf\u4e00\u770b\u4f5c\u662f\u76f8\u540c\u7684\u201c\u5355\u4f4d\u65f6\u95f4\u201d\uff0c\u8fd9\u6837\u7684\u7b80\u5316\u505a\u6cd5\u5927\u5927\u964d\u4f4e\u4e86\u4f30\u7b97\u96be\u5ea6\u3002

    \u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u5b58\u5728\u4e00\u5b9a\u7684\u5c40\u9650\u6027\u3002\u6bd4\u5982\uff0c\u867d\u7136\u7b97\u6cd5 A \u548c C \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u76f8\u540c\uff0c\u4f46\u662f\u5b9e\u9645\u7684\u8fd0\u884c\u65f6\u95f4\u6709\u975e\u5e38\u5927\u7684\u5dee\u522b\u3002\u518d\u6bd4\u5982\uff0c\u867d\u7136\u7b97\u6cd5 B \u6bd4 C \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8981\u66f4\u9ad8\uff0c\u4f46\u5728\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u6bd4\u8f83\u5c0f\u65f6\uff0c\u7b97\u6cd5 B \u662f\u8981\u660e\u663e\u4f18\u4e8e\u7b97\u6cd5 C \u7684\u3002\u5bf9\u4e8e\u4ee5\u4e0a\u60c5\u51b5\uff0c\u6211\u4eec\u5f88\u96be\u4ec5\u51ed\u65f6\u95f4\u590d\u6742\u5ea6\u6765\u5224\u5b9a\u7b97\u6cd5\u6548\u7387\u9ad8\u4f4e\u3002\u7136\u800c\uff0c\u5373\u4f7f\u5b58\u5728\u8fd9\u4e9b\u95ee\u9898\uff0c\u590d\u6742\u5ea6\u5206\u6790\u4ecd\u7136\u662f\u8bc4\u5224\u7b97\u6cd5\u6548\u7387\u7684\u6700\u6709\u6548\u4e14\u5e38\u7528\u7684\u65b9\u6cd5\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#223","title":"2.2.3. \u00a0 \u51fd\u6570\u6e10\u8fd1\u4e0a\u754c","text":"

    \u8bbe\u7b97\u6cd5\u300c\u8ba1\u7b97\u64cd\u4f5c\u6570\u91cf\u300d\u4e3a \\(T(n)\\) \uff0c\u5176\u662f\u4e00\u4e2a\u5173\u4e8e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u7684\u51fd\u6570\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u7b97\u6cd5\u7684\u64cd\u4f5c\u6570\u91cf\u4e3a

    \\[ T(n) = 3 + 2n \\] JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    void algorithm(int n) {\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) { // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nSystem.out.println(0);    // +1\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) { // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\ncout << 0 << endl;    // +1\n}\n}\n
    def algorithm(n: int) -> None:\na: int = 1  # +1\na = a + 1  # +1\na = a * 2  # +1\n# \u5faa\u73af n \u6b21\nfor i in range(n):  # +1\nprint(0)        # +1\n
    func algorithm(n int) {\na := 1      // +1\na = a + 1   // +1\na = a * 2   // +1\n// \u5faa\u73af n \u6b21\nfor i := 0; i < n; i++ {   // +1\nfmt.Println(a)         // +1\n}\n}\n
    function algorithm(n) {\nvar a = 1; // +1\na += 1; // +1\na *= 2; // +1\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++){ // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nconsole.log(0); // +1\n}\n}\n
    function algorithm(n: number): void{\nvar a: number = 1; // +1\na += 1; // +1\na *= 2; // +1\n// \u5faa\u73af n \u6b21\nfor(let i = 0; i < n; i++){ // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nconsole.log(0); // +1\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) {   // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\nprintf(\"%d\", 0);            // +1\n}\n}  
    void algorithm(int n)\n{\nint a = 1;  // +1\na = a + 1;  // +1\na = a * 2;  // +1\n// \u5faa\u73af n \u6b21\nfor (int i = 0; i < n; i++) // +1\uff08\u6bcf\u8f6e\u90fd\u6267\u884c i ++\uff09\n{\nConsole.WriteLine(0);   // +1\n}\n}\n
    func algorithm(n: Int) {\nvar a = 1 // +1\na = a + 1 // +1\na = a * 2 // +1\n// \u5faa\u73af n \u6b21\nfor _ in 0 ..< n { // +1\nprint(0) // +1\n}\n}\n
    \n

    \\(T(n)\\) \u662f\u4e2a\u4e00\u6b21\u51fd\u6570\uff0c\u8bf4\u660e\u65f6\u95f4\u589e\u957f\u8d8b\u52bf\u662f\u7ebf\u6027\u7684\uff0c\u56e0\u6b64\u6613\u5f97\u65f6\u95f4\u590d\u6742\u5ea6\u662f\u7ebf\u6027\u9636\u3002

    \u6211\u4eec\u5c06\u7ebf\u6027\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u8bb0\u4e3a \\(O(n)\\) \uff0c\u8fd9\u4e2a\u6570\u5b66\u7b26\u53f7\u88ab\u79f0\u4e3a\u300c\u5927 \\(O\\) \u8bb0\u53f7 Big-\\(O\\) Notation\u300d\uff0c\u4ee3\u8868\u51fd\u6570 \\(T(n)\\) \u7684\u300c\u6e10\u8fd1\u4e0a\u754c asymptotic upper bound\u300d\u3002

    \u6211\u4eec\u8981\u63a8\u7b97\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u672c\u8d28\u4e0a\u662f\u5728\u8ba1\u7b97\u300c\u64cd\u4f5c\u6570\u91cf\u51fd\u6570 \\(T(n)\\) \u300d\u7684\u6e10\u8fd1\u4e0a\u754c\u3002\u4e0b\u9762\u6211\u4eec\u5148\u6765\u770b\u770b\u51fd\u6570\u6e10\u8fd1\u4e0a\u754c\u7684\u6570\u5b66\u5b9a\u4e49\u3002

    \u51fd\u6570\u6e10\u8fd1\u4e0a\u754c

    \u82e5\u5b58\u5728\u6b63\u5b9e\u6570 \\(c\\) \u548c\u5b9e\u6570 \\(n_0\\) \uff0c\u4f7f\u5f97\u5bf9\u4e8e\u6240\u6709\u7684 \\(n > n_0\\) \uff0c\u5747\u6709 $$ T(n) \\leq c \\cdot f(n) $$ \u5219\u53ef\u8ba4\u4e3a \\(f(n)\\) \u7ed9\u51fa\u4e86 \\(T(n)\\) \u7684\u4e00\u4e2a\u6e10\u8fd1\u4e0a\u754c\uff0c\u8bb0\u4e3a $$ T(n) = O(f(n)) $$

    Fig. \u51fd\u6570\u7684\u6e10\u8fd1\u4e0a\u754c

    \u672c\u8d28\u4e0a\u770b\uff0c\u8ba1\u7b97\u6e10\u8fd1\u4e0a\u754c\u5c31\u662f\u5728\u627e\u4e00\u4e2a\u51fd\u6570 \\(f(n)\\) \uff0c\u4f7f\u5f97\u5728 \\(n\\) \u8d8b\u5411\u4e8e\u65e0\u7a77\u5927\u65f6\uff0c\\(T(n)\\) \u548c \\(f(n)\\) \u5904\u4e8e\u76f8\u540c\u7684\u589e\u957f\u7ea7\u522b\uff08\u4ec5\u76f8\u5dee\u4e00\u4e2a\u5e38\u6570\u9879 \\(c\\) \u7684\u500d\u6570\uff09\u3002

    Tip

    \u6e10\u8fd1\u4e0a\u754c\u7684\u6570\u5b66\u5473\u513f\u6709\u70b9\u91cd\uff0c\u5982\u679c\u4f60\u611f\u89c9\u6ca1\u6709\u5b8c\u5168\u7406\u89e3\uff0c\u65e0\u9700\u62c5\u5fc3\uff0c\u56e0\u4e3a\u5728\u5b9e\u9645\u4f7f\u7528\u4e2d\u6211\u4eec\u53ea\u9700\u8981\u4f1a\u63a8\u7b97\u5373\u53ef\uff0c\u6570\u5b66\u610f\u4e49\u53ef\u4ee5\u6162\u6162\u9886\u609f\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#224","title":"2.2.4. \u00a0 \u63a8\u7b97\u65b9\u6cd5","text":"

    \u63a8\u7b97\u51fa \\(f(n)\\) \u540e\uff0c\u6211\u4eec\u5c31\u5f97\u5230\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(f(n))\\) \u3002\u90a3\u4e48\uff0c\u5982\u4f55\u6765\u786e\u5b9a\u6e10\u8fd1\u4e0a\u754c \\(f(n)\\) \u5462\uff1f\u603b\u4f53\u5206\u4e3a\u4e24\u6b65\uff0c\u9996\u5148\u300c\u7edf\u8ba1\u64cd\u4f5c\u6570\u91cf\u300d\uff0c\u7136\u540e\u300c\u5224\u65ad\u6e10\u8fd1\u4e0a\u754c\u300d\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#1","title":"1) \u7edf\u8ba1\u64cd\u4f5c\u6570\u91cf","text":"

    \u5bf9\u7740\u4ee3\u7801\uff0c\u4ece\u4e0a\u5230\u4e0b\u4e00\u884c\u4e00\u884c\u5730\u8ba1\u6570\u5373\u53ef\u3002\u7136\u800c\uff0c\u7531\u4e8e\u4e0a\u8ff0 \\(c \\cdot f(n)\\) \u4e2d\u7684\u5e38\u6570\u9879 \\(c\\) \u53ef\u4ee5\u53d6\u4efb\u610f\u5927\u5c0f\uff0c\u56e0\u6b64\u64cd\u4f5c\u6570\u91cf \\(T(n)\\) \u4e2d\u7684\u5404\u79cd\u7cfb\u6570\u3001\u5e38\u6570\u9879\u90fd\u53ef\u4ee5\u88ab\u5ffd\u7565\u3002\u6839\u636e\u6b64\u539f\u5219\uff0c\u53ef\u4ee5\u603b\u7ed3\u51fa\u4ee5\u4e0b\u8ba1\u6570\u5077\u61d2\u6280\u5de7\uff1a

    1. \u8df3\u8fc7\u6570\u91cf\u4e0e \\(n\\) \u65e0\u5173\u7684\u64cd\u4f5c\u3002\u56e0\u4e3a\u4ed6\u4eec\u90fd\u662f \\(T(n)\\) \u4e2d\u7684\u5e38\u6570\u9879\uff0c\u5bf9\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u4ea7\u751f\u5f71\u54cd\u3002
    2. \u7701\u7565\u6240\u6709\u7cfb\u6570\u3002\u4f8b\u5982\uff0c\u5faa\u73af \\(2n\\) \u6b21\u3001\\(5n + 1\\) \u6b21\u3001\u2026\u2026\uff0c\u90fd\u53ef\u4ee5\u5316\u7b80\u8bb0\u4e3a \\(n\\) \u6b21\uff0c\u56e0\u4e3a \\(n\\) \u524d\u9762\u7684\u7cfb\u6570\u5bf9\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u4e0d\u4ea7\u751f\u5f71\u54cd\u3002
    3. \u5faa\u73af\u5d4c\u5957\u65f6\u4f7f\u7528\u4e58\u6cd5\u3002\u603b\u64cd\u4f5c\u6570\u91cf\u7b49\u4e8e\u5916\u5c42\u5faa\u73af\u548c\u5185\u5c42\u5faa\u73af\u64cd\u4f5c\u6570\u91cf\u4e4b\u79ef\uff0c\u6bcf\u4e00\u5c42\u5faa\u73af\u4f9d\u7136\u53ef\u4ee5\u5206\u522b\u5957\u7528\u4e0a\u8ff0 1. \u548c 2. \u6280\u5de7\u3002

    \u4ee5\u4e0b\u793a\u4f8b\u5c55\u793a\u4e86\u4f7f\u7528\u4e0a\u8ff0\u6280\u5de7\u524d\u3001\u540e\u7684\u7edf\u8ba1\u7ed3\u679c\u3002

    \\[ \\begin{aligned} T(n) & = 2n(n + 1) + (5n + 1) + 2 & \\text{\u5b8c\u6574\u7edf\u8ba1 (-.-|||)} \\newline & = 2n^2 + 7n + 3 \\newline T(n) & = n^2 + n & \\text{\u5077\u61d2\u7edf\u8ba1 (o.O)} \\end{aligned} \\]

    \u6700\u7ec8\uff0c\u4e24\u8005\u90fd\u80fd\u63a8\u51fa\u76f8\u540c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7ed3\u679c\uff0c\u5373 \\(O(n^2)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    void algorithm(int n) {\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++) {\nSystem.out.println(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++) {\nfor (int j = 0; j < n + 1; j++) {\nSystem.out.println(0);\n}\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++) {\ncout << 0 << endl;\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++) {\nfor (int j = 0; j < n + 1; j++) {\ncout << 0 << endl;\n}\n}\n}\n
    def algorithm(n: int) -> None:\na: int = 1  # +0\uff08\u6280\u5de7 1\uff09\na = a + n   # +0\uff08\u6280\u5de7 1\uff09\n# +n\uff08\u6280\u5de7 2\uff09\nfor i in range(5 * n + 1):\nprint(0)\n# +n*n\uff08\u6280\u5de7 3\uff09\nfor i in range(2 * n):\nfor j in range(n + 1):\nprint(0)\n
    func algorithm(n int) {\na := 1      // +0\uff08\u6280\u5de7 1\uff09\na = a + n  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor i := 0; i < 5 * n + 1; i++ {\nfmt.Println(0)\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor i := 0; i < 2 * n; i++ {\nfor j := 0; j < n + 1; j++ {\nfmt.Println(0)\n}\n}\n}\n
    function algorithm(n) {\nlet a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (let i = 0; i < 5 * n + 1; i++) {\nconsole.log(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (let i = 0; i < 2 * n; i++) {\nfor (let j = 0; j < n + 1; j++) {\nconsole.log(0);\n}\n}\n}\n
    function algorithm(n: number): void {\nlet a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (let i = 0; i < 5 * n + 1; i++) {\nconsole.log(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (let i = 0; i < 2 * n; i++) {\nfor (let j = 0; j < n + 1; j++) {\nconsole.log(0);\n}\n}\n}\n
    void algorithm(int n) {\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++) {\nprintf(\"%d\", 0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++) {\nfor (int j = 0; j < n + 1; j++) {\nprintf(\"%d\", 0);\n}\n}\n}\n
    void algorithm(int n)\n{\nint a = 1;  // +0\uff08\u6280\u5de7 1\uff09\na = a + n;  // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor (int i = 0; i < 5 * n + 1; i++)\n{\nConsole.WriteLine(0);\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor (int i = 0; i < 2 * n; i++)\n{\nfor (int j = 0; j < n + 1; j++)\n{\nConsole.WriteLine(0);\n}\n}\n}\n
    func algorithm(n: Int) {\nvar a = 1 // +0\uff08\u6280\u5de7 1\uff09\na = a + n // +0\uff08\u6280\u5de7 1\uff09\n// +n\uff08\u6280\u5de7 2\uff09\nfor _ in 0 ..< (5 * n + 1) {\nprint(0)\n}\n// +n*n\uff08\u6280\u5de7 3\uff09\nfor _ in 0 ..< (2 * n) {\nfor _ in 0 ..< (n + 1) {\nprint(0)\n}\n}\n}\n
    \n
    "},{"location":"chapter_computational_complexity/time_complexity/#2","title":"2) \u5224\u65ad\u6e10\u8fd1\u4e0a\u754c","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\u7531\u591a\u9879\u5f0f \\(T(n)\\) \u4e2d\u6700\u9ad8\u9636\u7684\u9879\u6765\u51b3\u5b9a\u3002\u8fd9\u662f\u56e0\u4e3a\u5728 \\(n\\) \u8d8b\u4e8e\u65e0\u7a77\u5927\u65f6\uff0c\u6700\u9ad8\u9636\u7684\u9879\u5c06\u5904\u4e8e\u4e3b\u5bfc\u4f5c\u7528\uff0c\u5176\u5b83\u9879\u7684\u5f71\u54cd\u90fd\u53ef\u4ee5\u88ab\u5ffd\u7565\u3002

    \u4ee5\u4e0b\u8868\u683c\u7ed9\u51fa\u4e86\u4e00\u4e9b\u4f8b\u5b50\uff0c\u5176\u4e2d\u6709\u4e00\u4e9b\u5938\u5f20\u7684\u503c\uff0c\u662f\u60f3\u8981\u5411\u5927\u5bb6\u5f3a\u8c03 \u7cfb\u6570\u65e0\u6cd5\u64bc\u52a8\u9636\u6570 \u8fd9\u4e00\u7ed3\u8bba\u3002\u5728 \\(n\\) \u8d8b\u4e8e\u65e0\u7a77\u5927\u65f6\uff0c\u8fd9\u4e9b\u5e38\u6570\u90fd\u662f\u201c\u6d6e\u4e91\u201d\u3002

    \u64cd\u4f5c\u6570\u91cf \\(T(n)\\) \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(f(n))\\) \\(100000\\) \\(O(1)\\) \\(3n + 2\\) \\(O(n)\\) \\(2n^2 + 3n + 2\\) \\(O(n^2)\\) \\(n^3 + 10000n^2\\) \\(O(n^3)\\) \\(2^n + 10000n^{10000}\\) \\(O(2^n)\\)"},{"location":"chapter_computational_complexity/time_complexity/#225","title":"2.2.5. \u00a0 \u5e38\u89c1\u7c7b\u578b","text":"

    \u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u5e38\u89c1\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7c7b\u578b\u6709\uff08\u4ece\u4f4e\u5230\u9ad8\u6392\u5217\uff09

    \\[ \\begin{aligned} O(1) < O(\\log n) < O(n) < O(n \\log n) < O(n^2) < O(2^n) < O(n!) \\newline \\text{\u5e38\u6570\u9636} < \\text{\u5bf9\u6570\u9636} < \\text{\u7ebf\u6027\u9636} < \\text{\u7ebf\u6027\u5bf9\u6570\u9636} < \\text{\u5e73\u65b9\u9636} < \\text{\u6307\u6570\u9636} < \\text{\u9636\u4e58\u9636} \\end{aligned} \\]

    Fig. \u65f6\u95f4\u590d\u6742\u5ea6\u7684\u5e38\u89c1\u7c7b\u578b

    Tip

    \u90e8\u5206\u793a\u4f8b\u4ee3\u7801\u9700\u8981\u4e00\u4e9b\u524d\u7f6e\u77e5\u8bc6\uff0c\u5305\u62ec\u6570\u7ec4\u3001\u9012\u5f52\u7b97\u6cd5\u7b49\u3002\u5982\u679c\u9047\u5230\u770b\u4e0d\u61c2\u7684\u5730\u65b9\u65e0\u9700\u62c5\u5fc3\uff0c\u53ef\u4ee5\u5728\u5b66\u4e60\u5b8c\u540e\u9762\u7ae0\u8282\u540e\u518d\u6765\u590d\u4e60\uff0c\u73b0\u9636\u6bb5\u5148\u805a\u7126\u5728\u7406\u89e3\u65f6\u95f4\u590d\u6742\u5ea6\u542b\u4e49\u548c\u63a8\u7b97\u65b9\u6cd5\u4e0a\u3002

    "},{"location":"chapter_computational_complexity/time_complexity/#o1","title":"\u5e38\u6570\u9636 \\(O(1)\\)","text":"

    \u5e38\u6570\u9636\u7684\u64cd\u4f5c\u6570\u91cf\u4e0e\u8f93\u5165\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\uff0c\u5373\u4e0d\u968f\u7740 \\(n\\) \u7684\u53d8\u5316\u800c\u53d8\u5316\u3002

    \u5bf9\u4e8e\u4ee5\u4e0b\u7b97\u6cd5\uff0c\u65e0\u8bba\u64cd\u4f5c\u6570\u91cf size \u6709\u591a\u5927\uff0c\u53ea\u8981\u4e0e\u6570\u636e\u5927\u5c0f \\(n\\) \u65e0\u5173\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u5c31\u4ecd\u4e3a \\(O(1)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5e38\u6570\u9636 */\nint constant(int n) {\nint count = 0;\nint size = 100000;\nfor (int i = 0; i < size; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5e38\u6570\u9636 */\nint constant(int n) {\nint count = 0;\nint size = 100000;\nfor (int i = 0; i < size; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.py
    def constant(n: int) -> int:\n\"\"\" \u5e38\u6570\u9636 \"\"\"\ncount: int = 0\nsize: int = 100000\nfor _ in range(size):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u5e38\u6570\u9636 */\nfunc constant(n int) int {\ncount := 0\nsize := 100000\nfor i := 0; i < size; i++ {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5e38\u6570\u9636 */\nfunction constant(n) {\nlet count = 0;\nconst size = 100000;\nfor (let i = 0; i < size; i++) count++;\nreturn count;\n}\n
    time_complexity.ts
    /* \u5e38\u6570\u9636 */\nfunction constant(n: number): number {\nlet count = 0;\nconst size = 100000;\nfor (let i = 0; i < size; i++) count++;\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{constant}\n
    time_complexity.cs
    /* \u5e38\u6570\u9636 */\nint constant(int n)\n{\nint count = 0;\nint size = 100000;\nfor (int i = 0; i < size; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.swift
    /* \u5e38\u6570\u9636 */\nfunc constant(n: Int) -> Int {\nvar count = 0\nlet size = 100_000\nfor _ in 0 ..< size {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5e38\u6570\u9636\nfn constant(n: i32) i32 {\n_ = n;\nvar count: i32 = 0;\nconst size: i32 = 100_000;\nvar i: i32 = 0;\nwhile(i<size) : (i += 1) {\ncount += 1;\n}\nreturn count;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#on","title":"\u7ebf\u6027\u9636 \\(O(n)\\)","text":"

    \u7ebf\u6027\u9636\u7684\u64cd\u4f5c\u6570\u91cf\u76f8\u5bf9\u8f93\u5165\u6570\u636e\u5927\u5c0f\u6210\u7ebf\u6027\u7ea7\u522b\u589e\u957f\u3002\u7ebf\u6027\u9636\u5e38\u51fa\u73b0\u4e8e\u5355\u5c42\u5faa\u73af\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u7ebf\u6027\u9636 */\nint linear(int n) {\nint count = 0;\nfor (int i = 0; i < n; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.cpp
    /* \u7ebf\u6027\u9636 */\nint linear(int n) {\nint count = 0;\nfor (int i = 0; i < n; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.py
    def linear(n: int) -> int:\n\"\"\" \u7ebf\u6027\u9636 \"\"\"\ncount: int = 0\nfor _ in range(n):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u7ebf\u6027\u9636 */\nfunc linear(n int) int {\ncount := 0\nfor i := 0; i < n; i++ {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u7ebf\u6027\u9636 */\nfunction linear(n) {\nlet count = 0;\nfor (let i = 0; i < n; i++) count++;\nreturn count;\n}\n
    time_complexity.ts
    /* \u7ebf\u6027\u9636 */\nfunction linear(n: number): number {\nlet count = 0;\nfor (let i = 0; i < n; i++) count++;\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{linear}\n
    time_complexity.cs
    /* \u7ebf\u6027\u9636 */\nint linear(int n)\n{\nint count = 0;\nfor (int i = 0; i < n; i++)\ncount++;\nreturn count;\n}\n
    time_complexity.swift
    /* \u7ebf\u6027\u9636 */\nfunc linear(n: Int) -> Int {\nvar count = 0\nfor _ in 0 ..< n {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u7ebf\u6027\u9636\nfn linear(n: i32) i32 {\nvar count: i32 = 0;\nvar i: i32 = 0;\nwhile (i < n) : (i += 1) {\ncount += 1;\n}\nreturn count;\n}\n

    \u300c\u904d\u5386\u6570\u7ec4\u300d\u548c\u300c\u904d\u5386\u94fe\u8868\u300d\u7b49\u64cd\u4f5c\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(n)\\) \uff0c\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u7684\u957f\u5ea6\u3002

    Tip

    \u6570\u636e\u5927\u5c0f \\(n\\) \u662f\u6839\u636e\u8f93\u5165\u6570\u636e\u7684\u7c7b\u578b\u6765\u786e\u5b9a\u7684\u3002\u6bd4\u5982\uff0c\u5728\u4e0a\u8ff0\u793a\u4f8b\u4e2d\uff0c\u6211\u4eec\u76f4\u63a5\u5c06 \\(n\\) \u770b\u4f5c\u8f93\u5165\u6570\u636e\u5927\u5c0f\uff1b\u4ee5\u4e0b\u904d\u5386\u6570\u7ec4\u793a\u4f8b\u4e2d\uff0c\u6570\u636e\u5927\u5c0f \\(n\\) \u4e3a\u6570\u7ec4\u7684\u957f\u5ea6\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nint arrayTraversal(int[] nums) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (int num : nums) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nint arrayTraversal(vector<int>& nums) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (int num : nums) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.py
    def array_traversal(nums: List[int]) -> int:\n\"\"\" \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09\"\"\"\ncount: int = 0\n# \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor num in nums:\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunc arrayTraversal(nums []int) int {\ncount := 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor range nums {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunction arrayTraversal(nums) {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunction arrayTraversal(nums: number[]): number {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (let i = 0; i < nums.length; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{arrayTraversal}\n
    time_complexity.cs
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nint arrayTraversal(int[] nums)\n{\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nforeach (int num in nums)\n{\ncount++;\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09 */\nfunc arrayTraversal(nums: [Int]) -> Int {\nvar count = 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor _ in nums {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u7ebf\u6027\u9636\uff08\u904d\u5386\u6570\u7ec4\uff09\nfn arrayTraversal(nums: []i32) i32 {\nvar count: i32 = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u6b63\u6bd4\nfor (nums) |_| {\ncount += 1;\n}\nreturn count;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#on2","title":"\u5e73\u65b9\u9636 \\(O(n^2)\\)","text":"

    \u5e73\u65b9\u9636\u7684\u64cd\u4f5c\u6570\u91cf\u76f8\u5bf9\u8f93\u5165\u6570\u636e\u5927\u5c0f\u6210\u5e73\u65b9\u7ea7\u522b\u589e\u957f\u3002\u5e73\u65b9\u9636\u5e38\u51fa\u73b0\u4e8e\u5d4c\u5957\u5faa\u73af\uff0c\u5916\u5c42\u5faa\u73af\u548c\u5185\u5c42\u5faa\u73af\u90fd\u4e3a \\(O(n)\\) \uff0c\u603b\u4f53\u4e3a \\(O(n^2)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5e73\u65b9\u9636 */\nint quadratic(int n) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5e73\u65b9\u9636 */\nint quadratic(int n) {\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.py
    def quadratic(n: int) -> int:\n\"\"\" \u5e73\u65b9\u9636 \"\"\"\ncount: int = 0\n# \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor i in range(n):\nfor j in range(n):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u5e73\u65b9\u9636 */\nfunc quadratic(n int) int {\ncount := 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor i := 0; i < n; i++ {\nfor j := 0; j < n; j++ {\ncount++\n}\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n) {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u5e73\u65b9\u9636 */\nfunction quadratic(n: number): number {\nlet count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < n; j++) {\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{quadratic}\n
    time_complexity.cs
    /* \u5e73\u65b9\u9636 */\nint quadratic(int n)\n{\nint count = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor (int i = 0; i < n; i++)\n{\nfor (int j = 0; j < n; j++)\n{\ncount++;\n}\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u5e73\u65b9\u9636 */\nfunc quadratic(n: Int) -> Int {\nvar count = 0\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nfor _ in 0 ..< n {\nfor _ in 0 ..< n {\ncount += 1\n}\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5e73\u65b9\u9636\nfn quadratic(n: i32) i32 {\nvar count: i32 = 0;\nvar i: i32 = 0;\n// \u5faa\u73af\u6b21\u6570\u4e0e\u6570\u7ec4\u957f\u5ea6\u6210\u5e73\u65b9\u5173\u7cfb\nwhile (i < n) : (i += 1) {\nvar j: i32 = 0;\nwhile (j < n) : (j += 1) {\ncount += 1;\n}\n}\nreturn count;\n}\n

    Fig. \u5e38\u6570\u9636\u3001\u7ebf\u6027\u9636\u3001\u5e73\u65b9\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    \u4ee5\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u4e3a\u4f8b\uff0c\u5916\u5c42\u5faa\u73af \\(n - 1\\) \u6b21\uff0c\u5185\u5c42\u5faa\u73af \\(n-1, n-2, \\cdots, 2, 1\\) \u6b21\uff0c\u5e73\u5747\u4e3a \\(\\frac{n}{2}\\) \u6b21\uff0c\u56e0\u6b64\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \u3002

    \\[ O((n - 1) \\frac{n}{2}) = O(n^2) \\] JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nint bubbleSort(int[] nums) {\nint count = 0;  // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nint bubbleSort(vector<int>& nums) {\nint count = 0;  // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.size() - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.py
    def bubble_sort(nums: List[int]) -> int:\n\"\"\" \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09\"\"\"\ncount: int = 0  # \u8ba1\u6570\u5668\n# \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in range(len(nums) - 1, 0, -1):\n# \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in range(i):\nif nums[j] > nums[j + 1]:\n# \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\ntmp: int = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\ncount += 3  # \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\nreturn count\n
    time_complexity.go
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunc bubbleSort(nums []int) int {\ncount := 0 // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := len(nums) - 1; i > 0; i-- {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j := 0; j < i; j++ {\nif nums[j] > nums[j+1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\ntmp := nums[j]\nnums[j] = nums[j+1]\nnums[j+1] = tmp\ncount += 3 // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunction bubbleSort(nums) {\nlet count = 0; // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3; // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunction bubbleSort(nums: number[]): number {\nlet count = 0; // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3; // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{bubbleSort}\n
    time_complexity.cs
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nint bubbleSort(int[] nums)\n{\nint count = 0;  // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.Length - 1; i > 0; i--)\n{\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++)\n{\nif (nums[j] > nums[j + 1])\n{\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09 */\nfunc bubbleSort(nums: inout [Int]) -> Int {\nvar count = 0 // \u8ba1\u6570\u5668\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in sequence(first: nums.count - 1, next: { $0 > 0 + 1 ? $0 - 1 : nil }) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in 0 ..< i {\nif nums[j] > nums[j + 1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\ncount += 3 // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5e73\u65b9\u9636\uff08\u5192\u6ce1\u6392\u5e8f\uff09\nfn bubbleSort(nums: []i32) i32 {\nvar count: i32 = 0;  // \u8ba1\u6570\u5668 \n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nvar i: i32 = @intCast(i32, nums.len ) - 1;\nwhile (i > 0) : (i -= 1) {\nvar j: usize = 0;\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nwhile (j < i) : (j += 1) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nvar tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\ncount += 3;  // \u5143\u7d20\u4ea4\u6362\u5305\u542b 3 \u4e2a\u5355\u5143\u64cd\u4f5c\n}\n}\n}\nreturn count;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#o2n","title":"\u6307\u6570\u9636 \\(O(2^n)\\)","text":"

    Note

    \u751f\u7269\u5b66\u79d1\u4e2d\u7684\u201c\u7ec6\u80de\u5206\u88c2\u201d\u5373\u662f\u6307\u6570\u9636\u589e\u957f\uff1a\u521d\u59cb\u72b6\u6001\u4e3a \\(1\\) \u4e2a\u7ec6\u80de\uff0c\u5206\u88c2\u4e00\u8f6e\u540e\u4e3a \\(2\\) \u4e2a\uff0c\u5206\u88c2\u4e24\u8f6e\u540e\u4e3a \\(4\\) \u4e2a\uff0c\u2026\u2026\uff0c\u5206\u88c2 \\(n\\) \u8f6e\u540e\u6709 \\(2^n\\) \u4e2a\u7ec6\u80de\u3002

    \u6307\u6570\u9636\u589e\u957f\u5f97\u975e\u5e38\u5feb\uff0c\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u4e00\u822c\u662f\u4e0d\u80fd\u88ab\u63a5\u53d7\u7684\u3002\u82e5\u4e00\u4e2a\u95ee\u9898\u4f7f\u7528\u300c\u66b4\u529b\u679a\u4e3e\u300d\u6c42\u89e3\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f \\(O(2^n)\\) \uff0c\u90a3\u4e48\u4e00\u822c\u90fd\u9700\u8981\u4f7f\u7528\u300c\u52a8\u6001\u89c4\u5212\u300d\u6216\u300c\u8d2a\u5fc3\u7b97\u6cd5\u300d\u7b49\u7b97\u6cd5\u6765\u6c42\u89e3\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint exponential(int n) {\nint count = 0, base = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.cpp
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint exponential(int n) {\nint count = 0, base = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (int i = 0; i < n; i++) {\nfor (int j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.py
    def exponential(n: int) -> int:\n\"\"\" \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\"\"\"\ncount: int = 0\nbase: int = 1\n# cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor _ in range(n):\nfor _ in range(base):\ncount += 1\nbase *= 2\n# count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count\n
    time_complexity.go
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09*/\nfunc exponential(n int) int {\ncount, base := 0, 1\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor i := 0; i < n; i++ {\nfor j := 0; j < base; j++ {\ncount++\n}\nbase *= 2\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count\n}\n
    time_complexity.js
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction exponential(n) {\nlet count = 0,\nbase = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.ts
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction exponential(n: number): number {\nlet count = 0,\nbase = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (let i = 0; i < n; i++) {\nfor (let j = 0; j < base; j++) {\ncount++;\n}\nbase *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{exponential}\n
    time_complexity.cs
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint exponential(int n)\n{\nint count = 0, bas = 1;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor (int i = 0; i < n; i++)\n{\nfor (int j = 0; j < bas; j++)\n{\ncount++;\n}\nbas *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n
    time_complexity.swift
    /* \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunc exponential(n: Int) -> Int {\nvar count = 0\nvar base = 1\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nfor _ in 0 ..< n {\nfor _ in 0 ..< base {\ncount += 1\n}\nbase *= 2\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count\n}\n
    time_complexity.zig
    // \u6307\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\nfn exponential(n: i32) i32 {\nvar count: i32 = 0;\nvar bas: i32 = 1;\nvar i: i32 = 0;\n// cell \u6bcf\u8f6e\u4e00\u5206\u4e3a\u4e8c\uff0c\u5f62\u6210\u6570\u5217 1, 2, 4, 8, ..., 2^(n-1)\nwhile (i < n) : (i += 1) {\nvar j: i32 = 0;\nwhile (j < bas) : (j += 1) {\ncount += 1;\n}\nbas *= 2;\n}\n// count = 1 + 2 + 4 + 8 + .. + 2^(n-1) = 2^n - 1\nreturn count;\n}\n

    Fig. \u6307\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    \u5728\u5b9e\u9645\u7b97\u6cd5\u4e2d\uff0c\u6307\u6570\u9636\u5e38\u51fa\u73b0\u4e8e\u9012\u5f52\u51fd\u6570\u3002\u4f8b\u5982\u4ee5\u4e0b\u4ee3\u7801\uff0c\u4e0d\u65ad\u5730\u4e00\u5206\u4e3a\u4e8c\uff0c\u5206\u88c2 \\(n\\) \u6b21\u540e\u505c\u6b62\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint expRecur(int n) {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.cpp
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint expRecur(int n) {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.py
    def exp_recur(n: int) -> int:\n\"\"\" \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\"\"\"\nif n == 1: return 1\nreturn exp_recur(n - 1) + exp_recur(n - 1) + 1\n
    time_complexity.go
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09*/\nfunc expRecur(n int) int {\nif n == 1 {\nreturn 1\n}\nreturn expRecur(n-1) + expRecur(n-1) + 1\n}\n
    time_complexity.js
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction expRecur(n) {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.ts
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction expRecur(n: number): number {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.c
    [class]{}-[func]{expRecur}\n
    time_complexity.cs
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint expRecur(int n)\n{\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    time_complexity.swift
    /* \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc expRecur(n: Int) -> Int {\nif n == 1 {\nreturn 1\n}\nreturn expRecur(n: n - 1) + expRecur(n: n - 1) + 1\n}\n
    time_complexity.zig
    // \u6307\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn expRecur(n: i32) i32 {\nif (n == 1) return 1;\nreturn expRecur(n - 1) + expRecur(n - 1) + 1;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#olog-n","title":"\u5bf9\u6570\u9636 \\(O(\\log n)\\)","text":"

    \u5bf9\u6570\u9636\u4e0e\u6307\u6570\u9636\u6b63\u597d\u76f8\u53cd\uff0c\u540e\u8005\u53cd\u6620\u201c\u6bcf\u8f6e\u589e\u52a0\u5230\u4e24\u500d\u7684\u60c5\u51b5\u201d\uff0c\u800c\u524d\u8005\u53cd\u6620\u201c\u6bcf\u8f6e\u7f29\u51cf\u5230\u4e00\u534a\u7684\u60c5\u51b5\u201d\u3002\u5bf9\u6570\u9636\u4ec5\u6b21\u4e8e\u5e38\u6570\u9636\uff0c\u65f6\u95f4\u589e\u957f\u5f97\u5f88\u6162\uff0c\u662f\u7406\u60f3\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u3002

    \u5bf9\u6570\u9636\u5e38\u51fa\u73b0\u4e8e\u300c\u4e8c\u5206\u67e5\u627e\u300d\u548c\u300c\u5206\u6cbb\u7b97\u6cd5\u300d\u4e2d\uff0c\u4f53\u73b0\u201c\u4e00\u5206\u4e3a\u591a\u201d\u3001\u201c\u5316\u7e41\u4e3a\u7b80\u201d\u7684\u7b97\u6cd5\u601d\u60f3\u3002

    \u8bbe\u8f93\u5165\u6570\u636e\u5927\u5c0f\u4e3a \\(n\\) \uff0c\u7531\u4e8e\u6bcf\u8f6e\u7f29\u51cf\u5230\u4e00\u534a\uff0c\u56e0\u6b64\u5faa\u73af\u6b21\u6570\u662f \\(\\log_2 n\\) \uff0c\u5373 \\(2^n\\) \u7684\u53cd\u51fd\u6570\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint logarithmic(float n) {\nint count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint logarithmic(float n) {\nint count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.py
    def logarithmic(n: float) -> int:\n\"\"\" \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\"\"\"\ncount: int = 0\nwhile n > 1:\nn = n / 2\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09*/\nfunc logarithmic(n float64) int {\ncount := 0\nfor n > 1 {\nn = n / 2\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction logarithmic(n) {\nlet count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunction logarithmic(n: number): number {\nlet count = 0;\nwhile (n > 1) {\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{logarithmic}\n
    time_complexity.cs
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nint logarithmic(float n)\n{\nint count = 0;\nwhile (n > 1)\n{\nn = n / 2;\ncount++;\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09 */\nfunc logarithmic(n: Double) -> Int {\nvar count = 0\nvar n = n\nwhile n > 1 {\nn = n / 2\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u5bf9\u6570\u9636\uff08\u5faa\u73af\u5b9e\u73b0\uff09\nfn logarithmic(n: f32) i32 {\nvar count: i32 = 0;\nvar n_var = n;\nwhile (n_var > 1)\n{\nn_var = n_var / 2;\ncount +=1;\n}\nreturn count;\n}\n

    Fig. \u5bf9\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    \u4e0e\u6307\u6570\u9636\u7c7b\u4f3c\uff0c\u5bf9\u6570\u9636\u4e5f\u5e38\u51fa\u73b0\u4e8e\u9012\u5f52\u51fd\u6570\u3002\u4ee5\u4e0b\u4ee3\u7801\u5f62\u6210\u4e86\u4e00\u4e2a\u9ad8\u5ea6\u4e3a \\(\\log_2 n\\) \u7684\u9012\u5f52\u6811\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint logRecur(float n) {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.cpp
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint logRecur(float n) {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.py
    def log_recur(n: float) -> int:\n\"\"\" \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\"\"\"\nif n <= 1: return 0\nreturn log_recur(n / 2) + 1\n
    time_complexity.go
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09*/\nfunc logRecur(n float64) int {\nif n <= 1 {\nreturn 0\n}\nreturn logRecur(n/2) + 1\n}\n
    time_complexity.js
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction logRecur(n) {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.ts
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction logRecur(n: number): number {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.c
    [class]{}-[func]{logRecur}\n
    time_complexity.cs
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint logRecur(float n)\n{\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    time_complexity.swift
    /* \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc logRecur(n: Double) -> Int {\nif n <= 1 {\nreturn 0\n}\nreturn logRecur(n: n / 2) + 1\n}\n
    time_complexity.zig
    // \u5bf9\u6570\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn logRecur(n: f32) i32 {\nif (n <= 1) return 0;\nreturn logRecur(n / 2) + 1;\n}\n
    "},{"location":"chapter_computational_complexity/time_complexity/#on-log-n","title":"\u7ebf\u6027\u5bf9\u6570\u9636 \\(O(n \\log n)\\)","text":"

    \u7ebf\u6027\u5bf9\u6570\u9636\u5e38\u51fa\u73b0\u4e8e\u5d4c\u5957\u5faa\u73af\u4e2d\uff0c\u4e24\u5c42\u5faa\u73af\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5206\u522b\u4e3a \\(O(\\log n)\\) \u548c \\(O(n)\\) \u3002

    \u4e3b\u6d41\u6392\u5e8f\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u662f \\(O(n \\log n )\\) \uff0c\u4f8b\u5982\u5feb\u901f\u6392\u5e8f\u3001\u5f52\u5e76\u6392\u5e8f\u3001\u5806\u6392\u5e8f\u7b49\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nint linearLogRecur(float n) {\nif (n <= 1) return 1;\nint count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (int i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nint linearLogRecur(float n) {\nif (n <= 1) return 1;\nint count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (int i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.py
    def linear_log_recur(n: float) -> int:\n\"\"\" \u7ebf\u6027\u5bf9\u6570\u9636 \"\"\"\nif n <= 1: return 1\ncount: int = linear_log_recur(n // 2) + \\\n                 linear_log_recur(n // 2)\nfor _ in range(n):\ncount += 1\nreturn count\n
    time_complexity.go
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunc linearLogRecur(n float64) int {\nif n <= 1 {\nreturn 1\n}\ncount := linearLogRecur(n/2) +\nlinearLogRecur(n/2)\nfor i := 0.0; i < n; i++ {\ncount++\n}\nreturn count\n}\n
    time_complexity.js
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunction linearLogRecur(n) {\nif (n <= 1) return 1;\nlet count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (let i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunction linearLogRecur(n: number): number {\nif (n <= 1) return 1;\nlet count = linearLogRecur(n / 2) + linearLogRecur(n / 2);\nfor (let i = 0; i < n; i++) {\ncount++;\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{linearLogRecur}\n
    time_complexity.cs
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nint linearLogRecur(float n)\n{\nif (n <= 1) return 1;\nint count = linearLogRecur(n / 2) +\nlinearLogRecur(n / 2);\nfor (int i = 0; i < n; i++)\n{\ncount++;\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u7ebf\u6027\u5bf9\u6570\u9636 */\nfunc linearLogRecur(n: Double) -> Int {\nif n <= 1 {\nreturn 1\n}\nvar count = linearLogRecur(n: n / 2) + linearLogRecur(n: n / 2)\nfor _ in sequence(first: 0, next: { $0 < n - 1 ? $0 + 1 : nil }) {\ncount += 1\n}\nreturn count\n}\n
    time_complexity.zig
    // \u7ebf\u6027\u5bf9\u6570\u9636\nfn linearLogRecur(n: f32) i32 {\nif (n <= 1) return 1;\nvar count: i32 = linearLogRecur(n / 2) +\nlinearLogRecur(n / 2);\nvar i: f32 = 0;\nwhile (i < n) : (i += 1) {\ncount += 1;\n}\nreturn count;\n}\n

    Fig. \u7ebf\u6027\u5bf9\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/time_complexity/#on_1","title":"\u9636\u4e58\u9636 \\(O(n!)\\)","text":"

    \u9636\u4e58\u9636\u5bf9\u5e94\u6570\u5b66\u4e0a\u7684\u300c\u5168\u6392\u5217\u300d\u3002\u5373\u7ed9\u5b9a \\(n\\) \u4e2a\u4e92\u4e0d\u91cd\u590d\u7684\u5143\u7d20\uff0c\u6c42\u5176\u6240\u6709\u53ef\u80fd\u7684\u6392\u5217\u65b9\u6848\uff0c\u5219\u65b9\u6848\u6570\u91cf\u4e3a

    \\[ n! = n \\times (n - 1) \\times (n - 2) \\times \\cdots \\times 2 \\times 1 \\]

    \u9636\u4e58\u5e38\u4f7f\u7528\u9012\u5f52\u5b9e\u73b0\u3002\u4f8b\u5982\u4ee5\u4e0b\u4ee3\u7801\uff0c\u7b2c\u4e00\u5c42\u5206\u88c2\u51fa \\(n\\) \u4e2a\uff0c\u7b2c\u4e8c\u5c42\u5206\u88c2\u51fa \\(n - 1\\) \u4e2a\uff0c\u2026\u2026 \uff0c\u76f4\u81f3\u5230\u7b2c \\(n\\) \u5c42\u65f6\u7ec8\u6b62\u5206\u88c2\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig time_complexity.java
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint factorialRecur(int n) {\nif (n == 0) return 1;\nint count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (int i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.cpp
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint factorialRecur(int n) {\nif (n == 0) return 1;\nint count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (int i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.py
    def factorial_recur(n: int) -> int:\n\"\"\" \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\"\"\"\nif n == 0: return 1\ncount: int = 0\n# \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor _ in range(n):\ncount += factorial_recur(n - 1)\nreturn count\n
    time_complexity.go
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc factorialRecur(n int) int {\nif n == 0 {\nreturn 1\n}\ncount := 0\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor i := 0; i < n; i++ {\ncount += factorialRecur(n - 1)\n}\nreturn count\n}\n
    time_complexity.js
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction factorialRecur(n) {\nif (n == 0) return 1;\nlet count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (let i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.ts
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunction factorialRecur(n: number): number {\nif (n == 0) return 1;\nlet count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (let i = 0; i < n; i++) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.c
    [class]{}-[func]{factorialRecur}\n
    time_complexity.cs
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nint factorialRecur(int n)\n{\nif (n == 0) return 1;\nint count = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor (int i = 0; i < n; i++)\n{\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n
    time_complexity.swift
    /* \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09 */\nfunc factorialRecur(n: Int) -> Int {\nif n == 0 {\nreturn 1\n}\nvar count = 0\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nfor _ in 0 ..< n {\ncount += factorialRecur(n: n - 1)\n}\nreturn count\n}\n
    time_complexity.zig
    // \u9636\u4e58\u9636\uff08\u9012\u5f52\u5b9e\u73b0\uff09\nfn factorialRecur(n: i32) i32 {\nif (n == 0) return 1;\nvar count: i32 = 0;\nvar i: i32 = 0;\n// \u4ece 1 \u4e2a\u5206\u88c2\u51fa n \u4e2a\nwhile (i < n) : (i += 1) {\ncount += factorialRecur(n - 1);\n}\nreturn count;\n}\n

    Fig. \u9636\u4e58\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6

    "},{"location":"chapter_computational_complexity/time_complexity/#226","title":"2.2.6. \u00a0 \u6700\u5dee\u3001\u6700\u4f73\u3001\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6","text":"

    \u67d0\u4e9b\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u662f\u6052\u5b9a\u7684\uff0c\u800c\u662f\u4e0e\u8f93\u5165\u6570\u636e\u7684\u5206\u5e03\u6709\u5173\u3002\u4e3e\u4e00\u4e2a\u4f8b\u5b50\uff0c\u8f93\u5165\u4e00\u4e2a\u957f\u5ea6\u4e3a \\(n\\) \u6570\u7ec4 nums \uff0c\u5176\u4e2d nums \u7531\u4ece \\(1\\) \u81f3 \\(n\\) \u7684\u6570\u5b57\u7ec4\u6210\uff0c\u4f46\u5143\u7d20\u987a\u5e8f\u662f\u968f\u673a\u6253\u4e71\u7684\uff1b\u7b97\u6cd5\u7684\u4efb\u52a1\u662f\u8fd4\u56de\u5143\u7d20 \\(1\\) \u7684\u7d22\u5f15\u3002\u6211\u4eec\u53ef\u4ee5\u5f97\u51fa\u4ee5\u4e0b\u7ed3\u8bba\uff1a

    • \u5f53 nums = [?, ?, ..., 1]\uff0c\u5373\u5f53\u672b\u5c3e\u5143\u7d20\u662f \\(1\\) \u65f6\uff0c\u5219\u9700\u5b8c\u6574\u904d\u5386\u6570\u7ec4\uff0c\u6b64\u65f6\u8fbe\u5230 \u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1b
    • \u5f53 nums = [1, ?, ?, ...] \uff0c\u5373\u5f53\u9996\u4e2a\u6570\u5b57\u4e3a \\(1\\) \u65f6\uff0c\u65e0\u8bba\u6570\u7ec4\u591a\u957f\u90fd\u4e0d\u9700\u8981\u7ee7\u7eed\u904d\u5386\uff0c\u6b64\u65f6\u8fbe\u5230 \u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 \\(\\Omega(1)\\) \uff1b

    \u300c\u51fd\u6570\u6e10\u8fd1\u4e0a\u754c\u300d\u4f7f\u7528\u5927 \\(O\\) \u8bb0\u53f7\u8868\u793a\uff0c\u4ee3\u8868\u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u3002\u4e0e\u4e4b\u5bf9\u5e94\uff0c\u300c\u51fd\u6570\u6e10\u8fd1\u4e0b\u754c\u300d\u7528 \\(\\Omega\\) \u8bb0\u53f7\uff08Omega Notation\uff09\u6765\u8868\u793a\uff0c\u4ee3\u8868\u300c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig worst_best_time_complexity.java
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nint[] randomNumbers(int n) {\nInteger[] nums = new Integer[n];\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (int i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nCollections.shuffle(Arrays.asList(nums));\n// Integer[] -> int[]\nint[] res = new int[n];\nfor (int i = 0; i < n; i++) {\nres[i] = nums[i];\n}\nreturn res;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nint findOne(int[] nums) {\nfor (int i = 0; i < nums.length; i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] == 1)\nreturn i;\n}\nreturn -1;\n}\n
    worst_best_time_complexity.cpp
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nvector<int> randomNumbers(int n) {\nvector<int> nums(n);\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (int i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u4f7f\u7528\u7cfb\u7edf\u65f6\u95f4\u751f\u6210\u968f\u673a\u79cd\u5b50\nunsigned seed = chrono::system_clock::now().time_since_epoch().count();\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nshuffle(nums.begin(), nums.end(), default_random_engine(seed));\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nint findOne(vector<int>& nums) {\nfor (int i = 0; i < nums.size(); i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] == 1)\nreturn i;\n}\nreturn -1;\n}\n
    worst_best_time_complexity.py
    def random_numbers(n: int) -> List[int]:\n\"\"\" \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a: 1, 2, ..., n \uff0c\u987a\u5e8f\u88ab\u6253\u4e71 \"\"\"\n# \u751f\u6210\u6570\u7ec4 nums =: 1, 2, 3, ..., n\nnums: List[int] = [i for i in range(1, n + 1)]\n# \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nrandom.shuffle(nums)\nreturn nums\ndef find_one(nums: List[int]) -> int:\n\"\"\" \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 \"\"\"\nfor i in range(len(nums)):\n# \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n# \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif nums[i] == 1:\nreturn i\nreturn -1\n
    worst_best_time_complexity.go
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunc randomNumbers(n int) []int {\nnums := make([]int, n)\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor i := 0; i < n; i++ {\nnums[i] = i + 1\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nrand.Shuffle(len(nums), func(i, j int) {\nnums[i], nums[j] = nums[j], nums[i]\n})\nreturn nums\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunc findOne(nums []int) int {\nfor i := 0; i < len(nums); i++ {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif nums[i] == 1 {\nreturn i\n}\n}\nreturn -1\n}\n
    worst_best_time_complexity.js
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunction randomNumbers(n) {\nconst nums = Array(n);\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (let i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nfor (let i = 0; i < n; i++) {\nconst r = Math.floor(Math.random() * (i + 1));\nconst temp = nums[i];\nnums[i] = nums[r];\nnums[r] = temp;\n}\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunction findOne(nums) {\nfor (let i = 0; i < nums.length; i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] === 1) {\nreturn i;\n}\n}\nreturn -1;\n}\n
    worst_best_time_complexity.ts
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunction randomNumbers(n: number): number[] {\nconst nums = Array(n);\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (let i = 0; i < n; i++) {\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nfor (let i = 0; i < n; i++) {\nconst r = Math.floor(Math.random() * (i + 1));\nconst temp = nums[i];\nnums[i] = nums[r];\nnums[r] = temp;\n}\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunction findOne(nums: number[]): number {\nfor (let i = 0; i < nums.length; i++) {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] === 1) {\nreturn i;\n}\n}\nreturn -1;\n}\n
    worst_best_time_complexity.c
    [class]{}-[func]{randomNumbers}\n[class]{}-[func]{findOne}\n
    worst_best_time_complexity.cs
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nint[] randomNumbers(int n)\n{\nint[] nums = new int[n];\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (int i = 0; i < n; i++)\n{\nnums[i] = i + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nfor (int i = 0; i < nums.Length; i++)\n{\nvar index = new Random().Next(i, nums.Length);\nvar tmp = nums[i];\nvar ran = nums[index];\nnums[i] = ran;\nnums[index] = tmp;\n}\nreturn nums;\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nint findOne(int[] nums)\n{\nfor (int i = 0; i < nums.Length; i++)\n{\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (nums[i] == 1)\nreturn i;\n}\nreturn -1;\n}\n
    worst_best_time_complexity.swift
    /* \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71 */\nfunc randomNumbers(n: Int) -> [Int] {\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nvar nums = Array(1 ... n)\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nnums.shuffle()\nreturn nums\n}\n/* \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15 */\nfunc findOne(nums: [Int]) -> Int {\nfor i in nums.indices {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif nums[i] == 1 {\nreturn i\n}\n}\nreturn -1\n}\n
    worst_best_time_complexity.zig
    // \u751f\u6210\u4e00\u4e2a\u6570\u7ec4\uff0c\u5143\u7d20\u4e3a { 1, 2, ..., n }\uff0c\u987a\u5e8f\u88ab\u6253\u4e71\npub fn randomNumbers(comptime n: usize) [n]i32 {\nvar nums: [n]i32 = undefined;\n// \u751f\u6210\u6570\u7ec4 nums = { 1, 2, 3, ..., n }\nfor (nums) |*num, i| {\nnum.* = @intCast(i32, i) + 1;\n}\n// \u968f\u673a\u6253\u4e71\u6570\u7ec4\u5143\u7d20\nconst rand = std.crypto.random;\nrand.shuffle(i32, &nums);\nreturn nums;\n}\n// \u67e5\u627e\u6570\u7ec4 nums \u4e2d\u6570\u5b57 1 \u6240\u5728\u7d22\u5f15\npub fn findOne(nums: []i32) i32 {\nfor (nums) |num, i| {\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5934\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 O(1)\n// \u5f53\u5143\u7d20 1 \u5728\u6570\u7ec4\u5c3e\u90e8\u65f6\uff0c\u8fbe\u5230\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 O(n)\nif (num == 1) return @intCast(i32, i);\n}\nreturn -1;\n}\n

    Tip

    \u6211\u4eec\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\u5f88\u5c11\u4f7f\u7528\u300c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u300d\uff0c\u56e0\u4e3a\u5f80\u5f80\u53ea\u6709\u5f88\u5c0f\u6982\u7387\u4e0b\u624d\u80fd\u8fbe\u5230\uff0c\u4f1a\u5e26\u6765\u4e00\u5b9a\u7684\u8bef\u5bfc\u6027\u3002\u53cd\u4e4b\uff0c\u300c\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u6700\u4e3a\u5b9e\u7528\uff0c\u56e0\u4e3a\u5b83\u7ed9\u51fa\u4e86\u4e00\u4e2a\u201c\u6548\u7387\u5b89\u5168\u503c\u201d\uff0c\u8ba9\u6211\u4eec\u53ef\u4ee5\u653e\u5fc3\u5730\u4f7f\u7528\u7b97\u6cd5\u3002

    \u4ece\u4e0a\u8ff0\u793a\u4f8b\u53ef\u4ee5\u770b\u51fa\uff0c\u6700\u5dee\u6216\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u53ea\u51fa\u73b0\u5728\u201c\u7279\u6b8a\u5206\u5e03\u7684\u6570\u636e\u201d\u4e2d\uff0c\u8fd9\u4e9b\u60c5\u51b5\u7684\u51fa\u73b0\u6982\u7387\u5f80\u5f80\u5f88\u5c0f\uff0c\u56e0\u6b64\u5e76\u4e0d\u80fd\u6700\u771f\u5b9e\u5730\u53cd\u6620\u7b97\u6cd5\u8fd0\u884c\u6548\u7387\u3002\u76f8\u5bf9\u5730\uff0c\u300c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u300d\u53ef\u4ee5\u4f53\u73b0\u7b97\u6cd5\u5728\u968f\u673a\u8f93\u5165\u6570\u636e\u4e0b\u7684\u8fd0\u884c\u6548\u7387\uff0c\u7528 \\(\\Theta\\) \u8bb0\u53f7\uff08Theta Notation\uff09\u6765\u8868\u793a\u3002

    \u5bf9\u4e8e\u90e8\u5206\u7b97\u6cd5\uff0c\u6211\u4eec\u53ef\u4ee5\u7b80\u5355\u5730\u63a8\u7b97\u51fa\u968f\u673a\u6570\u636e\u5206\u5e03\u4e0b\u7684\u5e73\u5747\u60c5\u51b5\u3002\u6bd4\u5982\u4e0a\u8ff0\u793a\u4f8b\uff0c\u7531\u4e8e\u8f93\u5165\u6570\u7ec4\u662f\u88ab\u6253\u4e71\u7684\uff0c\u56e0\u6b64\u5143\u7d20 \\(1\\) \u51fa\u73b0\u5728\u4efb\u610f\u7d22\u5f15\u7684\u6982\u7387\u90fd\u662f\u76f8\u7b49\u7684\uff0c\u90a3\u4e48\u7b97\u6cd5\u7684\u5e73\u5747\u5faa\u73af\u6b21\u6570\u5219\u662f\u6570\u7ec4\u957f\u5ea6\u7684\u4e00\u534a \\(\\frac{n}{2}\\) \uff0c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(\\Theta(\\frac{n}{2}) = \\Theta(n)\\) \u3002

    \u4f46\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u5c24\u5176\u662f\u8f83\u4e3a\u590d\u6742\u7684\u7b97\u6cd5\uff0c\u8ba1\u7b97\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u6bd4\u8f83\u56f0\u96be\uff0c\u56e0\u4e3a\u5f88\u96be\u7b80\u4fbf\u5730\u5206\u6790\u51fa\u5728\u6570\u636e\u5206\u5e03\u4e0b\u7684\u6574\u4f53\u6570\u5b66\u671f\u671b\u3002\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u4e00\u822c\u4f7f\u7528\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u6765\u4f5c\u4e3a\u7b97\u6cd5\u6548\u7387\u7684\u8bc4\u5224\u6807\u51c6\u3002

    \u4e3a\u4ec0\u4e48\u5f88\u5c11\u770b\u5230 \\(\\Theta\\) \u7b26\u53f7\uff1f

    \u5b9e\u9645\u4e2d\u6211\u4eec\u7ecf\u5e38\u4f7f\u7528\u300c\u5927 \\(O\\) \u7b26\u53f7\u300d\u6765\u8868\u793a\u300c\u5e73\u5747\u590d\u6742\u5ea6\u300d\uff0c\u8fd9\u6837\u4e25\u683c\u610f\u4e49\u4e0a\u6765\u8bf4\u662f\u4e0d\u89c4\u8303\u7684\u3002\u8fd9\u53ef\u80fd\u662f\u56e0\u4e3a \\(O\\) \u7b26\u53f7\u5b9e\u5728\u662f\u592a\u6717\u6717\u4e0a\u53e3\u4e86\u3002\u5982\u679c\u5728\u672c\u4e66\u548c\u5176\u4ed6\u8d44\u6599\u4e2d\u770b\u5230\u7c7b\u4f3c \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \u7684\u8868\u8ff0\uff0c\u8bf7\u4f60\u76f4\u63a5\u7406\u89e3\u4e3a \\(\\Theta(n)\\) \u5373\u53ef\u3002

    "},{"location":"chapter_data_structure/classification_of_data_structure/","title":"3.2. \u00a0 \u6570\u636e\u7ed3\u6784\u5206\u7c7b","text":"

    \u6570\u636e\u7ed3\u6784\u4e3b\u8981\u53ef\u6839\u636e\u300c\u903b\u8f91\u7ed3\u6784\u300d\u548c\u300c\u7269\u7406\u7ed3\u6784\u300d\u4e24\u79cd\u89d2\u5ea6\u8fdb\u884c\u5206\u7c7b\u3002

    "},{"location":"chapter_data_structure/classification_of_data_structure/#321","title":"3.2.1. \u00a0 \u903b\u8f91\u7ed3\u6784\uff1a\u7ebf\u6027\u4e0e\u975e\u7ebf\u6027","text":"

    \u300c\u903b\u8f91\u7ed3\u6784\u300d\u53cd\u6620\u4e86\u6570\u636e\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u3002\u6570\u7ec4\u548c\u94fe\u8868\u7684\u6570\u636e\u6309\u7167\u987a\u5e8f\u4f9d\u6b21\u6392\u5217\uff0c\u53cd\u6620\u4e86\u6570\u636e\u95f4\u7684\u7ebf\u6027\u5173\u7cfb\uff1b\u6811\u4ece\u9876\u81f3\u5e95\u6309\u5c42\u7ea7\u6392\u5217\uff0c\u53cd\u6620\u4e86\u7956\u5148\u4e0e\u540e\u4ee3\u4e4b\u95f4\u7684\u6d3e\u751f\u5173\u7cfb\uff1b\u56fe\u7531\u7ed3\u70b9\u548c\u8fb9\u7ec4\u6210\uff0c\u53cd\u6620\u4e86\u590d\u6742\u7f51\u7edc\u5173\u7cfb\u3002

    \u6211\u4eec\u4e00\u822c\u5c06\u903b\u8f91\u7ed3\u6784\u5206\u4e3a\u300c\u7ebf\u6027\u300d\u548c\u300c\u975e\u7ebf\u6027\u300d\u4e24\u79cd\u3002\u201c\u7ebf\u6027\u201d\u8fd9\u4e2a\u6982\u5ff5\u5f88\u76f4\u89c2\uff0c\u5373\u8868\u660e\u6570\u636e\u5728\u903b\u8f91\u5173\u7cfb\u4e0a\u662f\u6392\u6210\u4e00\u6761\u7ebf\u7684\uff1b\u800c\u5982\u679c\u6570\u636e\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\u662f\u975e\u7ebf\u6027\u7684\uff08\u4f8b\u5982\u662f\u7f51\u72b6\u6216\u6811\u72b6\u7684\uff09\uff0c\u90a3\u4e48\u5c31\u662f\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\u3002

    • \u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff1a\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\u3001\u54c8\u5e0c\u8868\uff1b
    • \u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff1a\u6811\u3001\u56fe\u3001\u5806\u3001\u54c8\u5e0c\u8868\uff1b

    Fig. \u7ebf\u6027\u4e0e\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784

    "},{"location":"chapter_data_structure/classification_of_data_structure/#322","title":"3.2.2. \u00a0 \u7269\u7406\u7ed3\u6784\uff1a\u8fde\u7eed\u4e0e\u79bb\u6563","text":"

    Note

    \u82e5\u611f\u5230\u9605\u8bfb\u56f0\u96be\uff0c\u5efa\u8bae\u5148\u770b\u5b8c\u4e0b\u4e2a\u7ae0\u8282\u300c\u6570\u7ec4\u4e0e\u94fe\u8868\u300d\uff0c\u518d\u56de\u8fc7\u5934\u6765\u7406\u89e3\u7269\u7406\u7ed3\u6784\u7684\u542b\u4e49\u3002

    \u300c\u7269\u7406\u7ed3\u6784\u300d\u53cd\u6620\u4e86\u6570\u636e\u5728\u8ba1\u7b97\u673a\u5185\u5b58\u4e2d\u7684\u5b58\u50a8\u65b9\u5f0f\u3002\u4ece\u672c\u8d28\u4e0a\u770b\uff0c\u5206\u522b\u662f \u6570\u7ec4\u7684\u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8 \u548c \u94fe\u8868\u7684\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8\u3002\u7269\u7406\u7ed3\u6784\u4ece\u5e95\u5c42\u4e0a\u51b3\u5b9a\u4e86\u6570\u636e\u7684\u8bbf\u95ee\u3001\u66f4\u65b0\u3001\u589e\u5220\u7b49\u64cd\u4f5c\u65b9\u6cd5\uff0c\u5728\u65f6\u95f4\u6548\u7387\u548c\u7a7a\u95f4\u6548\u7387\u65b9\u9762\u5448\u73b0\u51fa\u6b64\u6d88\u5f7c\u957f\u7684\u7279\u6027\u3002

    Fig. \u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8\u4e0e\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8

    \u6240\u6709\u6570\u636e\u7ed3\u6784\u90fd\u662f\u57fa\u4e8e\u6570\u7ec4\u3001\u6216\u94fe\u8868\u3001\u6216\u4e24\u8005\u7ec4\u5408\u5b9e\u73b0\u7684\u3002\u4f8b\u5982\u6808\u548c\u961f\u5217\uff0c\u65e2\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u5b9e\u73b0\u3001\u4e5f\u53ef\u4ee5\u4f7f\u7528\u94fe\u8868\u5b9e\u73b0\uff0c\u800c\u4f8b\u5982\u54c8\u5e0c\u8868\uff0c\u5176\u5b9e\u73b0\u540c\u65f6\u5305\u542b\u4e86\u6570\u7ec4\u548c\u94fe\u8868\u3002

    • \u57fa\u4e8e\u6570\u7ec4\u53ef\u5b9e\u73b0\uff1a\u6808\u3001\u961f\u5217\u3001\u54c8\u5e0c\u8868\u3001\u6811\u3001\u5806\u3001\u56fe\u3001\u77e9\u9635\u3001\u5f20\u91cf\uff08\u7ef4\u5ea6 \\(\\geq 3\\) \u7684\u6570\u7ec4\uff09\u7b49\uff1b
    • \u57fa\u4e8e\u94fe\u8868\u53ef\u5b9e\u73b0\uff1a\u6808\u3001\u961f\u5217\u3001\u54c8\u5e0c\u8868\u3001\u6811\u3001\u5806\u3001\u56fe\u7b49\uff1b

    \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u4e5f\u88ab\u79f0\u4e3a\u300c\u9759\u6001\u6570\u636e\u7ed3\u6784\u300d\uff0c\u8fd9\u610f\u5473\u7740\u8be5\u6570\u636e\u7ed3\u6784\u5728\u5728\u88ab\u521d\u59cb\u5316\u540e\uff0c\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002\u76f8\u53cd\u5730\uff0c\u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u88ab\u79f0\u4e3a\u300c\u52a8\u6001\u6570\u636e\u7ed3\u6784\u300d\uff0c\u8be5\u6570\u636e\u7ed3\u6784\u5728\u88ab\u521d\u59cb\u5316\u540e\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e2d\u4fee\u6539\u5176\u957f\u5ea6\u3002

    Tip

    \u6570\u7ec4\u4e0e\u94fe\u8868\u662f\u5176\u4ed6\u6240\u6709\u6570\u636e\u7ed3\u6784\u7684\u201c\u5e95\u5c42\u79ef\u6728\u201d\uff0c\u5efa\u8bae\u8bfb\u8005\u4e00\u5b9a\u8981\u591a\u82b1\u4e9b\u65f6\u95f4\u4e86\u89e3\u3002

    "},{"location":"chapter_data_structure/data_and_memory/","title":"3.1. \u00a0 \u6570\u636e\u4e0e\u5185\u5b58","text":""},{"location":"chapter_data_structure/data_and_memory/#311","title":"3.1.1. \u00a0 \u57fa\u672c\u6570\u636e\u7c7b\u578b","text":"

    \u8c08\u5230\u8ba1\u7b97\u673a\u4e2d\u7684\u6570\u636e\uff0c\u6211\u4eec\u80fd\u591f\u60f3\u5230\u6587\u672c\u3001\u56fe\u7247\u3001\u89c6\u9891\u3001\u8bed\u97f3\u30013D \u6a21\u578b\u7b49\u7b49\uff0c\u8fd9\u4e9b\u6570\u636e\u867d\u7136\u7ec4\u7ec7\u5f62\u5f0f\u4e0d\u540c\uff0c\u4f46\u90fd\u662f\u7531\u5404\u79cd\u57fa\u672c\u6570\u636e\u7c7b\u578b\u6784\u6210\u7684\u3002

    \u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u662f CPU \u53ef\u4ee5\u76f4\u63a5\u8fdb\u884c\u8fd0\u7b97\u7684\u7c7b\u578b\uff0c\u5728\u7b97\u6cd5\u4e2d\u76f4\u63a5\u88ab\u4f7f\u7528\u3002

    • \u300c\u6574\u6570\u300d\u6839\u636e\u4e0d\u540c\u7684\u957f\u5ea6\u5206\u4e3a byte, short, int, long \uff0c\u6839\u636e\u7b97\u6cd5\u9700\u6c42\u9009\u7528\uff0c\u5373\u5728\u6ee1\u8db3\u53d6\u503c\u8303\u56f4\u7684\u60c5\u51b5\u4e0b\u5c3d\u91cf\u51cf\u5c0f\u5185\u5b58\u7a7a\u95f4\u5360\u7528\uff1b
    • \u300c\u6d6e\u70b9\u6570\u300d\u4ee3\u8868\u5c0f\u6570\uff0c\u6839\u636e\u957f\u5ea6\u5206\u4e3a float, double \uff0c\u540c\u6837\u6839\u636e\u7b97\u6cd5\u7684\u5b9e\u9645\u9700\u6c42\u9009\u7528\uff1b
    • \u300c\u5b57\u7b26\u300d\u5728\u8ba1\u7b97\u673a\u4e2d\u662f\u4ee5\u5b57\u7b26\u96c6\u7684\u5f62\u5f0f\u4fdd\u5b58\u7684\uff0cchar \u7684\u503c\u5b9e\u9645\u4e0a\u662f\u6570\u5b57\uff0c\u4ee3\u8868\u5b57\u7b26\u96c6\u4e2d\u7684\u7f16\u53f7\uff0c\u8ba1\u7b97\u673a\u901a\u8fc7\u5b57\u7b26\u96c6\u67e5\u8868\u6765\u5b8c\u6210\u7f16\u53f7\u5230\u5b57\u7b26\u7684\u8f6c\u6362\u3002\u5360\u7528\u7a7a\u95f4\u901a\u5e38\u4e3a 2 bytes \u6216 1 byte \uff1b
    • \u300c\u5e03\u5c14\u300d\u4ee3\u8868\u903b\u8f91\u4e2d\u7684\u201c\u662f\u201d\u4e0e\u201c\u5426\u201d\uff0c\u5176\u5360\u7528\u7a7a\u95f4\u9700\u6839\u636e\u7f16\u7a0b\u8bed\u8a00\u786e\u5b9a\uff0c\u901a\u5e38\u4e3a 1 byte \u6216 1 bit \uff1b
    \u7c7b\u522b \u7b26\u53f7 \u5360\u7528\u7a7a\u95f4 \u53d6\u503c\u8303\u56f4 \u9ed8\u8ba4\u503c \u6574\u6570 byte 1 byte \\(-2^7\\) ~ \\(2^7 - 1\\) ( \\(-128\\) ~ \\(127\\) ) \\(0\\) short 2 bytes \\(-2^{15}\\) ~ \\(2^{15} - 1\\) \\(0\\) int 4 bytes \\(-2^{31}\\) ~ \\(2^{31} - 1\\) \\(0\\) long 8 bytes \\(-2^{63}\\) ~ \\(2^{63} - 1\\) \\(0\\) \u6d6e\u70b9\u6570 float 4 bytes \\(-3.4 \\times 10^{38}\\) ~ \\(3.4 \\times 10^{38}\\) \\(0.0\\) f double 8 bytes \\(-1.7 \\times 10^{308}\\) ~ \\(1.7 \\times 10^{308}\\) \\(0.0\\) \u5b57\u7b26 char 2 bytes / 1 byte \\(0\\) ~ \\(2^{16} - 1\\) \\(0\\) \u5e03\u5c14 bool 1 byte / 1 bit \\(\\text{true}\\) \u6216 \\(\\text{false}\\) \\(\\text{false}\\)

    Tip

    \u4ee5\u4e0a\u8868\u683c\u4e2d\uff0c\u52a0\u7c97\u9879\u5728\u300c\u7b97\u6cd5\u9898\u300d\u4e2d\u6700\u4e3a\u5e38\u7528\u3002\u6b64\u8868\u683c\u65e0\u9700\u786c\u80cc\uff0c\u5927\u81f4\u7406\u89e3\u5373\u53ef\uff0c\u9700\u8981\u65f6\u53ef\u4ee5\u901a\u8fc7\u67e5\u8868\u6765\u56de\u5fc6\u3002

    "},{"location":"chapter_data_structure/data_and_memory/#_1","title":"\u6574\u6570\u8868\u793a\u65b9\u5f0f","text":"

    \u6574\u6570\u7684\u53d6\u503c\u8303\u56f4\u53d6\u51b3\u4e8e\u53d8\u91cf\u4f7f\u7528\u7684\u5185\u5b58\u957f\u5ea6\uff0c\u5373\u5b57\u8282\uff08\u6216\u6bd4\u7279\uff09\u6570\u3002\u5728\u8ba1\u7b97\u673a\u4e2d\uff0c 1 \u5b57\u8282 (byte) = 8 \u6bd4\u7279 (bit) \uff0c 1 \u6bd4\u7279\u5373 1 \u4e2a\u4e8c\u8fdb\u5236\u4f4d\u3002\u4ee5 int \u7c7b\u578b\u4e3a\u4f8b\uff1a

    1. \u6574\u6570\u7c7b\u578b int \u5360\u7528 4 bytes = 32 bits \uff0c\u56e0\u6b64\u53ef\u4ee5\u8868\u793a \\(2^{32}\\) \u4e2a\u4e0d\u540c\u7684\u6570\u5b57\uff1b
    2. \u5c06\u6700\u9ad8\u4f4d\u770b\u4f5c\u7b26\u53f7\u4f4d\uff0c\\(0\\) \u4ee3\u8868\u6b63\u6570\uff0c\\(1\\) \u4ee3\u8868\u8d1f\u6570\uff0c\u4ece\u800c\u53ef\u4ee5\u8868\u793a \\(2^{31}\\) \u4e2a\u6b63\u6570\u548c \\(2^{31}\\) \u4e2a\u8d1f\u6570\uff1b
    3. \u5f53\u6240\u6709 bits \u4e3a 0 \u65f6\u4ee3\u8868\u6570\u5b57 \\(0\\) \uff0c\u4ece\u96f6\u5f00\u59cb\u589e\u5927\uff0c\u53ef\u5f97\u6700\u5927\u6b63\u6570\u4e3a \\(2^{31} - 1\\) \uff1b
    4. \u5269\u4f59 \\(2^{31}\\) \u4e2a\u6570\u5b57\u5168\u90e8\u7528\u6765\u8868\u793a\u8d1f\u6570\uff0c\u56e0\u6b64\u6700\u5c0f\u8d1f\u6570\u4e3a \\(-2^{31}\\) \uff1b\u5177\u4f53\u7ec6\u8282\u6d89\u53ca\u5230\u5230\u201c\u6e90\u7801\u3001\u53cd\u7801\u3001\u8865\u7801\u201d\u77e5\u8bc6\uff0c\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u67e5\u9605\u5b66\u4e60\uff1b

    \u5176\u5b83\u6574\u6570\u7c7b\u578b byte, short, long \u53d6\u503c\u8303\u56f4\u7684\u8ba1\u7b97\u65b9\u6cd5\u4e0e int \u7c7b\u4f3c\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_data_structure/data_and_memory/#_2","title":"\u6d6e\u70b9\u6570\u8868\u793a\u65b9\u5f0f *","text":"

    Note

    \u5728\u672c\u4e66\u4e2d\uff0c\u6807\u9898\u540e\u7684 * \u7b26\u53f7\u4ee3\u8868\u9009\u8bfb\u7ae0\u8282\uff0c\u5982\u679c\u4f60\u89c9\u5f97\u7406\u89e3\u56f0\u96be\uff0c\u5efa\u8bae\u5148\u8df3\u8fc7\uff0c\u7b49\u5b66\u5b8c\u5fc5\u8bfb\u7ae0\u8282\u540e\u7eed\u518d\u5355\u72ec\u653b\u514b\u3002

    \u7ec6\u5fc3\u7684\u4f60\u53ef\u80fd\u4f1a\u7591\u60d1\uff1a int \u548c float \u957f\u5ea6\u76f8\u540c\uff0c\u90fd\u662f 4 bytes \uff0c\u4f46\u4e3a\u4ec0\u4e48 float \u7684\u53d6\u503c\u8303\u56f4\u8fdc\u5927\u4e8e int \uff1f\u6309\u8bf4 float \u9700\u8981\u8868\u793a\u5c0f\u6570\uff0c\u53d6\u503c\u8303\u56f4\u5e94\u8be5\u53d8\u5c0f\u624d\u5bf9\u3002

    \u5176\u5b9e\uff0c\u8fd9\u662f\u56e0\u4e3a\u6d6e\u70b9\u6570 float \u91c7\u7528\u4e86\u4e0d\u540c\u7684\u8868\u793a\u65b9\u5f0f\u3002IEEE 754 \u6807\u51c6\u89c4\u5b9a\uff0c32-bit \u957f\u5ea6\u7684 float \u7531\u4ee5\u4e0b\u90e8\u5206\u6784\u6210\uff1a

    • \u7b26\u53f7\u4f4d \\(\\mathrm{S}\\) \uff1a\u5360 1 bit \uff1b
    • \u6307\u6570\u4f4d \\(\\mathrm{E}\\) \uff1a\u5360 8 bits \uff1b
    • \u5206\u6570\u4f4d \\(\\mathrm{N}\\) \uff1a\u5360 24 bits \uff0c\u5176\u4e2d 23 \u4f4d\u663e\u5f0f\u5b58\u50a8\uff1b

    \u8bbe 32-bit \u4e8c\u8fdb\u5236\u6570\u7684\u7b2c \\(i\\) \u4f4d\u4e3a \\(b_i\\) \uff0c\u5219 float \u503c\u7684\u8ba1\u7b97\u65b9\u6cd5\u5b9a\u4e49\u4e3a

    \\[ \\text { val } = (-1)^{b_{31}} \\times 2^{\\left(b_{30} b_{29} \\ldots b_{23}\\right)_2-127} \\times\\left(1 . b_{22} b_{21} \\ldots b_0\\right)_2 \\]

    \u8f6c\u5316\u5230\u5341\u8fdb\u5236\u4e0b\u7684\u8ba1\u7b97\u516c\u5f0f\u4e3a

    \\[ \\text { val }=(-1)^{\\mathrm{S}} \\times 2^{\\mathrm{E} -127} \\times (1 + \\mathrm{N}) \\]

    \u5176\u4e2d\u5404\u9879\u7684\u53d6\u503c\u8303\u56f4\u4e3a

    \\[ \\begin{aligned} \\mathrm{S} \\in & \\{ 0, 1\\} , \\quad \\mathrm{E} \\in \\{ 1, 2, \\dots, 254 \\} \\newline (1 + \\mathrm{N}) = & (1 + \\sum_{i=1}^{23} b_{23-i} 2^{-i}) \\subset [1, 2 - 2^{-23}] \\end{aligned} \\]

    Fig. IEEE 754 \u6807\u51c6\u4e0b\u7684 float \u8868\u793a\u65b9\u5f0f

    \u4ee5\u4e0a\u56fe\u4e3a\u4f8b\uff0c\\(\\mathrm{S} = 0\\) \uff0c \\(\\mathrm{E} = 124\\) \uff0c\\(\\mathrm{N} = 2^{-2} + 2^{-3} = 0.375\\) \uff0c\u6613\u5f97

    \\[ \\text { val } = (-1)^0 \\times 2^{124 - 127} \\times (1 + 0.375) = 0.171875 \\]

    \u73b0\u5728\u6211\u4eec\u53ef\u4ee5\u56de\u7b54\u5f00\u59cb\u7684\u95ee\u9898\uff1afloat \u7684\u8868\u793a\u65b9\u5f0f\u5305\u542b\u6307\u6570\u4f4d\uff0c\u5bfc\u81f4\u5176\u53d6\u503c\u8303\u56f4\u8fdc\u5927\u4e8e int \u3002\u6839\u636e\u4ee5\u4e0a\u8ba1\u7b97\uff0c float \u53ef\u8868\u793a\u7684\u6700\u5927\u6b63\u6570\u4e3a \\(2^{254 - 127} \\times (2 - 2^{-23}) \\approx 3.4 \\times 10^{38}\\) \uff0c\u5207\u6362\u7b26\u53f7\u4f4d\u4fbf\u53ef\u5f97\u5230\u6700\u5c0f\u8d1f\u6570\u3002

    \u6d6e\u70b9\u6570 float \u867d\u7136\u62d3\u5c55\u4e86\u53d6\u503c\u8303\u56f4\uff0c\u4f46\u526f\u4f5c\u7528\u662f\u727a\u7272\u4e86\u7cbe\u5ea6\u3002\u6574\u6570\u7c7b\u578b int \u5c06\u5168\u90e8 32 \u4f4d\u7528\u4e8e\u8868\u793a\u6570\u5b57\uff0c\u6570\u5b57\u662f\u5747\u5300\u5206\u5e03\u7684\uff1b\u800c\u7531\u4e8e\u6307\u6570\u4f4d\u7684\u5b58\u5728\uff0c\u6d6e\u70b9\u6570 float \u7684\u6570\u503c\u8d8a\u5927\uff0c\u76f8\u90bb\u4e24\u4e2a\u6570\u5b57\u4e4b\u95f4\u7684\u5dee\u503c\u5c31\u4f1a\u8d8b\u5411\u8d8a\u5927\u3002

    \u8fdb\u4e00\u6b65\u5730\uff0c\u6307\u6570\u4f4d \\(E = 0\\) \u548c \\(E = 255\\) \u5177\u6709\u7279\u6b8a\u542b\u4e49\uff0c\u7528\u4e8e\u8868\u793a\u96f6\u3001\u65e0\u7a77\u5927\u3001\\(\\mathrm{NaN}\\) \u7b49\u3002

    \u6307\u6570\u4f4d E \u5206\u6570\u4f4d \\(\\mathrm{N} = 0\\) \u5206\u6570\u4f4d \\(\\mathrm{N} \\ne 0\\) \u8ba1\u7b97\u516c\u5f0f \\(0\\) \\(\\pm 0\\) \u6b21\u6b63\u89c4\u6570 \\((-1)^{\\mathrm{S}} \\times 2^{-126} \\times (0.\\mathrm{N})\\) \\(1, 2, \\dots, 254\\) \u6b63\u89c4\u6570 \u6b63\u89c4\u6570 \\((-1)^{\\mathrm{S}} \\times 2^{(\\mathrm{E} -127)} \\times (1.\\mathrm{N})\\) \\(255\\) \\(\\pm \\infty\\) \\(\\mathrm{NaN}\\)

    \u7279\u522b\u5730\uff0c\u6b21\u6b63\u89c4\u6570\u663e\u8457\u63d0\u5347\u4e86\u5c0f\u6570\u7cbe\u5ea6\uff1a

    • \u6700\u5c0f\u6b63\u6b63\u89c4\u6570\u4e3a \\(2^{-126} \\approx 1.18 \\times 10^{-38}\\) \uff1b
    • \u6700\u5c0f\u6b63\u6b21\u6b63\u89c4\u6570\u4e3a \\(2^{-126} \\times 2^{-23} \\approx 1.4 \\times 10^{-45}\\) \uff1b

    \u53cc\u7cbe\u5ea6 double \u4e5f\u91c7\u7528\u7c7b\u4f3c float \u7684\u8868\u793a\u65b9\u6cd5\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_data_structure/data_and_memory/#_3","title":"\u57fa\u672c\u6570\u636e\u7c7b\u578b\u4e0e\u6570\u636e\u7ed3\u6784\u7684\u5173\u7cfb","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u6570\u636e\u7ed3\u6784\u662f\u5728\u8ba1\u7b97\u673a\u4e2d\u7ec4\u7ec7\u4e0e\u5b58\u50a8\u6570\u636e\u7684\u65b9\u5f0f\uff0c\u5b83\u7684\u4e3b\u8bed\u662f\u201c\u7ed3\u6784\u201d\uff0c\u800c\u4e0d\u662f\u201c\u6570\u636e\u201d\u3002\u5982\u679c\u6211\u4eec\u60f3\u8981\u8868\u793a\u201c\u4e00\u6392\u6570\u5b57\u201d\uff0c\u81ea\u7136\u60f3\u5230\u4f7f\u7528\u300c\u6570\u7ec4\u300d\u6570\u636e\u7ed3\u6784\u3002\u6570\u7ec4\u7684\u5b58\u50a8\u65b9\u5f0f\u53ef\u4ee5\u8868\u793a\u6570\u5b57\u7684\u76f8\u90bb\u5173\u7cfb\u3001\u987a\u5e8f\u5173\u7cfb\uff0c\u4f46\u81f3\u4e8e\u5176\u4e2d\u5b58\u50a8\u7684\u662f\u6574\u6570 int \uff0c\u8fd8\u662f\u5c0f\u6570 float \uff0c\u6216\u662f\u5b57\u7b26 char \uff0c\u5219\u4e0e\u6240\u8c13\u7684\u6570\u636e\u7684\u7ed3\u6784\u65e0\u5173\u4e86\u3002

    \u6362\u8a00\u4e4b\uff0c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u63d0\u4f9b\u4e86\u6570\u636e\u7684\u201c\u5185\u5bb9\u7c7b\u578b\u201d\uff0c\u800c\u6570\u636e\u7ed3\u6784\u63d0\u4f9b\u6570\u636e\u7684\u201c\u7ec4\u7ec7\u65b9\u5f0f\u201d\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint[] numbers = new int[5];\nfloat[] decimals = new float[5];\nchar[] characters = new char[5];\nboolean[] booleans = new boolean[5];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint numbers[5];\nfloat decimals[5];\nchar characters[5];\nbool booleans[5];\n
    \"\"\" Python \u7684 list \u53ef\u4ee5\u81ea\u7531\u5b58\u50a8\u5404\u79cd\u57fa\u672c\u6570\u636e\u7c7b\u578b\u548c\u5bf9\u8c61 \"\"\"\nlist = [0, 0.0, 'a', False]\n
    // \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d\nvar numbers = [5]int{}\nvar decimals = [5]float64{}\nvar characters = [5]byte{}\nvar booleans = [5]bool{}\n
    /* JavaScript \u7684\u6570\u7ec4\u53ef\u4ee5\u81ea\u7531\u5b58\u50a8\u5404\u79cd\u57fa\u672c\u6570\u636e\u7c7b\u578b\u548c\u5bf9\u8c61 */\nconst array = [0, 0.0, 'a', false];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nconst numbers: number[] = [];\nconst characters: string[] = [];\nconst booleans: boolean[] = [];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint numbers[10];\nfloat decimals[10];\nchar characters[10];\nbool booleans[10];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nint[] numbers = new int[5];\nfloat[] decimals = new float[5];\nchar[] characters = new char[5];\nbool[] booleans = new bool[5];\n
    /* \u4f7f\u7528\u591a\u79cd\u300c\u57fa\u672c\u6570\u636e\u7c7b\u578b\u300d\u6765\u521d\u59cb\u5316\u300c\u6570\u7ec4\u300d */\nlet numbers = Array(repeating: Int(), count: 5)\nlet decimals = Array(repeating: Double(), count: 5)\nlet characters = Array(repeating: Character(\"a\"), count: 5)\nlet booleans = Array(repeating: Bool(), count: 5)\n
    \n
    "},{"location":"chapter_data_structure/data_and_memory/#312","title":"3.1.2. \u00a0 \u8ba1\u7b97\u673a\u5185\u5b58","text":"

    \u5728\u8ba1\u7b97\u673a\u4e2d\uff0c\u5185\u5b58\u548c\u786c\u76d8\u662f\u4e24\u79cd\u4e3b\u8981\u7684\u5b58\u50a8\u786c\u4ef6\u8bbe\u5907\u3002\u300c\u786c\u76d8\u300d\u4e3b\u8981\u7528\u4e8e\u957f\u671f\u5b58\u50a8\u6570\u636e\uff0c\u5bb9\u91cf\u8f83\u5927\uff08\u901a\u5e38\u53ef\u8fbe\u5230 TB \u7ea7\u522b\uff09\u3001\u901f\u5ea6\u8f83\u6162\u3002\u300c\u5185\u5b58\u300d\u7528\u4e8e\u8fd0\u884c\u7a0b\u5e8f\u65f6\u6682\u5b58\u6570\u636e\uff0c\u901f\u5ea6\u8f83\u5feb\uff0c\u4f46\u5bb9\u91cf\u8f83\u5c0f\uff08\u901a\u5e38\u4e3a GB \u7ea7\u522b\uff09\u3002

    \u7b97\u6cd5\u8fd0\u884c\u4e2d\uff0c\u76f8\u5173\u6570\u636e\u90fd\u88ab\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\u3002\u4e0b\u56fe\u5c55\u793a\u4e86\u4e00\u4e2a\u8ba1\u7b97\u673a\u5185\u5b58\u6761\uff0c\u5176\u4e2d\u6bcf\u4e2a\u9ed1\u8272\u65b9\u5757\u90fd\u5305\u542b\u4e00\u5757\u5185\u5b58\u7a7a\u95f4\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u5185\u5b58\u60f3\u8c61\u6210\u4e00\u4e2a\u5de8\u5927\u7684 Excel \u8868\u683c\uff0c\u5176\u4e2d\u6bcf\u4e2a\u5355\u5143\u683c\u90fd\u53ef\u4ee5\u5b58\u50a8 1 byte \u7684\u6570\u636e\uff0c\u5728\u7b97\u6cd5\u8fd0\u884c\u65f6\uff0c\u6240\u6709\u6570\u636e\u90fd\u88ab\u5b58\u50a8\u5728\u8fd9\u4e9b\u5355\u5143\u683c\u4e2d\u3002

    \u7cfb\u7edf\u901a\u8fc7\u300c\u5185\u5b58\u5730\u5740 Memory Location\u300d\u6765\u8bbf\u95ee\u76ee\u6807\u5185\u5b58\u4f4d\u7f6e\u7684\u6570\u636e\u3002\u8ba1\u7b97\u673a\u6839\u636e\u7279\u5b9a\u89c4\u5219\u7ed9\u8868\u683c\u4e2d\u6bcf\u4e2a\u5355\u5143\u683c\u7f16\u53f7\uff0c\u4fdd\u8bc1\u6bcf\u5757\u5185\u5b58\u7a7a\u95f4\u90fd\u6709\u72ec\u7acb\u7684\u5185\u5b58\u5730\u5740\u3002\u81ea\u6b64\uff0c\u7a0b\u5e8f\u4fbf\u901a\u8fc7\u8fd9\u4e9b\u5730\u5740\uff0c\u8bbf\u95ee\u5185\u5b58\u4e2d\u7684\u6570\u636e\u3002

    Fig. \u5185\u5b58\u6761\u3001\u5185\u5b58\u7a7a\u95f4\u3001\u5185\u5b58\u5730\u5740

    \u5185\u5b58\u8d44\u6e90\u662f\u8bbe\u8ba1\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u91cd\u8981\u8003\u8651\u56e0\u7d20\u3002\u5185\u5b58\u662f\u6240\u6709\u7a0b\u5e8f\u7684\u516c\u5171\u8d44\u6e90\uff0c\u5f53\u5185\u5b58\u88ab\u67d0\u7a0b\u5e8f\u5360\u7528\u65f6\uff0c\u4e0d\u80fd\u88ab\u5176\u5b83\u7a0b\u5e8f\u540c\u65f6\u4f7f\u7528\u3002\u6211\u4eec\u9700\u8981\u6839\u636e\u5269\u4f59\u5185\u5b58\u8d44\u6e90\u7684\u60c5\u51b5\u6765\u8bbe\u8ba1\u7b97\u6cd5\u3002\u4f8b\u5982\uff0c\u82e5\u5269\u4f59\u5185\u5b58\u7a7a\u95f4\u6709\u9650\uff0c\u5219\u8981\u6c42\u7b97\u6cd5\u5360\u7528\u7684\u5cf0\u503c\u5185\u5b58\u4e0d\u80fd\u8d85\u8fc7\u7cfb\u7edf\u5269\u4f59\u5185\u5b58\uff1b\u82e5\u8fd0\u884c\u7684\u7a0b\u5e8f\u5f88\u591a\u3001\u7f3a\u5c11\u5927\u5757\u8fde\u7eed\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u5219\u8981\u6c42\u9009\u53d6\u7684\u6570\u636e\u7ed3\u6784\u5fc5\u987b\u80fd\u591f\u5b58\u50a8\u5728\u79bb\u6563\u7684\u5185\u5b58\u7a7a\u95f4\u5185\u3002

    "},{"location":"chapter_data_structure/summary/","title":"3.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u6574\u6570 byte, short, int, long \u3001\u6d6e\u70b9\u6570 float, double \u3001\u5b57\u7b26 char \u3001\u5e03\u5c14 boolean \u662f\u8ba1\u7b97\u673a\u4e2d\u7684\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff0c\u5360\u7528\u7a7a\u95f4\u7684\u5927\u5c0f\u51b3\u5b9a\u4e86\u5b83\u4eec\u7684\u53d6\u503c\u8303\u56f4\u3002
    • \u5728\u7a0b\u5e8f\u8fd0\u884c\u65f6\uff0c\u6570\u636e\u5b58\u50a8\u5728\u8ba1\u7b97\u673a\u7684\u5185\u5b58\u4e2d\u3002\u5185\u5b58\u4e2d\u6bcf\u5757\u7a7a\u95f4\u90fd\u6709\u72ec\u7acb\u7684\u5185\u5b58\u5730\u5740\uff0c\u7a0b\u5e8f\u662f\u901a\u8fc7\u5185\u5b58\u5730\u5740\u6765\u8bbf\u95ee\u6570\u636e\u7684\u3002
    • \u6570\u636e\u7ed3\u6784\u4e3b\u8981\u53ef\u4ee5\u4ece\u903b\u8f91\u7ed3\u6784\u548c\u7269\u7406\u7ed3\u6784\u4e24\u4e2a\u89d2\u5ea6\u8fdb\u884c\u5206\u7c7b\u3002\u903b\u8f91\u7ed3\u6784\u53cd\u6620\u4e86\u6570\u636e\u4e2d\u5143\u7d20\u4e4b\u95f4\u7684\u903b\u8f91\u5173\u7cfb\uff0c\u7269\u7406\u7ed3\u6784\u53cd\u6620\u4e86\u6570\u636e\u5728\u8ba1\u7b97\u673a\u5185\u5b58\u4e2d\u7684\u5b58\u50a8\u5f62\u5f0f\u3002
    • \u5e38\u89c1\u7684\u903b\u8f91\u7ed3\u6784\u6709\u7ebf\u6027\u3001\u6811\u72b6\u3001\u7f51\u72b6\u7b49\u3002\u6211\u4eec\u4e00\u822c\u6839\u636e\u903b\u8f91\u7ed3\u6784\u5c06\u6570\u636e\u7ed3\u6784\u5206\u4e3a\u7ebf\u6027\uff08\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\uff09\u548c\u975e\u7ebf\u6027\uff08\u6811\u3001\u56fe\u3001\u5806\uff09\u4e24\u79cd\u3002\u6839\u636e\u5b9e\u73b0\u65b9\u5f0f\u7684\u4e0d\u540c\uff0c\u54c8\u5e0c\u8868\u53ef\u80fd\u662f\u7ebf\u6027\u6216\u975e\u7ebf\u6027\u3002
    • \u7269\u7406\u7ed3\u6784\u4e3b\u8981\u6709\u4e24\u79cd\uff0c\u5206\u522b\u662f\u8fde\u7eed\u7a7a\u95f4\u5b58\u50a8\uff08\u6570\u7ec4\uff09\u548c\u79bb\u6563\u7a7a\u95f4\u5b58\u50a8\uff08\u94fe\u8868\uff09\uff0c\u6240\u6709\u7684\u6570\u636e\u7ed3\u6784\u90fd\u662f\u7531\u6570\u7ec4\u3001\u6216\u94fe\u8868\u3001\u6216\u4e24\u8005\u7ec4\u5408\u5b9e\u73b0\u7684\u3002
    "},{"location":"chapter_graph/graph/","title":"9.1. \u00a0 \u56fe","text":"

    \u300c\u56fe Graph\u300d\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u7531\u300c\u9876\u70b9 Vertex\u300d\u548c\u300c\u8fb9 Edge\u300d\u7ec4\u6210\u3002\u6211\u4eec\u53ef\u5c06\u56fe \\(G\\) \u62bd\u8c61\u5730\u8868\u793a\u4e3a\u4e00\u7ec4\u9876\u70b9 \\(V\\) \u548c\u4e00\u7ec4\u8fb9 \\(E\\) \u7684\u96c6\u5408\u3002\u4f8b\u5982\uff0c\u4ee5\u4e0b\u8868\u793a\u4e00\u4e2a\u5305\u542b 5 \u4e2a\u9876\u70b9\u548c 7 \u6761\u8fb9\u7684\u56fe

    \\[ \\begin{aligned} V & = \\{ 1, 2, 3, 4, 5 \\} \\newline E & = \\{ (1,2), (1,3), (1,5), (2,3), (2,4), (2,5), (4,5) \\} \\newline G & = \\{ V, E \\} \\newline \\end{aligned} \\]

    Fig. \u94fe\u8868\u3001\u6811\u3001\u56fe\u4e4b\u95f4\u7684\u5173\u7cfb

    \u90a3\u4e48\uff0c\u56fe\u4e0e\u5176\u4ed6\u6570\u636e\u7ed3\u6784\u7684\u5173\u7cfb\u662f\u4ec0\u4e48\uff1f\u5982\u679c\u6211\u4eec\u628a\u300c\u9876\u70b9\u300d\u770b\u4f5c\u7ed3\u70b9\uff0c\u628a\u300c\u8fb9\u300d\u770b\u4f5c\u8fde\u63a5\u5404\u4e2a\u7ed3\u70b9\u7684\u6307\u9488\uff0c\u5219\u53ef\u5c06\u300c\u56fe\u300d\u770b\u6210\u4e00\u79cd\u4ece\u300c\u94fe\u8868\u300d\u62d3\u5c55\u800c\u6765\u7684\u6570\u636e\u7ed3\u6784\u3002\u76f8\u6bd4\u7ebf\u6027\u5173\u7cfb\uff08\u94fe\u8868\uff09\u548c\u5206\u6cbb\u5173\u7cfb\uff08\u6811\uff09\uff0c\u7f51\u7edc\u5173\u7cfb\uff08\u56fe\uff09\u7684\u81ea\u7531\u5ea6\u66f4\u9ad8\uff0c\u4e5f\u4ece\u800c\u66f4\u4e3a\u590d\u6742\u3002

    "},{"location":"chapter_graph/graph/#911","title":"9.1.1. \u00a0 \u56fe\u5e38\u89c1\u7c7b\u578b","text":"

    \u6839\u636e\u8fb9\u662f\u5426\u6709\u65b9\u5411\uff0c\u5206\u4e3a\u300c\u65e0\u5411\u56fe Undirected Graph\u300d\u548c\u300c\u6709\u5411\u56fe Directed Graph\u300d\u3002

    • \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u8fb9\u8868\u793a\u4e24\u9876\u70b9\u4e4b\u95f4\u201c\u53cc\u5411\u201d\u7684\u8fde\u63a5\u5173\u7cfb\uff0c\u4f8b\u5982\u5fae\u4fe1\u6216 QQ \u4e2d\u7684\u201c\u597d\u53cb\u5173\u7cfb\u201d\uff1b
    • \u5728\u6709\u5411\u56fe\u4e2d\uff0c\u8fb9\u662f\u6709\u65b9\u5411\u7684\uff0c\u5373 \\(A \\rightarrow B\\) \u548c \\(A \\leftarrow B\\) \u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u662f\u76f8\u4e92\u72ec\u7acb\u7684\uff0c\u4f8b\u5982\u5fae\u535a\u6216\u6296\u97f3\u4e0a\u7684\u201c\u5173\u6ce8\u201d\u4e0e\u201c\u88ab\u5173\u6ce8\u201d\u5173\u7cfb\uff1b

    Fig. \u6709\u5411\u56fe\u4e0e\u65e0\u5411\u56fe

    \u6839\u636e\u6240\u6709\u9876\u70b9\u662f\u5426\u8fde\u901a\uff0c\u5206\u4e3a\u300c\u8fde\u901a\u56fe Connected Graph\u300d\u548c\u300c\u975e\u8fde\u901a\u56fe Disconnected Graph\u300d\u3002

    • \u5bf9\u4e8e\u8fde\u901a\u56fe\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u53ef\u4ee5\u5230\u8fbe\u5176\u4f59\u4efb\u610f\u9876\u70b9\uff1b
    • \u5bf9\u4e8e\u975e\u8fde\u901a\u56fe\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u81f3\u5c11\u6709\u4e00\u4e2a\u9876\u70b9\u65e0\u6cd5\u5230\u8fbe\uff1b

    Fig. \u8fde\u901a\u56fe\u4e0e\u975e\u8fde\u901a\u56fe

    \u6211\u4eec\u53ef\u4ee5\u7ed9\u8fb9\u6dfb\u52a0\u201c\u6743\u91cd\u201d\u53d8\u91cf\uff0c\u5f97\u5230\u300c\u6709\u6743\u56fe Weighted Graph\u300d\u3002\u4f8b\u5982\uff0c\u5728\u738b\u8005\u8363\u8000\u7b49\u6e38\u620f\u4e2d\uff0c\u7cfb\u7edf\u4f1a\u6839\u636e\u5171\u540c\u6e38\u620f\u65f6\u95f4\u6765\u8ba1\u7b97\u73a9\u5bb6\u4e4b\u95f4\u7684\u201c\u4eb2\u5bc6\u5ea6\u201d\uff0c\u8fd9\u79cd\u4eb2\u5bc6\u5ea6\u7f51\u7edc\u5c31\u53ef\u4ee5\u4f7f\u7528\u6709\u6743\u56fe\u6765\u8868\u793a\u3002

    Fig. \u6709\u6743\u56fe\u4e0e\u65e0\u6743\u56fe

    "},{"location":"chapter_graph/graph/#912","title":"9.1.2. \u00a0 \u56fe\u5e38\u7528\u672f\u8bed","text":"
    • \u300c\u90bb\u63a5 Adjacency\u300d\uff1a\u5f53\u4e24\u9876\u70b9\u4e4b\u95f4\u6709\u8fb9\u76f8\u8fde\u65f6\uff0c\u79f0\u6b64\u4e24\u9876\u70b9\u201c\u90bb\u63a5\u201d\u3002\u4f8b\u5982\uff0c\u4e0a\u56fe\u4e2d\u9876\u70b9 1 \u7684\u90bb\u63a5\u9876\u70b9\u4e3a\u9876\u70b9 2, 3, 5 \u3002
    • \u300c\u8def\u5f84 Path\u300d\uff1a\u4ece\u9876\u70b9 A \u5230\u9876\u70b9 B \u8d70\u8fc7\u7684\u8fb9\u6784\u6210\u7684\u5e8f\u5217\uff0c\u88ab\u79f0\u4e3a\u4ece A \u5230 B \u7684\u201c\u8def\u5f84\u201d\u3002\u4f8b\u5982\uff0c\u4e0a\u56fe\u4e2d 1, 5, 2, 4 \u662f\u9876\u70b9 1 \u5230\u9876\u70b9 4 \u7684\u4e00\u4e2a\u8def\u5f84\u3002
    • \u300c\u5ea6 Degree\u300d\u8868\u793a\u4e00\u4e2a\u9876\u70b9\u5177\u6709\u591a\u5c11\u6761\u8fb9\u3002\u5bf9\u4e8e\u6709\u5411\u56fe\uff0c\u300c\u5165\u5ea6 In-Degree\u300d\u8868\u793a\u6709\u591a\u5c11\u6761\u8fb9\u6307\u5411\u8be5\u9876\u70b9\uff0c\u300c\u51fa\u5ea6 Out-Degree\u300d\u8868\u793a\u6709\u591a\u5c11\u6761\u8fb9\u4ece\u8be5\u9876\u70b9\u6307\u51fa\u3002
    "},{"location":"chapter_graph/graph/#913","title":"9.1.3. \u00a0 \u56fe\u7684\u8868\u793a","text":"

    \u56fe\u7684\u5e38\u7528\u8868\u793a\u65b9\u6cd5\u6709\u300c\u90bb\u63a5\u77e9\u9635\u300d\u548c\u300c\u90bb\u63a5\u8868\u300d\u3002\u4ee5\u4e0b\u4f7f\u7528\u300c\u65e0\u5411\u56fe\u300d\u6765\u4e3e\u4f8b\u3002

    "},{"location":"chapter_graph/graph/#_1","title":"\u90bb\u63a5\u77e9\u9635","text":"

    \u8bbe\u56fe\u7684\u9876\u70b9\u6570\u91cf\u4e3a \\(n\\) \uff0c\u300c\u90bb\u63a5\u77e9\u9635 Adjacency Matrix\u300d\u4f7f\u7528\u4e00\u4e2a \\(n \\times n\\) \u5927\u5c0f\u7684\u77e9\u9635\u6765\u8868\u793a\u56fe\uff0c\u6bcf\u4e00\u884c\uff08\u5217\uff09\u4ee3\u8868\u4e00\u4e2a\u9876\u70b9\uff0c\u77e9\u9635\u5143\u7d20\u4ee3\u8868\u8fb9\uff0c\u4f7f\u7528 \\(1\\) \u6216 \\(0\\) \u6765\u8868\u793a\u4e24\u4e2a\u9876\u70b9\u4e4b\u95f4\u6709\u8fb9\u6216\u65e0\u8fb9\u3002

    \u5982\u4e0b\u56fe\u6240\u793a\uff0c\u8bb0\u90bb\u63a5\u77e9\u9635\u4e3a \\(M\\) \u3001\u9876\u70b9\u5217\u8868\u4e3a \\(V\\) \uff0c\u5219\u77e9\u9635\u5143\u7d20 \\(M[i][j] = 1\\) \u4ee3\u8868\u7740\u9876\u70b9 \\(V[i]\\) \u5230\u9876\u70b9 \\(V[j]\\) \u4e4b\u95f4\u6709\u8fb9\uff0c\u76f8\u53cd\u5730 \\(M[i][j] = 0\\) \u4ee3\u8868\u4e24\u9876\u70b9\u4e4b\u95f4\u65e0\u8fb9\u3002

    Fig. \u56fe\u7684\u90bb\u63a5\u77e9\u9635\u8868\u793a

    \u90bb\u63a5\u77e9\u9635\u5177\u6709\u4ee5\u4e0b\u6027\u8d28\uff1a

    • \u9876\u70b9\u4e0d\u80fd\u4e0e\u81ea\u8eab\u76f8\u8fde\uff0c\u56e0\u800c\u90bb\u63a5\u77e9\u9635\u4e3b\u5bf9\u89d2\u7ebf\u5143\u7d20\u6ca1\u6709\u610f\u4e49\u3002
    • \u300c\u65e0\u5411\u56fe\u300d\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u7b49\u4ef7\uff0c\u6b64\u65f6\u90bb\u63a5\u77e9\u9635\u5173\u4e8e\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\u3002
    • \u5c06\u90bb\u63a5\u77e9\u9635\u7684\u5143\u7d20\u4ece \\(1\\) , \\(0\\) \u66ff\u6362\u4e3a\u6743\u91cd\uff0c\u5219\u80fd\u591f\u8868\u793a\u300c\u6709\u6743\u56fe\u300d\u3002

    \u4f7f\u7528\u90bb\u63a5\u77e9\u9635\u8868\u793a\u56fe\u65f6\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u901a\u8fc7\u8bbf\u95ee\u77e9\u9635\u5143\u7d20\u6765\u83b7\u53d6\u8fb9\uff0c\u56e0\u6b64\u589e\u5220\u67e5\u64cd\u4f5c\u7684\u6548\u7387\u5f88\u9ad8\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u5747\u4e3a \\(O(1)\\) \u3002\u7136\u800c\uff0c\u77e9\u9635\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \uff0c\u5185\u5b58\u5360\u7528\u8f83\u5927\u3002

    "},{"location":"chapter_graph/graph/#_2","title":"\u90bb\u63a5\u8868","text":"

    \u300c\u90bb\u63a5\u8868 Adjacency List\u300d\u4f7f\u7528 \\(n\\) \u4e2a\u94fe\u8868\u6765\u8868\u793a\u56fe\uff0c\u94fe\u8868\u7ed3\u70b9\u8868\u793a\u9876\u70b9\u3002\u7b2c \\(i\\) \u6761\u94fe\u8868\u5bf9\u5e94\u9876\u70b9 \\(i\\) \uff0c\u5176\u4e2d\u5b58\u50a8\u4e86\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\uff08\u5373\u4e0e\u8be5\u9876\u70b9\u76f8\u8fde\u7684\u9876\u70b9\uff09\u3002

    Fig. \u56fe\u7684\u90bb\u63a5\u8868\u8868\u793a

    \u90bb\u63a5\u8868\u4ec5\u5b58\u50a8\u5b58\u5728\u7684\u8fb9\uff0c\u800c\u8fb9\u7684\u603b\u6570\u5f80\u5f80\u8fdc\u5c0f\u4e8e \\(n^2\\) \uff0c\u56e0\u6b64\u66f4\u52a0\u8282\u7701\u7a7a\u95f4\u3002\u4f46\u662f\uff0c\u56e0\u4e3a\u5728\u90bb\u63a5\u8868\u4e2d\u9700\u8981\u901a\u8fc7\u904d\u5386\u94fe\u8868\u6765\u67e5\u627e\u8fb9\uff0c\u6240\u4ee5\u5176\u65f6\u95f4\u6548\u7387\u4e0d\u5982\u90bb\u63a5\u77e9\u9635\u3002

    \u89c2\u5bdf\u4e0a\u56fe\u53d1\u73b0\uff0c\u90bb\u63a5\u8868\u7ed3\u6784\u4e0e\u54c8\u5e0c\u8868\u300c\u94fe\u5730\u5740\u6cd5\u300d\u975e\u5e38\u76f8\u4f3c\uff0c\u56e0\u6b64\u6211\u4eec\u4e5f\u53ef\u4ee5\u7528\u7c7b\u4f3c\u65b9\u6cd5\u6765\u4f18\u5316\u6548\u7387\u3002\u6bd4\u5982\uff0c\u5f53\u94fe\u8868\u8f83\u957f\u65f6\uff0c\u53ef\u4ee5\u628a\u94fe\u8868\u8f6c\u5316\u4e3a AVL \u6811\u6216\u7ea2\u9ed1\u6811\uff0c\u4ece\u800c\u5c06\u65f6\u95f4\u6548\u7387\u4ece \\(O(n)\\) \u4f18\u5316\u81f3 \\(O(\\log n)\\) \uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7\u4e2d\u5e8f\u904d\u5386\u83b7\u53d6\u6709\u5e8f\u5e8f\u5217\uff1b\u8fd8\u53ef\u4ee5\u5c06\u94fe\u8868\u8f6c\u5316\u4e3a\u54c8\u5e0c\u8868\uff0c\u5c06\u65f6\u95f4\u590d\u6742\u5ea6\u964d\u4f4e\u81f3 \\(O(1)\\) \u3002

    "},{"location":"chapter_graph/graph/#914","title":"9.1.4. \u00a0 \u56fe\u5e38\u89c1\u5e94\u7528","text":"

    \u73b0\u5b9e\u4e2d\u7684\u8bb8\u591a\u7cfb\u7edf\u90fd\u53ef\u4ee5\u4f7f\u7528\u56fe\u6765\u5efa\u6a21\uff0c\u5bf9\u5e94\u7684\u5f85\u6c42\u89e3\u95ee\u9898\u4e5f\u53ef\u4ee5\u88ab\u7ea6\u5316\u4e3a\u56fe\u8ba1\u7b97\u95ee\u9898\u3002

    \u9876\u70b9 \u8fb9 \u56fe\u8ba1\u7b97\u95ee\u9898 \u793e\u4ea4\u7f51\u7edc \u7528\u6237 \u597d\u53cb\u5173\u7cfb \u6f5c\u5728\u597d\u53cb\u63a8\u8350 \u5730\u94c1\u7ebf\u8def \u7ad9\u70b9 \u7ad9\u70b9\u95f4\u7684\u8fde\u901a\u6027 \u6700\u77ed\u8def\u7ebf\u63a8\u8350 \u592a\u9633\u7cfb \u661f\u4f53 \u661f\u4f53\u95f4\u7684\u4e07\u6709\u5f15\u529b\u4f5c\u7528 \u884c\u661f\u8f68\u9053\u8ba1\u7b97"},{"location":"chapter_graph/graph_operations/","title":"9.2. \u00a0 \u56fe\u57fa\u7840\u64cd\u4f5c","text":"

    \u56fe\u7684\u57fa\u7840\u64cd\u4f5c\u5206\u4e3a\u5bf9\u300c\u8fb9\u300d\u7684\u64cd\u4f5c\u548c\u5bf9\u300c\u9876\u70b9\u300d\u7684\u64cd\u4f5c\uff0c\u5728\u300c\u90bb\u63a5\u77e9\u9635\u300d\u548c\u300c\u90bb\u63a5\u8868\u300d\u8fd9\u4e24\u79cd\u8868\u793a\u4e0b\u7684\u5b9e\u73b0\u65b9\u5f0f\u4e0d\u540c\u3002

    "},{"location":"chapter_graph/graph_operations/#921","title":"9.2.1. \u00a0 \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u7684\u5b9e\u73b0","text":"

    \u8bbe\u56fe\u7684\u9876\u70b9\u603b\u6570\u4e3a \\(n\\) \uff0c\u5219\u6709\uff1a

    • \u6dfb\u52a0\u6216\u5220\u9664\u8fb9\uff1a\u76f4\u63a5\u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u4fee\u6539\u6307\u5b9a\u8fb9\u7684\u5bf9\u5e94\u5143\u7d20\u5373\u53ef\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002\u800c\u7531\u4e8e\u662f\u65e0\u5411\u56fe\uff0c\u56e0\u6b64\u9700\u8981\u540c\u65f6\u66f4\u65b0\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u3002
    • \u6dfb\u52a0\u9876\u70b9\uff1a\u5728\u90bb\u63a5\u77e9\u9635\u7684\u5c3e\u90e8\u6dfb\u52a0\u4e00\u884c\u4e00\u5217\uff0c\u5e76\u5168\u90e8\u586b \\(0\\) \u5373\u53ef\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\u3002
    • \u5220\u9664\u9876\u70b9\uff1a\u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u4e00\u884c\u4e00\u5217\u3002\u5f53\u5220\u9664\u9996\u884c\u9996\u5217\u65f6\u8fbe\u5230\u6700\u5dee\u60c5\u51b5\uff0c\u9700\u8981\u5c06 \\((n-1)^2\\) \u4e2a\u5143\u7d20\u201c\u5411\u5de6\u4e0a\u79fb\u52a8\u201d\uff0c\u4ece\u800c\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002
    • \u521d\u59cb\u5316\uff1a\u4f20\u5165 \\(n\\) \u4e2a\u9876\u70b9\uff0c\u521d\u59cb\u5316\u957f\u5ea6\u4e3a \\(n\\) \u7684\u9876\u70b9\u5217\u8868 vertices \uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b\u521d\u59cb\u5316 \\(n \\times n\\) \u5927\u5c0f\u7684\u90bb\u63a5\u77e9\u9635 adjMat \uff0c\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002
    \u521d\u59cb\u5316\u90bb\u63a5\u77e9\u9635\u6dfb\u52a0\u8fb9\u5220\u9664\u8fb9\u6dfb\u52a0\u9876\u70b9\u5220\u9664\u9876\u70b9

    \u4ee5\u4e0b\u662f\u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u8868\u793a\u56fe\u7684\u5b9e\u73b0\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_adjacency_matrix.java
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nList<Integer> vertices;     // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nList<List<Integer>> adjMat; // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u65b9\u6cd5 */\npublic GraphAdjMat(int[] vertices, int[][] edges) {\nthis.vertices = new ArrayList<>();\nthis.adjMat = new ArrayList<>();\n// \u6dfb\u52a0\u9876\u70b9\nfor (int val : vertices) {\naddVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (int[] e : edges) {\naddEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size() {\nreturn vertices.size();\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(int val) {\nint n = size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.add(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nList<Integer> newRow = new ArrayList<>(n);\nfor (int j = 0; j < n; j++) {\nnewRow.add(0);\n}\nadjMat.add(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (List<Integer> row : adjMat) {\nrow.add(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(int index) {\nif (index >= size())\nthrow new IndexOutOfBoundsException();\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.remove(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.remove(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (List<Integer> row : adjMat) {\nrow.remove(index);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void addEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfBoundsException();\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat.get(i).set(j, 1);\nadjMat.get(j).set(i, 1);\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void removeEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfBoundsException();\nadjMat.get(i).set(j, 0);\nadjMat.get(j).set(i, 0);\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\npublic void print() {\nSystem.out.print(\"\u9876\u70b9\u5217\u8868 = \");\nSystem.out.println(vertices);\nSystem.out.println(\"\u90bb\u63a5\u77e9\u9635 =\");\nPrintUtil.printMatrix(adjMat);\n}\n}\n
    graph_adjacency_matrix.cpp
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nvector<int> vertices;       // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nvector<vector<int>> adjMat; // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nGraphAdjMat(const vector<int>& vertices, const vector<vector<int>>& edges) {\n// \u6dfb\u52a0\u9876\u70b9\nfor (int val : vertices) {\naddVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (const vector<int>& edge : edges) {\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nint size() const {\nreturn vertices.size();\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nvoid addVertex(int val) {\nint n = size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.push_back(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nadjMat.emplace_back(n, 0);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (vector<int>& row : adjMat) {\nrow.push_back(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nvoid removeVertex(int index) {\nif (index >= size()) {\nthrow out_of_range(\"\u9876\u70b9\u4e0d\u5b58\u5728\");\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.erase(vertices.begin() + index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.erase(adjMat.begin() + index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (vector<int>& row : adjMat) {\nrow.erase(row.begin() + index);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nvoid addEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j) {\nthrow out_of_range(\"\u9876\u70b9\u4e0d\u5b58\u5728\");\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat[i][j] = 1;\nadjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nvoid removeEdge(int i, int j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j) {\nthrow out_of_range(\"\u9876\u70b9\u4e0d\u5b58\u5728\");\n}\nadjMat[i][j] = 0;\nadjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nvoid print() {\ncout << \"\u9876\u70b9\u5217\u8868 = \";\nPrintUtil::printVector(vertices);\ncout << \"\u90bb\u63a5\u77e9\u9635 =\" << endl;\nPrintUtil::printVectorMatrix(adjMat);\n}\n};\n
    graph_adjacency_matrix.py
    class GraphAdjMat:\n\"\"\" \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b \"\"\"\n# \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nvertices: List[int] = []\n# \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadj_mat: List[List[int]] = []\ndef __init__(self, vertices: List[int], edges: List[List[int]]) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.vertices: List[int] = []\nself.adj_mat: List[List[int]] = []\n# \u6dfb\u52a0\u9876\u70b9\nfor val in vertices:\nself.add_vertex(val)\n# \u6dfb\u52a0\u8fb9\n# \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor e in edges:\nself.add_edge(e[0], e[1])\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u9876\u70b9\u6570\u91cf \"\"\"\nreturn len(self.vertices)\ndef add_vertex(self, val: int) -> None:\n\"\"\" \u6dfb\u52a0\u9876\u70b9 \"\"\"\nn = self.size()\n# \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nself.vertices.append(val)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nnew_row = [0] * n\nself.adj_mat.append(new_row)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor row in self.adj_mat:\nrow.append(0)\ndef remove_vertex(self, index: int) -> None:\n\"\"\" \u5220\u9664\u9876\u70b9 \"\"\"\nif index >= self.size():\nraise IndexError()\n# \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nself.vertices.pop(index)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nself.adj_mat.pop(index)\n# \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor row in self.adj_mat:\nrow.pop(index)\ndef add_edge(self, i: int, j: int) -> None:\n\"\"\" \u6dfb\u52a0\u8fb9 \"\"\"\n# \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\n# \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 or j < 0 or i >= self.size() or j >= self.size() or i == j:\nraise IndexError()\n# \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nself.adj_mat[i][j] = 1\nself.adj_mat[j][i] = 1\ndef remove_edge(self, i: int, j: int) -> None:\n\"\"\" \u5220\u9664\u8fb9 \"\"\"\n# \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\n# \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 or j < 0 or i >= self.size() or j >= self.size() or i == j:\nraise IndexError()\nself.adj_mat[i][j] = 0\nself.adj_mat[j][i] = 0\ndef print(self) -> None:\n\"\"\" \u6253\u5370\u90bb\u63a5\u77e9\u9635 \"\"\"\nprint(\"\u9876\u70b9\u5217\u8868 =\", self.vertices)\nprint(\"\u90bb\u63a5\u77e9\u9635 =\")\nprint_matrix(self.adj_mat)\n
    graph_adjacency_matrix.go
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\ntype graphAdjMat struct {\n// \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nvertices []int\n// \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadjMat [][]int\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nfunc newGraphAdjMat(vertices []int, edges [][]int) *graphAdjMat {\n// \u6dfb\u52a0\u9876\u70b9\nn := len(vertices)\nadjMat := make([][]int, n)\nfor i := range adjMat {\nadjMat[i] = make([]int, n)\n}\n// \u521d\u59cb\u5316\u56fe\ng := &graphAdjMat{\nvertices: vertices,\nadjMat:   adjMat,\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor i := range edges {\ng.addEdge(edges[i][0], edges[i][1])\n}\nreturn g\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nfunc (g *graphAdjMat) size() int {\nreturn len(g.vertices)\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nfunc (g *graphAdjMat) addVertex(val int) {\nn := g.size()\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\ng.vertices = append(g.vertices, val)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nnewRow := make([]int, n)\ng.adjMat = append(g.adjMat, newRow)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor i := range g.adjMat {\ng.adjMat[i] = append(g.adjMat[i], 0)\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nfunc (g *graphAdjMat) removeVertex(index int) {\nif index >= g.size() {\nreturn\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\ng.vertices = append(g.vertices[:index], g.vertices[index+1:]...)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\ng.adjMat = append(g.adjMat[:index], g.adjMat[index+1:]...)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor i := range g.adjMat {\ng.adjMat[i] = append(g.adjMat[i][:index], g.adjMat[i][index+1:]...)\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc (g *graphAdjMat) addEdge(i, j int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= g.size() || j >= g.size() || i == j {\nfmt.Errorf(\"%s\", \"Index Out Of Bounds Exception\")\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\ng.adjMat[i][j] = 1\ng.adjMat[j][i] = 1\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc (g *graphAdjMat) removeEdge(i, j int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= g.size() || j >= g.size() || i == j {\nfmt.Errorf(\"%s\", \"Index Out Of Bounds Exception\")\n}\ng.adjMat[i][j] = 0\ng.adjMat[j][i] = 0\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nfunc (g *graphAdjMat) print() {\nfmt.Printf(\"\\t\u9876\u70b9\u5217\u8868 = %v\\n\", g.vertices)\nfmt.Printf(\"\\t\u90bb\u63a5\u77e9\u9635 = \\n\")\nfor i := range g.adjMat {\nfmt.Printf(\"\\t\\t\\t%v\\n\", g.adjMat[i])\n}\n}\n
    graph_adjacency_matrix.js
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nvertices;   // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadjMat;     // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u51fd\u6570 */\nconstructor(vertices, edges) {\nthis.vertices = [];\nthis.adjMat = [];\n// \u6dfb\u52a0\u9876\u70b9\nfor (const val of vertices) {\nthis.addVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (const e of edges) {\nthis.addEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize() {\nreturn this.vertices.length;\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(val) {\nconst n = this.size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nthis.vertices.push(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nconst newRow = [];\nfor (let j = 0; j < n; j++) {\nnewRow.push(0);\n}\nthis.adjMat.push(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (const row of this.adjMat) {\nrow.push(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(index) {\nif (index >= this.size()) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nthis.vertices.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nthis.adjMat.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (const row of this.adjMat) {\nrow.splice(index, 1);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\naddEdge(i, j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nthis.adjMat[i][j] = 1;\nthis.adjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nremoveEdge(i, j) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\nthis.adjMat[i][j] = 0;\nthis.adjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nprint() {\nconsole.log(\"\u9876\u70b9\u5217\u8868 = \", this.vertices);\nconsole.log(\"\u90bb\u63a5\u77e9\u9635 =\", this.adjMat);\n}\n}\n
    graph_adjacency_matrix.ts
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nvertices: number[];     // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nadjMat: number[][];     // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u51fd\u6570 */\nconstructor(vertices: number[], edges: number[][]) {\nthis.vertices = [];\nthis.adjMat = [];\n// \u6dfb\u52a0\u9876\u70b9\nfor (const val of vertices) {\nthis.addVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor (const e of edges) {\nthis.addEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize(): number {\nreturn this.vertices.length;\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(val: number): void {\nconst n: number = this.size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nthis.vertices.push(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nconst newRow: number[] = [];\nfor (let j: number = 0; j < n; j++) {\nnewRow.push(0);\n}\nthis.adjMat.push(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor (const row of this.adjMat) {\nrow.push(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(index: number): void {\nif (index >= this.size()) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nthis.vertices.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nthis.adjMat.splice(index, 1);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor (const row of this.adjMat) {\nrow.splice(index, 1);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\naddEdge(i: number, j: number): void {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nthis.adjMat[i][j] = 1;\nthis.adjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nremoveEdge(i: number, j: number): void {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= this.size() || j >= this.size() || i === j) {\nthrow new RangeError(\"Index Out Of Bounds Exception\");\n}\nthis.adjMat[i][j] = 0;\nthis.adjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nprint(): void {\nconsole.log(\"\u9876\u70b9\u5217\u8868 = \", this.vertices);\nconsole.log(\"\u90bb\u63a5\u77e9\u9635 =\", this.adjMat);\n}\n}\n
    graph_adjacency_matrix.c
    [class]{graphAdjMat}-[func]{}\n
    graph_adjacency_matrix.cs
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat\n{\nList<int> vertices;     // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nList<List<int>> adjMat; // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u51fd\u6570 */\npublic GraphAdjMat(int[] vertices, int[][] edges)\n{\nthis.vertices = new List<int>();\nthis.adjMat = new List<List<int>>();\n// \u6dfb\u52a0\u9876\u70b9\nforeach (int val in vertices)\n{\naddVertex(val);\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nforeach (int[] e in edges)\n{\naddEdge(e[0], e[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size()\n{\nreturn vertices.Count;\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(int val)\n{\nint n = size();\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.Add(val);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nList<int> newRow = new List<int>(n);\nfor (int j = 0; j < n; j++)\n{\nnewRow.Add(0);\n}\nadjMat.Add(newRow);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nforeach (List<int> row in adjMat)\n{\nrow.Add(0);\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(int index)\n{\nif (index >= size())\nthrow new IndexOutOfRangeException();\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.RemoveAt(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.RemoveAt(index);\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nforeach (List<int> row in adjMat)\n{\nrow.RemoveAt(index);\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void addEdge(int i, int j)\n{\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfRangeException();\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat[i][j] = 1;\nadjMat[j][i] = 1;\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\npublic void removeEdge(int i, int j)\n{\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif (i < 0 || j < 0 || i >= size() || j >= size() || i == j)\nthrow new IndexOutOfRangeException();\nadjMat[i][j] = 0;\nadjMat[j][i] = 0;\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\npublic void print()\n{\nConsole.Write(\"\u9876\u70b9\u5217\u8868 = \");\nPrintUtil.PrintList(vertices);\nConsole.WriteLine(\"\u90bb\u63a5\u77e9\u9635 =\");\nPrintUtil.printMatrix(adjMat);\n}\n}\n
    graph_adjacency_matrix.swift
    /* \u57fa\u4e8e\u90bb\u63a5\u77e9\u9635\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjMat {\nprivate var vertices: [Int] // \u9876\u70b9\u5217\u8868\uff0c\u5143\u7d20\u4ee3\u8868\u201c\u9876\u70b9\u503c\u201d\uff0c\u7d22\u5f15\u4ee3\u8868\u201c\u9876\u70b9\u7d22\u5f15\u201d\nprivate var adjMat: [[Int]] // \u90bb\u63a5\u77e9\u9635\uff0c\u884c\u5217\u7d22\u5f15\u5bf9\u5e94\u201c\u9876\u70b9\u7d22\u5f15\u201d\n/* \u6784\u9020\u65b9\u6cd5 */\ninit(vertices: [Int], edges: [[Int]]) {\nself.vertices = []\nadjMat = []\n// \u6dfb\u52a0\u9876\u70b9\nfor val in vertices {\naddVertex(val: val)\n}\n// \u6dfb\u52a0\u8fb9\n// \u8bf7\u6ce8\u610f\uff0cedges \u5143\u7d20\u4ee3\u8868\u9876\u70b9\u7d22\u5f15\uff0c\u5373\u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfor e in edges {\naddEdge(i: e[0], j: e[1])\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nfunc size() -> Int {\nvertices.count\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nfunc addVertex(val: Int) {\nlet n = size()\n// \u5411\u9876\u70b9\u5217\u8868\u4e2d\u6dfb\u52a0\u65b0\u9876\u70b9\u7684\u503c\nvertices.append(val)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u884c\nlet newRow = Array(repeating: 0, count: n)\nadjMat.append(newRow)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u6dfb\u52a0\u4e00\u5217\nfor i in adjMat.indices {\nadjMat[i].append(0)\n}\n}\n/* \u5220\u9664\u9876\u70b9 */\nfunc removeVertex(index: Int) {\nif index >= size() {\nfatalError(\"\u8d8a\u754c\")\n}\n// \u5728\u9876\u70b9\u5217\u8868\u4e2d\u79fb\u9664\u7d22\u5f15 index \u7684\u9876\u70b9\nvertices.remove(at: index)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u884c\nadjMat.remove(at: index)\n// \u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u5220\u9664\u7d22\u5f15 index \u7684\u5217\nfor i in adjMat.indices {\nadjMat[i].remove(at: index)\n}\n}\n/* \u6dfb\u52a0\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc addEdge(i: Int, j: Int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= size() || j >= size() || i == j {\nfatalError(\"\u8d8a\u754c\")\n}\n// \u5728\u65e0\u5411\u56fe\u4e2d\uff0c\u90bb\u63a5\u77e9\u9635\u6cbf\u4e3b\u5bf9\u89d2\u7ebf\u5bf9\u79f0\uff0c\u5373\u6ee1\u8db3 (i, j) == (j, i)\nadjMat[i][j] = 1\nadjMat[j][i] = 1\n}\n/* \u5220\u9664\u8fb9 */\n// \u53c2\u6570 i, j \u5bf9\u5e94 vertices \u5143\u7d20\u7d22\u5f15\nfunc removeEdge(i: Int, j: Int) {\n// \u7d22\u5f15\u8d8a\u754c\u4e0e\u76f8\u7b49\u5904\u7406\nif i < 0 || j < 0 || i >= size() || j >= size() || i == j {\nfatalError(\"\u8d8a\u754c\")\n}\nadjMat[i][j] = 0\nadjMat[j][i] = 0\n}\n/* \u6253\u5370\u90bb\u63a5\u77e9\u9635 */\nfunc print() {\nSwift.print(\"\u9876\u70b9\u5217\u8868 = \", terminator: \"\")\nSwift.print(vertices)\nSwift.print(\"\u90bb\u63a5\u77e9\u9635 =\")\nPrintUtil.printMatrix(matrix: adjMat)\n}\n}\n
    graph_adjacency_matrix.zig
    \n
    "},{"location":"chapter_graph/graph_operations/#922","title":"9.2.2. \u00a0 \u57fa\u4e8e\u90bb\u63a5\u8868\u7684\u5b9e\u73b0","text":"

    \u8bbe\u56fe\u7684\u9876\u70b9\u603b\u6570\u4e3a \\(n\\) \u3001\u8fb9\u603b\u6570\u4e3a \\(m\\) \uff0c\u5219\u6709\uff1a

    • \u6dfb\u52a0\u8fb9\uff1a\u5728\u9876\u70b9\u5bf9\u5e94\u94fe\u8868\u7684\u5c3e\u90e8\u6dfb\u52a0\u8fb9\u5373\u53ef\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002\u56e0\u4e3a\u662f\u65e0\u5411\u56fe\uff0c\u6240\u4ee5\u9700\u8981\u540c\u65f6\u6dfb\u52a0\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u3002
    • \u5220\u9664\u8fb9\uff1a\u5728\u9876\u70b9\u5bf9\u5e94\u94fe\u8868\u4e2d\u67e5\u8be2\u4e0e\u5220\u9664\u6307\u5b9a\u8fb9\uff0c\u4f7f\u7528 \\(O(m)\\) \u65f6\u95f4\u3002\u4e0e\u6dfb\u52a0\u8fb9\u4e00\u6837\uff0c\u9700\u8981\u540c\u65f6\u5220\u9664\u4e24\u4e2a\u65b9\u5411\u7684\u8fb9\u3002
    • \u6dfb\u52a0\u9876\u70b9\uff1a\u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u94fe\u8868\u5373\u53ef\uff0c\u5e76\u4ee5\u65b0\u589e\u9876\u70b9\u4e3a\u94fe\u8868\u5934\u7ed3\u70b9\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002
    • \u5220\u9664\u9876\u70b9\uff1a\u9700\u8981\u904d\u5386\u6574\u4e2a\u90bb\u63a5\u8868\uff0c\u5220\u9664\u5305\u542b\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u8fb9\uff0c\u4f7f\u7528 \\(O(n + m)\\) \u65f6\u95f4\u3002
    • \u521d\u59cb\u5316\uff1a\u9700\u8981\u5728\u90bb\u63a5\u8868\u4e2d\u5efa\u7acb \\(n\\) \u4e2a\u7ed3\u70b9\u548c \\(2m\\) \u6761\u8fb9\uff0c\u4f7f\u7528 \\(O(n + m)\\) \u65f6\u95f4\u3002
    \u521d\u59cb\u5316\u90bb\u63a5\u8868\u6dfb\u52a0\u8fb9\u5220\u9664\u8fb9\u6dfb\u52a0\u9876\u70b9\u5220\u9664\u9876\u70b9

    \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u56fe\u7684\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002\u7ec6\u5fc3\u7684\u540c\u5b66\u53ef\u80fd\u6ce8\u610f\u5230\uff0c\u6211\u4eec\u5728\u90bb\u63a5\u8868\u4e2d\u4f7f\u7528 Vertex \u7ed3\u70b9\u7c7b\u6765\u8868\u793a\u9876\u70b9\uff0c\u8fd9\u6837\u505a\u7684\u539f\u56e0\u662f\uff1a

    • \u5982\u679c\u6211\u4eec\u9009\u62e9\u901a\u8fc7\u9876\u70b9\u503c\u6765\u533a\u5206\u4e0d\u540c\u9876\u70b9\uff0c\u90a3\u4e48\u503c\u91cd\u590d\u7684\u9876\u70b9\u5c06\u65e0\u6cd5\u88ab\u533a\u5206\u3002
    • \u5982\u679c\u7c7b\u4f3c\u90bb\u63a5\u77e9\u9635\u90a3\u6837\uff0c\u4f7f\u7528\u9876\u70b9\u5217\u8868\u7d22\u5f15\u6765\u533a\u5206\u4e0d\u540c\u9876\u70b9\u3002\u90a3\u4e48\uff0c\u5047\u8bbe\u6211\u4eec\u60f3\u8981\u5220\u9664\u7d22\u5f15\u4e3a \\(i\\) \u7684\u9876\u70b9\uff0c\u5219\u9700\u8981\u904d\u5386\u6574\u4e2a\u90bb\u63a5\u8868\uff0c\u5c06\u5176\u4e2d \\(> i\\) \u7684\u7d22\u5f15\u5168\u90e8\u6267\u884c \\(-1\\) \uff0c\u8fd9\u6837\u64cd\u4f5c\u6548\u7387\u592a\u4f4e\u3002
    • \u56e0\u6b64\u6211\u4eec\u8003\u8651\u5f15\u5165\u9876\u70b9\u7c7b Vertex \uff0c\u4f7f\u5f97\u6bcf\u4e2a\u9876\u70b9\u90fd\u662f\u552f\u4e00\u7684\u5bf9\u8c61\uff0c\u6b64\u65f6\u5220\u9664\u9876\u70b9\u65f6\u5c31\u65e0\u9700\u6539\u52a8\u5176\u4f59\u9876\u70b9\u4e86\u3002
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_adjacency_list.java
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nMap<Vertex, List<Vertex>> adjList;\n/* \u6784\u9020\u65b9\u6cd5 */\npublic GraphAdjList(Vertex[][] edges) {\nthis.adjList = new HashMap<>();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (Vertex[] edge : edges) {\naddVertex(edge[0]);\naddVertex(edge[1]);\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size() {\nreturn adjList.size();\n}\n/* \u6dfb\u52a0\u8fb9 */\npublic void addEdge(Vertex vet1, Vertex vet2) {\nif (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2)\nthrow new IllegalArgumentException();\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList.get(vet1).add(vet2);\nadjList.get(vet2).add(vet1);\n}\n/* \u5220\u9664\u8fb9 */\npublic void removeEdge(Vertex vet1, Vertex vet2) {\nif (!adjList.containsKey(vet1) || !adjList.containsKey(vet2) || vet1 == vet2)\nthrow new IllegalArgumentException();\n// \u5220\u9664\u8fb9 vet1 - vet2\nadjList.get(vet1).remove(vet2);\nadjList.get(vet2).remove(vet1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(Vertex vet) {\nif (adjList.containsKey(vet))\nreturn;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList.put(vet, new ArrayList<>());\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(Vertex vet) {\nif (!adjList.containsKey(vet))\nthrow new IllegalArgumentException();\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.remove(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (List<Vertex> list : adjList.values()) {\nlist.remove(vet);\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\npublic void print() {\nSystem.out.println(\"\u90bb\u63a5\u8868 =\");\nfor (Map.Entry<Vertex, List<Vertex>> entry : adjList.entrySet()) {\nList<Integer> tmp = new ArrayList<>();\nfor (Vertex vertex : entry.getValue())\ntmp.add(vertex.val);\nSystem.out.println(entry.getKey().val + \": \" + tmp + \",\");\n}\n}\n}\n
    graph_adjacency_list.cpp
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\npublic:\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nunordered_map<Vertex*, vector<Vertex*>> adjList;\n/* \u5728 vector \u4e2d\u5220\u9664\u6307\u5b9a\u7ed3\u70b9 */\nvoid remove(vector<Vertex*> &vec, Vertex *vet) {\nfor (int i = 0; i < vec.size(); i++) {\nif (vec[i] == vet) {\nvec.erase(vec.begin() + i);\nbreak;\n}\n}\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nGraphAdjList(const vector<vector<Vertex*>>& edges) {\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (const vector<Vertex*>& edge : edges) {\naddVertex(edge[0]);\naddVertex(edge[1]);\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nint size() { return adjList.size(); }\n/* \u6dfb\u52a0\u8fb9 */\nvoid addEdge(Vertex* vet1, Vertex* vet2) {\nif (!adjList.count(vet1) || !adjList.count(vet2) || vet1 == vet2)\nthrow invalid_argument(\"\u4e0d\u5b58\u5728\u9876\u70b9\");\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList[vet1].push_back(vet2);\nadjList[vet2].push_back(vet1);\n}\n/* \u5220\u9664\u8fb9 */\nvoid removeEdge(Vertex* vet1, Vertex* vet2) {\nif (!adjList.count(vet1) || !adjList.count(vet2) || vet1 == vet2)\nthrow invalid_argument(\"\u4e0d\u5b58\u5728\u9876\u70b9\");\n// \u5220\u9664\u8fb9 vet1 - vet2\nremove(adjList[vet1], vet2);\nremove(adjList[vet2], vet1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nvoid addVertex(Vertex* vet) {\nif (adjList.count(vet)) return;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList[vet] = vector<Vertex*>();\n}\n/* \u5220\u9664\u9876\u70b9 */\nvoid removeVertex(Vertex* vet) {\nif (!adjList.count(vet))\nthrow invalid_argument(\"\u4e0d\u5b58\u5728\u9876\u70b9\");\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.erase(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (auto& [key, vec] : adjList) {\nremove(vec, vet);\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nvoid print() {\ncout << \"\u90bb\u63a5\u8868 =\" << endl;\nfor (auto& [key, vec] : adjList) {\ncout << key->val << \": \";\nPrintUtil::printVector(vetsToVals(vec));\n}\n}\n};\n
    graph_adjacency_list.py
    class GraphAdjList:\n\"\"\" \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b \"\"\"\ndef __init__(self, edges: List[List[Vertex]]) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\n# \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nself.adj_list: Dict = {}\n# \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor edge in edges:\nself.add_vertex(edge[0])\nself.add_vertex(edge[1])\nself.add_edge(edge[0], edge[1])\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u9876\u70b9\u6570\u91cf \"\"\"\nreturn len(self.adj_list)\ndef add_edge(self, vet1: Vertex, vet2: Vertex) -> None:\n\"\"\" \u6dfb\u52a0\u8fb9 \"\"\"\nif vet1 not in self.adj_list or vet2 not in self.adj_list or vet1 == vet2:\nraise ValueError\n# \u6dfb\u52a0\u8fb9 vet1 - vet2\nself.adj_list[vet1].append(vet2)\nself.adj_list[vet2].append(vet1)\ndef remove_edge(self, vet1: Vertex, vet2: Vertex) -> None:\n\"\"\" \u5220\u9664\u8fb9 \"\"\"\nif vet1 not in self.adj_list or vet2 not in self.adj_list or vet1 == vet2:\nraise ValueError\n# \u5220\u9664\u8fb9 vet1 - vet2\nself.adj_list[vet1].remove(vet2)\nself.adj_list[vet2].remove(vet1)\ndef add_vertex(self, vet: Vertex) -> None:\n\"\"\" \u6dfb\u52a0\u9876\u70b9 \"\"\"\nif vet in self.adj_list:\nreturn\n# \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nself.adj_list[vet] = []\ndef remove_vertex(self, vet: Vertex) -> None:\n\"\"\" \u5220\u9664\u9876\u70b9 \"\"\"\nif vet not in self.adj_list:\nraise ValueError\n# \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nself.adj_list.pop(vet)\n# \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor vertex in self.adj_list:\nif vet in self.adj_list[vertex]:\nself.adj_list[vertex].remove(vet)\ndef print(self) -> None:\n\"\"\" \u6253\u5370\u90bb\u63a5\u8868 \"\"\"\nprint(\"\u90bb\u63a5\u8868 =\")\nfor vertex in self.adj_list:\ntmp = [v.val for v in self.adj_list[vertex]]\nprint(f\"{vertex.val}: {tmp},\")\n
    graph_adjacency_list.go
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\ntype graphAdjList struct {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nadjList map[Vertex][]Vertex\n}\n/* \u6784\u9020\u65b9\u6cd5 */\nfunc newGraphAdjList(edges [][]Vertex) *graphAdjList {\ng := &graphAdjList{\nadjList: make(map[Vertex][]Vertex),\n}\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor _, edge := range edges {\ng.addVertex(edge[0])\ng.addVertex(edge[1])\ng.addEdge(edge[0], edge[1])\n}\nreturn g\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nfunc (g *graphAdjList) size() int {\nreturn len(g.adjList)\n}\n/* \u6dfb\u52a0\u8fb9 */\nfunc (g *graphAdjList) addEdge(vet1 Vertex, vet2 Vertex) {\n_, ok1 := g.adjList[vet1]\n_, ok2 := g.adjList[vet2]\nif !ok1 || !ok2 || vet1 == vet2 {\npanic(\"error\")\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2, \u6dfb\u52a0\u533f\u540d struct{},\ng.adjList[vet1] = append(g.adjList[vet1], vet2)\ng.adjList[vet2] = append(g.adjList[vet2], vet1)\n}\n/* \u5220\u9664\u8fb9 */\nfunc (g *graphAdjList) removeEdge(vet1 Vertex, vet2 Vertex) {\n_, ok1 := g.adjList[vet1]\n_, ok2 := g.adjList[vet2]\nif !ok1 || !ok2 || vet1 == vet2 {\npanic(\"error\")\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nDeleteSliceElms(g.adjList[vet1], vet2)\nDeleteSliceElms(g.adjList[vet2], vet1)\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\nfunc (g *graphAdjList) addVertex(vet Vertex) {\n_, ok := g.adjList[vet]\nif ok {\nreturn\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\ng.adjList[vet] = make([]Vertex, 0)\n}\n/* \u5220\u9664\u9876\u70b9 */\nfunc (g *graphAdjList) removeVertex(vet Vertex) {\n_, ok := g.adjList[vet]\nif !ok {\npanic(\"error\")\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\ndelete(g.adjList, vet)\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor _, list := range g.adjList {\nDeleteSliceElms(list, vet)\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nfunc (g *graphAdjList) print() {\nvar builder strings.Builder\nfmt.Printf(\"\u90bb\u63a5\u8868 = \\n\")\nfor k, v := range g.adjList {\nbuilder.WriteString(\"\\t\\t\" + strconv.Itoa(k.Val) + \": \")\nfor _, vet := range v {\nbuilder.WriteString(strconv.Itoa(vet.Val) + \" \")\n}\nfmt.Println(builder.String())\nbuilder.Reset()\n}\n}\n
    graph_adjacency_list.js
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nadjList;\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(edges) {\nthis.adjList = new Map();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (const edge of edges) {\nthis.addVertex(edge[0]);\nthis.addVertex(edge[1]);\nthis.addEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize() {\nreturn this.adjList.size;\n}\n/* \u6dfb\u52a0\u8fb9 */\naddEdge(vet1, vet2) {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error(\"Illegal Argument Exception\");\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).push(vet2);\nthis.adjList.get(vet2).push(vet1);\n}\n/* \u5220\u9664\u8fb9 */\nremoveEdge(vet1, vet2) {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error(\"Illegal Argument Exception\");\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).splice(this.adjList.get(vet1).indexOf(vet2), 1);\nthis.adjList.get(vet2).splice(this.adjList.get(vet2).indexOf(vet1), 1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(vet) {\nif (this.adjList.has(vet)) return;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nthis.adjList.set(vet, []);\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(vet) {\nif (!this.adjList.has(vet)) {\nthrow new Error(\"Illegal Argument Exception\");\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nthis.adjList.delete(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (let set of this.adjList.values()) {\nconst index = set.indexOf(vet);\nif (index > -1) {\nset.splice(index, 1);\n}\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nprint() {\nconsole.log(\"\u90bb\u63a5\u8868 =\");\nfor (const [key, value] of this.adjList) {\nconst tmp = [];\nfor (const vertex of value) {\ntmp.push(vertex.val);\n}\nconsole.log(key.val + \": \" + tmp.join());\n}\n}\n}\n
    graph_adjacency_list.ts
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nadjList: Map<Vertex, Vertex[]>;\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(edges: Vertex[][]) {\nthis.adjList = new Map();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor (const edge of edges) {\nthis.addVertex(edge[0]);\nthis.addVertex(edge[1]);\nthis.addEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\nsize(): number {\nreturn this.adjList.size;\n}\n/* \u6dfb\u52a0\u8fb9 */\naddEdge(vet1: Vertex, vet2: Vertex): void {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error('Illegal Argument Exception');\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).push(vet2);\nthis.adjList.get(vet2).push(vet1);\n}\n/* \u5220\u9664\u8fb9 */\nremoveEdge(vet1: Vertex, vet2: Vertex): void {\nif (!this.adjList.has(vet1) || !this.adjList.has(vet2) || vet1 === vet2) {\nthrow new Error('Illegal Argument Exception');\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nthis.adjList.get(vet1).splice(this.adjList.get(vet1).indexOf(vet2), 1);\nthis.adjList.get(vet2).splice(this.adjList.get(vet2).indexOf(vet1), 1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\naddVertex(vet: Vertex): void {\nif (this.adjList.has(vet)) return;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nthis.adjList.set(vet, []);\n}\n/* \u5220\u9664\u9876\u70b9 */\nremoveVertex(vet: Vertex): void {\nif (!this.adjList.has(vet)) {\nthrow new Error('Illegal Argument Exception');\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nthis.adjList.delete(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor (let set of this.adjList.values()) {\nconst index: number = set.indexOf(vet);\nif (index > -1) {\nset.splice(index, 1);\n}\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\nprint(): void {\nconsole.log('\u90bb\u63a5\u8868 =');\nfor (const [key, value] of this.adjList.entries()) {\nconst tmp = [];\nfor (const vertex of value) {\ntmp.push(vertex.val);\n}\nconsole.log(key.val + ': ' + tmp.join());\n}\n}\n}\n
    graph_adjacency_list.c
    [class]{graphAdjList}-[func]{}\n
    graph_adjacency_list.cs
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList\n{\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\npublic Dictionary<Vertex, List<Vertex>> adjList;\n/* \u6784\u9020\u51fd\u6570 */\npublic GraphAdjList(Vertex[][] edges)\n{\nthis.adjList = new Dictionary<Vertex, List<Vertex>>();\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nforeach (Vertex[] edge in edges)\n{\naddVertex(edge[0]);\naddVertex(edge[1]);\naddEdge(edge[0], edge[1]);\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic int size()\n{\nreturn adjList.Count;\n}\n/* \u6dfb\u52a0\u8fb9 */\npublic void addEdge(Vertex vet1, Vertex vet2)\n{\nif (!adjList.ContainsKey(vet1) || !adjList.ContainsKey(vet2) || vet1 == vet2)\nthrow new InvalidOperationException();\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList[vet1].Add(vet2);\nadjList[vet2].Add(vet1);\n}\n/* \u5220\u9664\u8fb9 */\npublic void removeEdge(Vertex vet1, Vertex vet2)\n{\nif (!adjList.ContainsKey(vet1) || !adjList.ContainsKey(vet2) || vet1 == vet2)\nthrow new InvalidOperationException();\n// \u5220\u9664\u8fb9 vet1 - vet2\nadjList[vet1].Remove(vet2);\nadjList[vet2].Remove(vet1);\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic void addVertex(Vertex vet)\n{\nif (adjList.ContainsKey(vet))\nreturn;\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList.Add(vet, new List<Vertex>());\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic void removeVertex(Vertex vet)\n{\nif (!adjList.ContainsKey(vet))\nthrow new InvalidOperationException();\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.Remove(vet);\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nforeach (List<Vertex> list in adjList.Values)\n{\nlist.Remove(vet);\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\npublic void print()\n{\nConsole.WriteLine(\"\u90bb\u63a5\u8868 =\");\nforeach (KeyValuePair<Vertex, List<Vertex>> entry in adjList)\n{\nList<int> tmp = new List<int>();\nforeach (Vertex vertex in entry.Value)\ntmp.Add(vertex.Val);\nConsole.WriteLine(entry.Key.Val + \": [\" + string.Join(\", \", tmp) + \"],\");\n}\n}\n}\n
    graph_adjacency_list.swift
    /* \u57fa\u4e8e\u90bb\u63a5\u8868\u5b9e\u73b0\u7684\u65e0\u5411\u56fe\u7c7b */\nclass GraphAdjList {\n// \u90bb\u63a5\u8868\uff0ckey: \u9876\u70b9\uff0cvalue\uff1a\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\npublic private(set) var adjList: [Vertex: [Vertex]]\n/* \u6784\u9020\u65b9\u6cd5 */\npublic init(edges: [[Vertex]]) {\nadjList = [:]\n// \u6dfb\u52a0\u6240\u6709\u9876\u70b9\u548c\u8fb9\nfor edge in edges {\naddVertex(vet: edge[0])\naddVertex(vet: edge[1])\naddEdge(vet1: edge[0], vet2: edge[1])\n}\n}\n/* \u83b7\u53d6\u9876\u70b9\u6570\u91cf */\npublic func size() -> Int {\nadjList.count\n}\n/* \u6dfb\u52a0\u8fb9 */\npublic func addEdge(vet1: Vertex, vet2: Vertex) {\nif adjList[vet1] == nil || adjList[vet2] == nil || vet1 == vet2 {\nfatalError(\"\u53c2\u6570\u9519\u8bef\")\n}\n// \u6dfb\u52a0\u8fb9 vet1 - vet2\nadjList[vet1]?.append(vet2)\nadjList[vet2]?.append(vet1)\n}\n/* \u5220\u9664\u8fb9 */\npublic func removeEdge(vet1: Vertex, vet2: Vertex) {\nif adjList[vet1] == nil || adjList[vet2] == nil || vet1 == vet2 {\nfatalError(\"\u53c2\u6570\u9519\u8bef\")\n}\n// \u5220\u9664\u8fb9 vet1 - vet2\nadjList[vet1]?.removeAll(where: { $0 == vet2 })\nadjList[vet2]?.removeAll(where: { $0 == vet1 })\n}\n/* \u6dfb\u52a0\u9876\u70b9 */\npublic func addVertex(vet: Vertex) {\nif adjList[vet] != nil {\nreturn\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u6dfb\u52a0\u4e00\u4e2a\u65b0\u94fe\u8868\nadjList[vet] = []\n}\n/* \u5220\u9664\u9876\u70b9 */\npublic func removeVertex(vet: Vertex) {\nif adjList[vet] == nil {\nfatalError(\"\u53c2\u6570\u9519\u8bef\")\n}\n// \u5728\u90bb\u63a5\u8868\u4e2d\u5220\u9664\u9876\u70b9 vet \u5bf9\u5e94\u7684\u94fe\u8868\nadjList.removeValue(forKey: vet)\n// \u904d\u5386\u5176\u5b83\u9876\u70b9\u7684\u94fe\u8868\uff0c\u5220\u9664\u6240\u6709\u5305\u542b vet \u7684\u8fb9\nfor key in adjList.keys {\nadjList[key]?.removeAll(where: { $0 == vet })\n}\n}\n/* \u6253\u5370\u90bb\u63a5\u8868 */\npublic func print() {\nSwift.print(\"\u90bb\u63a5\u8868 =\")\nfor entry in adjList {\nvar tmp: [Int] = []\nfor vertex in entry.value {\ntmp.append(vertex.val)\n}\nSwift.print(\"\\(entry.key.val): \\(tmp),\")\n}\n}\n}\n
    graph_adjacency_list.zig
    [class]{GraphAdjList}-[func]{}\n
    "},{"location":"chapter_graph/graph_operations/#923","title":"9.2.3. \u00a0 \u6548\u7387\u5bf9\u6bd4","text":"

    \u8bbe\u56fe\u4e2d\u5171\u6709 \\(n\\) \u4e2a\u9876\u70b9\u548c \\(m\\) \u6761\u8fb9\uff0c\u4e0b\u8868\u4e3a\u90bb\u63a5\u77e9\u9635\u548c\u90bb\u63a5\u8868\u7684\u65f6\u95f4\u548c\u7a7a\u95f4\u6548\u7387\u5bf9\u6bd4\u3002

    \u90bb\u63a5\u77e9\u9635 \u90bb\u63a5\u8868\uff08\u94fe\u8868\uff09 \u90bb\u63a5\u8868\uff08\u54c8\u5e0c\u8868\uff09 \u5224\u65ad\u662f\u5426\u90bb\u63a5 \\(O(1)\\) \\(O(m)\\) \\(O(1)\\) \u6dfb\u52a0\u8fb9 \\(O(1)\\) \\(O(1)\\) \\(O(1)\\) \u5220\u9664\u8fb9 \\(O(1)\\) \\(O(m)\\) \\(O(1)\\) \u6dfb\u52a0\u9876\u70b9 \\(O(n)\\) \\(O(1)\\) \\(O(1)\\) \u5220\u9664\u9876\u70b9 \\(O(n^2)\\) \\(O(n + m)\\) \\(O(n)\\) \u5185\u5b58\u7a7a\u95f4\u5360\u7528 \\(O(n^2)\\) \\(O(n + m)\\) \\(O(n + m)\\)

    \u89c2\u5bdf\u4e0a\u8868\uff0c\u8c8c\u4f3c\u90bb\u63a5\u8868\uff08\u54c8\u5e0c\u8868\uff09\u7684\u65f6\u95f4\u4e0e\u7a7a\u95f4\u6548\u7387\u6700\u4f18\u3002\u4f46\u5b9e\u9645\u4e0a\uff0c\u5728\u90bb\u63a5\u77e9\u9635\u4e2d\u64cd\u4f5c\u8fb9\u7684\u6548\u7387\u66f4\u9ad8\uff0c\u53ea\u9700\u8981\u4e00\u6b21\u6570\u7ec4\u8bbf\u95ee\u6216\u8d4b\u503c\u64cd\u4f5c\u5373\u53ef\u3002\u603b\u7ed3\u4ee5\u4e0a\uff0c\u90bb\u63a5\u77e9\u9635\u4f53\u73b0\u201c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u201d\uff0c\u90bb\u63a5\u8868\u4f53\u73b0\u201c\u4ee5\u65f6\u95f4\u6362\u7a7a\u95f4\u201d\u3002

    "},{"location":"chapter_graph/graph_traversal/","title":"9.3. \u00a0 \u56fe\u7684\u904d\u5386","text":"

    \u56fe\u4e0e\u6811\u7684\u5173\u7cfb

    \u6811\u4ee3\u8868\u7684\u662f\u201c\u4e00\u5bf9\u591a\u201d\u7684\u5173\u7cfb\uff0c\u800c\u56fe\u5219\u81ea\u7531\u5ea6\u66f4\u9ad8\uff0c\u53ef\u4ee5\u4ee3\u8868\u4efb\u610f\u201c\u591a\u5bf9\u591a\u201d\u5173\u7cfb\u3002\u672c\u8d28\u4e0a\uff0c\u53ef\u4ee5\u628a\u6811\u770b\u4f5c\u662f\u56fe\u7684\u4e00\u7c7b\u7279\u4f8b\u3002\u90a3\u4e48\u663e\u7136\uff0c\u6811\u904d\u5386\u64cd\u4f5c\u4e5f\u662f\u56fe\u904d\u5386\u64cd\u4f5c\u7684\u4e00\u4e2a\u7279\u4f8b\uff0c\u4e24\u8005\u7684\u65b9\u6cd5\u662f\u975e\u5e38\u7c7b\u4f3c\u7684\uff0c\u5efa\u8bae\u4f60\u5728\u5b66\u4e60\u672c\u7ae0\u8282\u7684\u8fc7\u7a0b\u4e2d\u5c06\u4e24\u8005\u878d\u4f1a\u8d2f\u901a\u3002

    \u300c\u56fe\u300d\u4e0e\u300c\u6811\u300d\u90fd\u662f\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u90fd\u9700\u8981\u4f7f\u7528\u300c\u641c\u7d22\u7b97\u6cd5\u300d\u6765\u5b9e\u73b0\u904d\u5386\u64cd\u4f5c\u3002

    \u7c7b\u4f3c\u5730\uff0c\u56fe\u7684\u904d\u5386\u65b9\u5f0f\u4e5f\u5206\u4e3a\u4e24\u79cd\uff0c\u5373\u300c\u5e7f\u5ea6\u4f18\u5148\u904d\u5386 Breadth-First Traversal\u300d\u548c\u300c\u6df1\u5ea6\u4f18\u5148\u904d\u5386 Depth-First Travsersal\u300d\uff0c\u4e5f\u79f0\u300c\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22 Breadth-First Search\u300d\u548c\u300c\u6df1\u5ea6\u4f18\u5148\u641c\u7d22 Depth-First Search\u300d\uff0c\u7b80\u79f0\u4e3a BFS \u548c DFS \u3002

    "},{"location":"chapter_graph/graph_traversal/#931","title":"9.3.1. \u00a0 \u5e7f\u5ea6\u4f18\u5148\u904d\u5386","text":"

    \u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u4f18\u662f\u4e00\u79cd\u7531\u8fd1\u53ca\u8fdc\u7684\u904d\u5386\u65b9\u5f0f\uff0c\u4ece\u8ddd\u79bb\u6700\u8fd1\u7684\u9876\u70b9\u5f00\u59cb\u8bbf\u95ee\uff0c\u5e76\u4e00\u5c42\u5c42\u5411\u5916\u6269\u5f20\u3002\u5177\u4f53\u5730\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u5148\u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\uff0c\u968f\u540e\u904d\u5386\u4e0b\u4e2a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\uff0c\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026

    Fig. \u56fe\u7684\u5e7f\u5ea6\u4f18\u5148\u904d\u5386

    "},{"location":"chapter_graph/graph_traversal/#_1","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"

    BFS \u5e38\u501f\u52a9\u300c\u961f\u5217\u300d\u6765\u5b9e\u73b0\u3002\u961f\u5217\u5177\u6709\u201c\u5148\u5165\u5148\u51fa\u201d\u7684\u6027\u8d28\uff0c\u8fd9\u4e0e BFS \u201c\u7531\u8fd1\u53ca\u8fdc\u201d\u7684\u601d\u60f3\u662f\u5f02\u66f2\u540c\u5de5\u7684\u3002

    1. \u5c06\u904d\u5386\u8d77\u59cb\u9876\u70b9 startVet \u52a0\u5165\u961f\u5217\uff0c\u5e76\u5f00\u542f\u5faa\u73af\uff1b
    2. \u5728\u5faa\u73af\u7684\u6bcf\u8f6e\u8fed\u4ee3\u4e2d\uff0c\u5f39\u51fa\u961f\u9996\u9876\u70b9\u5f39\u51fa\u5e76\u8bb0\u5f55\u8bbf\u95ee\uff0c\u5e76\u5c06\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\u52a0\u5165\u5230\u961f\u5217\u5c3e\u90e8\uff1b
    3. \u5faa\u73af 2. \uff0c\u76f4\u5230\u6240\u6709\u9876\u70b9\u8bbf\u95ee\u5b8c\u6210\u540e\u7ed3\u675f\uff1b

    \u4e3a\u4e86\u9632\u6b62\u91cd\u590d\u904d\u5386\u9876\u70b9\uff0c\u6211\u4eec\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868 visited \u6765\u8bb0\u5f55\u54ea\u4e9b\u7ed3\u70b9\u5df2\u88ab\u8bbf\u95ee\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_bfs.java
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nList<Vertex> graphBFS(GraphAdjList graph, Vertex startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nList<Vertex> res = new ArrayList<>();\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nSet<Vertex> visited = new HashSet<>() {{ add(startVet); }};\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nQueue<Vertex> que = new LinkedList<>() {{ offer(startVet); }};\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (!que.isEmpty()) {\nVertex vet = que.poll(); // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.add(vet);            // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (Vertex adjVet : graph.adjList.get(vet)) {\nif (visited.contains(adjVet))\ncontinue;        // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nque.offer(adjVet);   // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.add(adjVet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.cpp
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nvector<Vertex*> graphBFS(GraphAdjList &graph, Vertex *startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvector<Vertex*> res;\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nunordered_set<Vertex*> visited = { startVet };\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nqueue<Vertex*> que;\nque.push(startVet);\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (!que.empty()) {\nVertex *vet = que.front();\nque.pop();          // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.push_back(vet); // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (auto adjVet : graph.adjList[vet]) {\nif (visited.count(adjVet))\ncontinue;           // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nque.push(adjVet);       // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.emplace(adjVet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.py
    def graph_bfs(graph: GraphAdjList, start_vet: Vertex) -> List[Vertex]:\n\"\"\" \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS \"\"\"\n# \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\n# \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres = []\n# \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited = set([start_vet])\n# \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nque = collections.deque([start_vet])\n# \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile len(que) > 0:\nvet = que.popleft()  # \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.append(vet)      # \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n# \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adj_vet in graph.adj_list[vet]:\nif adj_vet in visited:\ncontinue         # \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nque.append(adj_vet)  # \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.add(adj_vet) # \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n# \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n
    graph_bfs.go
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphBFS(g *graphAdjList, startVet Vertex) []Vertex {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres := make([]Vertex, 0)\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited := make(map[Vertex]struct{})\nvisited[startVet] = struct{}{}\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS, \u4f7f\u7528\u5207\u7247\u6a21\u62df\u961f\u5217\nqueue := make([]Vertex, 0)\nqueue = append(queue, startVet)\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nfor len(queue) > 0 {\n// \u961f\u9996\u9876\u70b9\u51fa\u961f\nvet := queue[0]\nqueue = queue[1:]\n// \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nres = append(res, vet)\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor _, adjVet := range g.adjList[vet] {\n_, isExist := visited[adjVet]\n// \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nif !isExist {\nqueue = append(queue, adjVet)\nvisited[adjVet] = struct{}{}\n}\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n}\n
    graph_bfs.js
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphBFS(graph, startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited = new Set();\nvisited.add(startVet);\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nconst que = [startVet];\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (que.length) {\nconst vet = que.shift();    // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.push(vet);              // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet) ?? []) {\nif (visited.has(adjVet)) {\ncontinue;           // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\nque.push(adjVet);       // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.add(adjVet);    // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.ts
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphBFS(graph: GraphAdjList, startVet: Vertex): Vertex[] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res: Vertex[] = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited: Set<Vertex> = new Set();\nvisited.add(startVet);\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nconst que = [startVet];\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile (que.length) {\nconst vet = que.shift(); // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.push(vet); // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet) ?? []) {\nif (visited.has(adjVet)) {\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\nque.push(adjVet); // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\nvisited.add(adjVet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res;\n}\n
    graph_bfs.c
    [class]{}-[func]{graphBFS}\n
    graph_bfs.cs
    [class]{graph_bfs}-[func]{graphBFS}\n
    graph_bfs.swift
    /* \u5e7f\u5ea6\u4f18\u5148\u904d\u5386 BFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphBFS(graph: GraphAdjList, startVet: Vertex) -> [Vertex] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvar res: [Vertex] = []\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvar visited: Set<Vertex> = [startVet]\n// \u961f\u5217\u7528\u4e8e\u5b9e\u73b0 BFS\nvar que: [Vertex] = [startVet]\n// \u4ee5\u9876\u70b9 vet \u4e3a\u8d77\u70b9\uff0c\u5faa\u73af\u76f4\u81f3\u8bbf\u95ee\u5b8c\u6240\u6709\u9876\u70b9\nwhile !que.isEmpty {\nlet vet = que.removeFirst() // \u961f\u9996\u9876\u70b9\u51fa\u961f\nres.append(vet) // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adjVet in graph.adjList[vet] ?? [] {\nif visited.contains(adjVet) {\ncontinue // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\nque.append(adjVet) // \u53ea\u5165\u961f\u672a\u8bbf\u95ee\u7684\u9876\u70b9\nvisited.insert(adjVet) // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n}\n}\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n}\n
    graph_bfs.zig
    [class]{}-[func]{graphBFS}\n

    \u4ee3\u7801\u76f8\u5bf9\u62bd\u8c61\uff0c\u5efa\u8bae\u5bf9\u7167\u4ee5\u4e0b\u52a8\u753b\u56fe\u793a\u6765\u52a0\u6df1\u7406\u89e3\u3002

    <1><2><3><4><5><6><7><8><9><10><11>

    \u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u7684\u5e8f\u5217\u662f\u5426\u552f\u4e00\uff1f

    \u4e0d\u552f\u4e00\u3002\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u53ea\u8981\u6c42\u201c\u7531\u8fd1\u53ca\u8fdc\u201d\uff0c\u800c\u591a\u4e2a\u76f8\u540c\u8ddd\u79bb\u7684\u9876\u70b9\u7684\u904d\u5386\u987a\u5e8f\u5141\u8bb8\u88ab\u4efb\u610f\u6253\u4e71\u3002\u4ee5\u4e0a\u56fe\u4e3a\u4f8b\uff0c\u9876\u70b9 \\(1\\) , \\(3\\) \u7684\u8bbf\u95ee\u987a\u5e8f\u53ef\u4ee5\u4ea4\u6362\u3001\u9876\u70b9 \\(2\\) , \\(4\\) , \\(6\\) \u7684\u8bbf\u95ee\u987a\u5e8f\u4e5f\u53ef\u4ee5\u4efb\u610f\u4ea4\u6362\u3001\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026

    "},{"location":"chapter_graph/graph_traversal/#_2","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a \u6240\u6709\u9876\u70b9\u90fd\u4f1a\u5165\u961f\u3001\u51fa\u961f\u4e00\u6b21\uff0c\u4f7f\u7528 \\(O(|V|)\\) \u65f6\u95f4\uff1b\u5728\u904d\u5386\u90bb\u63a5\u9876\u70b9\u7684\u8fc7\u7a0b\u4e2d\uff0c\u7531\u4e8e\u662f\u65e0\u5411\u56fe\uff0c\u56e0\u6b64\u6240\u6709\u8fb9\u90fd\u4f1a\u88ab\u8bbf\u95ee \\(2\\) \u6b21\uff0c\u4f7f\u7528 \\(O(2|E|)\\) \u65f6\u95f4\uff1b\u603b\u4f53\u4f7f\u7528 \\(O(|V| + |E|)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a \u5217\u8868 res \uff0c\u54c8\u5e0c\u8868 visited \uff0c\u961f\u5217 que \u4e2d\u7684\u9876\u70b9\u6570\u91cf\u6700\u591a\u4e3a \\(|V|\\) \uff0c\u4f7f\u7528 \\(O(|V|)\\) \u7a7a\u95f4\u3002

    "},{"location":"chapter_graph/graph_traversal/#932","title":"9.3.2. \u00a0 \u6df1\u5ea6\u4f18\u5148\u904d\u5386","text":"

    \u6df1\u5ea6\u4f18\u5148\u904d\u5386\u662f\u4e00\u79cd\u4f18\u5148\u8d70\u5230\u5e95\u3001\u65e0\u8def\u53ef\u8d70\u518d\u56de\u5934\u7684\u904d\u5386\u65b9\u5f0f\u3002\u5177\u4f53\u5730\uff0c\u4ece\u67d0\u4e2a\u9876\u70b9\u51fa\u53d1\uff0c\u4e0d\u65ad\u5730\u8bbf\u95ee\u5f53\u524d\u7ed3\u70b9\u7684\u67d0\u4e2a\u90bb\u63a5\u9876\u70b9\uff0c\u76f4\u5230\u8d70\u5230\u5c3d\u5934\u65f6\u56de\u6eaf\uff0c\u518d\u7ee7\u7eed\u8d70\u5230\u5e95 + \u56de\u6eaf\uff0c\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026\u76f4\u81f3\u6240\u6709\u9876\u70b9\u904d\u5386\u5b8c\u6210\u65f6\u7ed3\u675f\u3002

    Fig. \u56fe\u7684\u6df1\u5ea6\u4f18\u5148\u904d\u5386

    "},{"location":"chapter_graph/graph_traversal/#_3","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"

    \u8fd9\u79cd\u201c\u8d70\u5230\u5934 + \u56de\u6eaf\u201d\u7684\u7b97\u6cd5\u5f62\u5f0f\u4e00\u822c\u57fa\u4e8e\u9012\u5f52\u6765\u5b9e\u73b0\u3002\u4e0e BFS \u7c7b\u4f3c\uff0c\u5728 DFS \u4e2d\u6211\u4eec\u4e5f\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868 visited \u6765\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u7684\u9876\u70b9\uff0c\u4ee5\u907f\u514d\u91cd\u590d\u8bbf\u95ee\u9876\u70b9\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig graph_dfs.java
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nvoid dfs(GraphAdjList graph, Set<Vertex> visited, List<Vertex> res, Vertex vet) {\nres.add(vet);     // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (Vertex adjVet : graph.adjList.get(vet)) {\nif (visited.contains(adjVet))\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nList<Vertex> graphDFS(GraphAdjList graph, Vertex startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nList<Vertex> res = new ArrayList<>();\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nSet<Vertex> visited = new HashSet<>();\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.cpp
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nvoid dfs(GraphAdjList& graph, unordered_set<Vertex*>& visited, vector<Vertex*>& res, Vertex* vet) {\nres.push_back(vet);   // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.emplace(vet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (Vertex* adjVet : graph.adjList[vet]) {\nif (visited.count(adjVet))\ncontinue;     // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nvector<Vertex*> graphDFS(GraphAdjList& graph, Vertex* startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvector<Vertex*> res;\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nunordered_set<Vertex*> visited;\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.py
    def dfs(graph: GraphAdjList, visited: Set[Vertex], res: List[Vertex], vet: Vertex):\n\"\"\" \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 \"\"\"\nres.append(vet)     # \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet) # \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n# \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adjVet in graph.adj_list[vet]:\nif adjVet in visited:\ncontinue # \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n# \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet)\ndef graph_dfs(graph: GraphAdjList, start_vet: Vertex) -> List[Vertex]:\n\"\"\" \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \"\"\"\n# \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres = []\n# \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited = set()\ndfs(graph, visited, res, start_vet)\nreturn res\n
    graph_dfs.go
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nfunc dfs(g *graphAdjList, visited map[Vertex]struct{}, res *[]Vertex, vet Vertex) {\n// append \u64cd\u4f5c\u4f1a\u8fd4\u56de\u65b0\u7684\u7684\u5f15\u7528\uff0c\u5fc5\u987b\u8ba9\u539f\u5f15\u7528\u91cd\u65b0\u8d4b\u503c\u4e3a\u65b0slice\u7684\u5f15\u7528\n*res = append(*res, vet)\nvisited[vet] = struct{}{}\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor _, adjVet := range g.adjList[vet] {\n_, isExist := visited[adjVet]\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\nif !isExist {\ndfs(g, visited, res, adjVet)\n}\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphDFS(g *graphAdjList, startVet Vertex) []Vertex {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nres := make([]Vertex, 0)\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvisited := make(map[Vertex]struct{})\ndfs(g, visited, &res, startVet)\n// \u8fd4\u56de\u9876\u70b9\u904d\u5386\u5e8f\u5217\nreturn res\n}\n
    graph_dfs.js
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction dfs(graph, visited, res, vet) {\nres.push(vet);      // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet);   // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet)) {\nif (visited.has(adjVet)) {\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphDFS(graph, startVet) {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited = new Set();\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.ts
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nfunction dfs(graph: GraphAdjList, visited: Set<Vertex>, res: Vertex[], vet: Vertex): void {\nres.push(vet); // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.add(vet); // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor (const adjVet of graph.adjList.get(vet)) {\nif (visited.has(adjVet)) {\ncontinue; // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph, visited, res, adjVet);\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunction graphDFS(graph: GraphAdjList, startVet: Vertex): Vertex[] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nconst res: Vertex[] = [];\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nconst visited: Set<Vertex> = new Set();\ndfs(graph, visited, res, startVet);\nreturn res;\n}\n
    graph_dfs.c
    [class]{}-[func]{dfs}\n[class]{}-[func]{graphDFS}\n
    graph_dfs.cs
    [class]{graph_dfs}-[func]{dfs}\n[class]{graph_dfs}-[func]{graphDFS}\n
    graph_dfs.swift
    /* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS \u8f85\u52a9\u51fd\u6570 */\nfunc dfs(graph: GraphAdjList, visited: inout Set<Vertex>, res: inout [Vertex], vet: Vertex) {\nres.append(vet) // \u8bb0\u5f55\u8bbf\u95ee\u9876\u70b9\nvisited.insert(vet) // \u6807\u8bb0\u8be5\u9876\u70b9\u5df2\u88ab\u8bbf\u95ee\n// \u904d\u5386\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfor adjVet in graph.adjList[vet] ?? [] {\nif visited.contains(adjVet) {\ncontinue // \u8df3\u8fc7\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\n}\n// \u9012\u5f52\u8bbf\u95ee\u90bb\u63a5\u9876\u70b9\ndfs(graph: graph, visited: &visited, res: &res, vet: adjVet)\n}\n}\n/* \u6df1\u5ea6\u4f18\u5148\u904d\u5386 DFS */\n// \u4f7f\u7528\u90bb\u63a5\u8868\u6765\u8868\u793a\u56fe\uff0c\u4ee5\u4fbf\u83b7\u53d6\u6307\u5b9a\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\nfunc graphDFS(graph: GraphAdjList, startVet: Vertex) -> [Vertex] {\n// \u9876\u70b9\u904d\u5386\u5e8f\u5217\nvar res: [Vertex] = []\n// \u54c8\u5e0c\u8868\uff0c\u7528\u4e8e\u8bb0\u5f55\u5df2\u88ab\u8bbf\u95ee\u8fc7\u7684\u9876\u70b9\nvar visited: Set<Vertex> = []\ndfs(graph: graph, visited: &visited, res: &res, vet: startVet)\nreturn res\n}\n
    graph_dfs.zig
    [class]{}-[func]{dfs}\n[class]{}-[func]{graphDFS}\n

    \u6df1\u5ea6\u4f18\u5148\u904d\u5386\u7684\u7b97\u6cd5\u6d41\u7a0b\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5176\u4e2d

    • \u76f4\u865a\u7ebf\u4ee3\u8868\u5411\u4e0b\u9012\u63a8\uff0c\u4ee3\u8868\u5f00\u542f\u4e86\u4e00\u4e2a\u65b0\u7684\u9012\u5f52\u65b9\u6cd5\u6765\u8bbf\u95ee\u65b0\u9876\u70b9\uff1b
    • \u66f2\u865a\u7ebf\u4ee3\u8868\u5411\u4e0a\u56de\u6eaf\uff0c\u4ee3\u8868\u6b64\u9012\u5f52\u65b9\u6cd5\u5df2\u7ecf\u8fd4\u56de\uff0c\u56de\u6eaf\u5230\u4e86\u5f00\u542f\u6b64\u9012\u5f52\u65b9\u6cd5\u7684\u4f4d\u7f6e\uff1b

    \u4e3a\u4e86\u52a0\u6df1\u7406\u89e3\uff0c\u8bf7\u4f60\u5c06\u56fe\u793a\u4e0e\u4ee3\u7801\u7ed3\u5408\u8d77\u6765\uff0c\u5728\u8111\u4e2d\uff08\u6216\u8005\u7528\u7b14\u753b\u4e0b\u6765\uff09\u6a21\u62df\u6574\u4e2a DFS \u8fc7\u7a0b\uff0c\u5305\u62ec\u6bcf\u4e2a\u9012\u5f52\u65b9\u6cd5\u4f55\u65f6\u5f00\u542f\u3001\u4f55\u65f6\u8fd4\u56de\u3002

    <1><2><3><4><5><6><7><8><9><10><11>

    \u6df1\u5ea6\u4f18\u5148\u904d\u5386\u7684\u5e8f\u5217\u662f\u5426\u552f\u4e00\uff1f

    \u4e0e\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u7c7b\u4f3c\uff0c\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u5e8f\u5217\u7684\u987a\u5e8f\u4e5f\u4e0d\u662f\u552f\u4e00\u7684\u3002\u7ed9\u5b9a\u67d0\u9876\u70b9\uff0c\u5148\u5f80\u54ea\u4e2a\u65b9\u5411\u63a2\u7d22\u90fd\u884c\uff0c\u90fd\u662f\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u3002

    \u4ee5\u6811\u7684\u904d\u5386\u4e3a\u4f8b\uff0c\u201c\u6839 \\(\\rightarrow\\) \u5de6 \\(\\rightarrow\\) \u53f3\u201d\u3001\u201c\u5de6 \\(\\rightarrow\\) \u6839 \\(\\rightarrow\\) \u53f3\u201d\u3001\u201c\u5de6 \\(\\rightarrow\\) \u53f3 \\(\\rightarrow\\) \u6839\u201d\u5206\u522b\u5bf9\u5e94\u524d\u5e8f\u3001\u4e2d\u5e8f\u3001\u540e\u5e8f\u904d\u5386\uff0c\u4f53\u73b0\u4e09\u79cd\u4e0d\u540c\u7684\u904d\u5386\u4f18\u5148\u7ea7\uff0c\u800c\u4e09\u8005\u90fd\u5c5e\u4e8e\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u3002

    "},{"location":"chapter_graph/graph_traversal/#_4","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a \u6240\u6709\u9876\u70b9\u90fd\u88ab\u8bbf\u95ee\u4e00\u6b21\uff1b\u6240\u6709\u8fb9\u90fd\u88ab\u8bbf\u95ee\u4e86 \\(2\\) \u6b21\uff0c\u4f7f\u7528 \\(O(2|E|)\\) \u65f6\u95f4\uff1b\u603b\u4f53\u4f7f\u7528 \\(O(|V| + |E|)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a \u5217\u8868 res \uff0c\u54c8\u5e0c\u8868 visited \u9876\u70b9\u6570\u91cf\u6700\u591a\u4e3a \\(|V|\\) \uff0c\u9012\u5f52\u6df1\u5ea6\u6700\u5927\u4e3a \\(|V|\\) \uff0c\u56e0\u6b64\u4f7f\u7528 \\(O(|V|)\\) \u7a7a\u95f4\u3002

    "},{"location":"chapter_graph/summary/","title":"9.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u56fe\u7531\u9876\u70b9\u548c\u8fb9\u7ec4\u6210\uff0c\u53ef\u4ee5\u8868\u793a\u4e3a\u4e00\u7ec4\u9876\u70b9\u548c\u4e00\u7ec4\u8fb9\u6784\u6210\u7684\u96c6\u5408\u3002
    • \u76f8\u6bd4\u7ebf\u6027\u5173\u7cfb\uff08\u94fe\u8868\uff09\u548c\u5206\u6cbb\u5173\u7cfb\uff08\u6811\uff09\uff0c\u7f51\u7edc\u5173\u7cfb\uff08\u56fe\uff09\u7684\u81ea\u7531\u5ea6\u66f4\u9ad8\uff0c\u4e5f\u4ece\u800c\u66f4\u4e3a\u590d\u6742\u3002
    • \u6709\u5411\u56fe\u7684\u8fb9\u5b58\u5728\u65b9\u5411\uff0c\u8fde\u901a\u56fe\u4e2d\u7684\u4efb\u610f\u9876\u70b9\u90fd\u53ef\u8fbe\uff0c\u6709\u6743\u56fe\u7684\u6bcf\u6761\u8fb9\u90fd\u5305\u542b\u6743\u91cd\u53d8\u91cf\u3002
    • \u90bb\u63a5\u77e9\u9635\u4f7f\u7528\u65b9\u9635\u6765\u8868\u793a\u56fe\uff0c\u6bcf\u4e00\u884c\uff08\u5217\uff09\u4ee3\u8868\u4e00\u4e2a\u9876\u70b9\uff0c\u77e9\u9635\u5143\u7d20\u4ee3\u8868\u8fb9\uff0c\u4f7f\u7528 \\(1\\) \u6216 \\(0\\) \u6765\u8868\u793a\u4e24\u4e2a\u9876\u70b9\u4e4b\u95f4\u6709\u8fb9\u6216\u65e0\u8fb9\u3002\u90bb\u63a5\u77e9\u9635\u7684\u589e\u5220\u67e5\u64cd\u4f5c\u6548\u7387\u5f88\u9ad8\uff0c\u4f46\u5360\u7528\u7a7a\u95f4\u5927\u3002
    • \u90bb\u63a5\u8868\u4f7f\u7528\u591a\u4e2a\u94fe\u8868\u6765\u8868\u793a\u56fe\uff0c\u7b2c \\(i\\) \u6761\u94fe\u8868\u5bf9\u5e94\u9876\u70b9 \\(i\\) \uff0c\u5176\u4e2d\u5b58\u50a8\u4e86\u8be5\u9876\u70b9\u7684\u6240\u6709\u90bb\u63a5\u9876\u70b9\u3002\u90bb\u63a5\u8868\u76f8\u5bf9\u90bb\u63a5\u77e9\u9635\u66f4\u52a0\u8282\u7701\u7a7a\u95f4\uff0c\u4f46\u7531\u4e8e\u9700\u8981\u901a\u8fc7\u904d\u5386\u94fe\u8868\u6765\u67e5\u627e\u8fb9\uff0c\u56e0\u6b64\u65f6\u95f4\u6548\u7387\u8f83\u4f4e\u3002
    • \u5f53\u90bb\u63a5\u8868\u4e2d\u7684\u94fe\u8868\u8fc7\u957f\u65f6\uff0c\u53ef\u4ee5\u5c06\u5176\u8f6c\u5316\u4e3a\u7ea2\u9ed1\u6811\u6216\u54c8\u5e0c\u8868\uff0c\u4ece\u800c\u63d0\u5347\u67e5\u8be2\u6548\u7387\u3002
    • \u4ece\u7b97\u6cd5\u601d\u60f3\u89d2\u5ea6\u5206\u6790\uff0c\u90bb\u63a5\u77e9\u9635\u4f53\u73b0\u201c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u201d\uff0c\u90bb\u63a5\u8868\u4f53\u73b0\u201c\u4ee5\u65f6\u95f4\u6362\u7a7a\u95f4\u201d
    • \u56fe\u53ef\u4ee5\u7528\u4e8e\u5efa\u6a21\u5404\u7c7b\u73b0\u5b9e\u7cfb\u7edf\uff0c\u4f8b\u5982\u793e\u4ea4\u7f51\u7edc\u3001\u5730\u94c1\u7ebf\u8def\u7b49\u3002
    • \u6811\u662f\u56fe\u7684\u4e00\u79cd\u7279\u4f8b\uff0c\u6811\u7684\u904d\u5386\u4e5f\u662f\u56fe\u7684\u904d\u5386\u7684\u4e00\u79cd\u7279\u4f8b\u3002
    • \u56fe\u7684\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u662f\u4e00\u79cd\u7531\u8fd1\u53ca\u8fdc\u3001\u5c42\u5c42\u6269\u5f20\u7684\u641c\u7d22\u65b9\u5f0f\uff0c\u5e38\u501f\u52a9\u961f\u5217\u5b9e\u73b0\u3002
    • \u56fe\u7684\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u662f\u4e00\u79cd\u4f18\u5148\u8d70\u5230\u5e95\u3001\u65e0\u8def\u53ef\u8d70\u518d\u56de\u5934\u7684\u641c\u7d22\u65b9\u5f0f\uff0c\u5e38\u57fa\u4e8e\u9012\u5f52\u6765\u5b9e\u73b0\u3002
    "},{"location":"chapter_hashing/hash_collision/","title":"6.2. \u00a0 \u54c8\u5e0c\u51b2\u7a81","text":"

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u54c8\u5e0c\u51fd\u6570\u5e94\u8be5\u4e3a\u6bcf\u4e2a\u8f93\u5165\u4ea7\u751f\u552f\u4e00\u7684\u8f93\u51fa\uff0c\u4f7f\u5f97 key \u548c value \u4e00\u4e00\u5bf9\u5e94\u3002\u800c\u5b9e\u9645\u4e0a\uff0c\u5f80\u5f80\u5b58\u5728\u5411\u54c8\u5e0c\u51fd\u6570\u8f93\u5165\u4e0d\u540c\u7684 key \u800c\u4ea7\u751f\u76f8\u540c\u8f93\u51fa\u7684\u60c5\u51b5\uff0c\u8fd9\u79cd\u60c5\u51b5\u88ab\u79f0\u4e3a\u300c\u54c8\u5e0c\u51b2\u7a81 Hash Collision\u300d\u3002\u54c8\u5e0c\u51b2\u7a81\u4f1a\u5bfc\u81f4\u67e5\u8be2\u7ed3\u679c\u9519\u8bef\uff0c\u4ece\u800c\u4e25\u91cd\u5f71\u54cd\u54c8\u5e0c\u8868\u7684\u53ef\u7528\u6027\u3002

    \u90a3\u4e48\uff0c\u4e3a\u4ec0\u4e48\u4f1a\u51fa\u73b0\u54c8\u5e0c\u51b2\u7a81\u5462\uff1f\u672c\u8d28\u4e0a\u770b\uff0c\u7531\u4e8e\u54c8\u5e0c\u51fd\u6570\u7684\u8f93\u5165\u7a7a\u95f4\u5f80\u5f80\u8fdc\u5927\u4e8e\u8f93\u51fa\u7a7a\u95f4\uff0c\u56e0\u6b64\u4e0d\u53ef\u907f\u514d\u5730\u4f1a\u51fa\u73b0\u591a\u4e2a\u8f93\u5165\u4ea7\u751f\u76f8\u540c\u8f93\u51fa\u7684\u60c5\u51b5\uff0c\u5373\u4e3a\u54c8\u5e0c\u51b2\u7a81\u3002\u6bd4\u5982\uff0c\u8f93\u5165\u7a7a\u95f4\u662f\u5168\u4f53\u6574\u6570\uff0c\u8f93\u51fa\u7a7a\u95f4\u662f\u4e00\u4e2a\u56fa\u5b9a\u5927\u5c0f\u7684\u6876\uff08\u6570\u7ec4\uff09\u7684\u7d22\u5f15\u8303\u56f4\uff0c\u90a3\u4e48\u5fc5\u5b9a\u4f1a\u6709\u591a\u4e2a\u6574\u6570\u540c\u65f6\u6620\u5c04\u5230\u4e00\u4e2a\u6876\u7d22\u5f15\u3002

    \u4e3a\u4e86\u7f13\u89e3\u54c8\u5e0c\u51b2\u7a81\uff0c\u4e00\u65b9\u9762\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u54c8\u5e0c\u8868\u6269\u5bb9\u6765\u51cf\u5c0f\u51b2\u7a81\u6982\u7387\u3002\u6781\u7aef\u60c5\u51b5\u4e0b\uff0c\u5f53\u8f93\u5165\u7a7a\u95f4\u548c\u8f93\u51fa\u7a7a\u95f4\u5927\u5c0f\u76f8\u7b49\u65f6\uff0c\u54c8\u5e0c\u8868\u5c31\u7b49\u4ef7\u4e8e\u6570\u7ec4\u4e86\uff0c\u53ef\u8c13\u201c\u5927\u529b\u51fa\u5947\u8ff9\u201d\u3002

    \u53e6\u4e00\u65b9\u9762\uff0c\u8003\u8651\u901a\u8fc7\u4f18\u5316\u54c8\u5e0c\u8868\u7684\u8868\u793a\u65b9\u5f0f\u4ee5\u7f13\u89e3\u54c8\u5e0c\u51b2\u7a81\uff0c\u5e38\u89c1\u7684\u65b9\u6cd5\u6709\u300c\u94fe\u5f0f\u5730\u5740\u300d\u548c\u300c\u5f00\u653e\u5bfb\u5740\u300d\u3002

    "},{"location":"chapter_hashing/hash_collision/#621","title":"6.2.1. \u00a0 \u54c8\u5e0c\u8868\u6269\u5bb9","text":"

    \u300c\u8d1f\u8f7d\u56e0\u5b50 Load Factor\u300d\u5b9a\u4e49\u4e3a \u54c8\u5e0c\u8868\u4e2d\u5143\u7d20\u6570\u91cf\u9664\u4ee5\u6876\u69fd\u6570\u91cf\uff08\u5373\u6570\u7ec4\u5927\u5c0f\uff09\uff0c\u4ee3\u8868\u54c8\u5e0c\u51b2\u7a81\u7684\u4e25\u91cd\u7a0b\u5ea6\u3002

    \u8d1f\u8f7d\u56e0\u5b50\u5e38\u7528\u4f5c\u54c8\u5e0c\u8868\u6269\u5bb9\u7684\u89e6\u53d1\u6761\u4ef6\u3002\u6bd4\u5982\u5728 Java \u4e2d\uff0c\u5f53\u8d1f\u8f7d\u56e0\u5b50 \\(> 0.75\\) \u65f6\u5219\u89e6\u53d1\u6269\u5bb9\uff0c\u5c06 HashMap \u5927\u5c0f\u6269\u5145\u81f3\u539f\u5148\u7684 \\(2\\) \u500d\u3002

    \u4e0e\u6570\u7ec4\u6269\u5bb9\u7c7b\u4f3c\uff0c\u54c8\u5e0c\u8868\u6269\u5bb9\u64cd\u4f5c\u7684\u5f00\u9500\u5f88\u5927\uff0c\u56e0\u4e3a\u9700\u8981\u5c06\u6240\u6709\u952e\u503c\u5bf9\u4ece\u539f\u54c8\u5e0c\u8868\u4f9d\u6b21\u79fb\u52a8\u81f3\u65b0\u54c8\u5e0c\u8868\u3002

    "},{"location":"chapter_hashing/hash_collision/#622","title":"6.2.2. \u00a0 \u94fe\u5f0f\u5730\u5740","text":"

    \u5728\u539f\u59cb\u54c8\u5e0c\u8868\u4e2d\uff0c\u6876\u5185\u7684\u6bcf\u4e2a\u5730\u5740\u53ea\u80fd\u5b58\u50a8\u4e00\u4e2a\u5143\u7d20\uff08\u5373\u952e\u503c\u5bf9\uff09\u3002\u8003\u8651\u5c06\u5355\u4e2a\u5143\u7d20\u8f6c\u5316\u6210\u4e00\u4e2a\u94fe\u8868\uff0c\u5c06\u6240\u6709\u51b2\u7a81\u5143\u7d20\u90fd\u5b58\u50a8\u5728\u4e00\u4e2a\u94fe\u8868\u4e2d\u3002

    Fig. \u94fe\u5f0f\u5730\u5740

    \u94fe\u5f0f\u5730\u5740\u4e0b\uff0c\u54c8\u5e0c\u8868\u64cd\u4f5c\u65b9\u6cd5\u4e3a\uff1a

    • \u67e5\u8be2\u5143\u7d20\uff1a\u5148\u5c06 key \u8f93\u5165\u5230\u54c8\u5e0c\u51fd\u6570\u5f97\u5230\u6876\u5185\u7d22\u5f15\uff0c\u5373\u53ef\u8bbf\u95ee\u94fe\u8868\u5934\u7ed3\u70b9\uff0c\u518d\u901a\u8fc7\u904d\u5386\u94fe\u8868\u67e5\u627e\u5bf9\u5e94 value \u3002
    • \u6dfb\u52a0\u5143\u7d20\uff1a\u5148\u901a\u8fc7\u54c8\u5e0c\u51fd\u6570\u8bbf\u95ee\u94fe\u8868\u5934\u90e8\uff0c\u518d\u5c06\u7ed3\u70b9\uff08\u5373\u952e\u503c\u5bf9\uff09\u6dfb\u52a0\u5230\u94fe\u8868\u5934\u90e8\u5373\u53ef\u3002
    • \u5220\u9664\u5143\u7d20\uff1a\u540c\u6837\u5148\u6839\u636e\u54c8\u5e0c\u51fd\u6570\u7ed3\u679c\u8bbf\u95ee\u94fe\u8868\u5934\u90e8\uff0c\u518d\u904d\u5386\u94fe\u8868\u67e5\u627e\u5bf9\u5e94\u7ed3\u70b9\uff0c\u5220\u9664\u4e4b\u5373\u53ef\u3002

    \u94fe\u5f0f\u5730\u5740\u867d\u7136\u89e3\u51b3\u4e86\u54c8\u5e0c\u51b2\u7a81\u95ee\u9898\uff0c\u4f46\u4ecd\u5b58\u5728\u5c40\u9650\u6027\uff0c\u5305\u62ec\uff1a

    • \u5360\u7528\u7a7a\u95f4\u53d8\u5927\uff0c\u56e0\u4e3a\u94fe\u8868\u6216\u4e8c\u53c9\u6811\u5305\u542b\u7ed3\u70b9\u6307\u9488\uff0c\u76f8\u6bd4\u4e8e\u6570\u7ec4\u66f4\u52a0\u8017\u8d39\u5185\u5b58\u7a7a\u95f4\uff1b
    • \u67e5\u8be2\u6548\u7387\u964d\u4f4e\uff0c\u56e0\u4e3a\u9700\u8981\u7ebf\u6027\u904d\u5386\u94fe\u8868\u6765\u67e5\u627e\u5bf9\u5e94\u5143\u7d20\uff1b

    \u4e3a\u4e86\u63d0\u5347\u64cd\u4f5c\u6548\u7387\uff0c\u53ef\u4ee5\u628a\u300c\u94fe\u8868\u300d\u8f6c\u5316\u4e3a\u300cAVL \u6811\u300d\u6216\u300c\u7ea2\u9ed1\u6811\u300d\uff0c\u5c06\u67e5\u8be2\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4f18\u5316\u81f3 \\(O(\\log n)\\) \u3002

    "},{"location":"chapter_hashing/hash_collision/#623","title":"6.2.3. \u00a0 \u5f00\u653e\u5bfb\u5740","text":"

    \u300c\u5f00\u653e\u5bfb\u5740\u300d\u4e0d\u5f15\u5165\u989d\u5916\u6570\u636e\u7ed3\u6784\uff0c\u800c\u662f\u901a\u8fc7\u201c\u591a\u6b21\u63a2\u6d4b\u201d\u6765\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002\u6839\u636e\u63a2\u6d4b\u65b9\u6cd5\u7684\u4e0d\u540c\uff0c\u4e3b\u8981\u5206\u4e3a \u7ebf\u6027\u63a2\u6d4b\u3001\u5e73\u65b9\u63a2\u6d4b\u3001\u591a\u6b21\u54c8\u5e0c\u3002

    "},{"location":"chapter_hashing/hash_collision/#_1","title":"\u7ebf\u6027\u63a2\u6d4b","text":"

    \u300c\u7ebf\u6027\u63a2\u6d4b\u300d\u4f7f\u7528\u56fa\u5b9a\u6b65\u957f\u7684\u7ebf\u6027\u67e5\u627e\u6765\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002

    \u63d2\u5165\u5143\u7d20\uff1a\u5982\u679c\u51fa\u73b0\u54c8\u5e0c\u51b2\u7a81\uff0c\u5219\u4ece\u51b2\u7a81\u4f4d\u7f6e\u5411\u540e\u7ebf\u6027\u904d\u5386\uff08\u6b65\u957f\u4e00\u822c\u53d6 1 \uff09\uff0c\u76f4\u5230\u627e\u5230\u4e00\u4e2a\u7a7a\u4f4d\uff0c\u5219\u5c06\u5143\u7d20\u63d2\u5165\u5230\u8be5\u7a7a\u4f4d\u4e2d\u3002

    \u67e5\u627e\u5143\u7d20\uff1a\u82e5\u51fa\u73b0\u54c8\u5e0c\u51b2\u7a81\uff0c\u5219\u4f7f\u7528\u76f8\u540c\u6b65\u957f\u6267\u884c\u7ebf\u6027\u67e5\u627e\uff0c\u4f1a\u9047\u5230\u4e24\u79cd\u60c5\u51b5\uff1a

    1. \u627e\u5230\u5bf9\u5e94\u5143\u7d20\uff0c\u8fd4\u56de value \u5373\u53ef\uff1b
    2. \u82e5\u9047\u5230\u7a7a\u4f4d\uff0c\u5219\u8bf4\u660e\u67e5\u627e\u952e\u503c\u5bf9\u4e0d\u5728\u54c8\u5e0c\u8868\u4e2d\uff1b

    Fig. \u7ebf\u6027\u63a2\u6d4b

    \u7ebf\u6027\u63a2\u6d4b\u5b58\u5728\u4ee5\u4e0b\u7f3a\u9677\uff1a

    • \u4e0d\u80fd\u76f4\u63a5\u5220\u9664\u5143\u7d20\u3002\u5220\u9664\u5143\u7d20\u4f1a\u5bfc\u81f4\u6876\u5185\u51fa\u73b0\u4e00\u4e2a\u7a7a\u4f4d\uff0c\u5728\u67e5\u627e\u5176\u4ed6\u5143\u7d20\u65f6\uff0c\u8be5\u7a7a\u4f4d\u6709\u53ef\u80fd\u5bfc\u81f4\u7a0b\u5e8f\u8ba4\u4e3a\u5143\u7d20\u4e0d\u5b58\u5728\uff08\u5373\u4e0a\u8ff0\u7b2c 2. \u79cd\u60c5\u51b5\uff09\u3002\u56e0\u6b64\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u6807\u5fd7\u4f4d\u6765\u6807\u8bb0\u5220\u9664\u5143\u7d20\u3002
    • \u5bb9\u6613\u4ea7\u751f\u805a\u96c6\u3002\u6876\u5185\u88ab\u5360\u7528\u7684\u8fde\u7eed\u4f4d\u7f6e\u8d8a\u957f\uff0c\u8fd9\u4e9b\u8fde\u7eed\u4f4d\u7f6e\u53d1\u751f\u54c8\u5e0c\u51b2\u7a81\u7684\u53ef\u80fd\u6027\u8d8a\u5927\uff0c\u4ece\u800c\u8fdb\u4e00\u6b65\u4fc3\u8fdb\u8fd9\u4e00\u4f4d\u7f6e\u7684\u201c\u805a\u5806\u751f\u957f\u201d\uff0c\u6700\u7ec8\u5bfc\u81f4\u589e\u5220\u67e5\u6539\u64cd\u4f5c\u6548\u7387\u7684\u52a3\u5316\u3002
    "},{"location":"chapter_hashing/hash_collision/#_2","title":"\u591a\u6b21\u54c8\u5e0c","text":"

    \u987e\u540d\u601d\u4e49\uff0c\u300c\u591a\u6b21\u54c8\u5e0c\u300d\u7684\u601d\u8def\u662f\u4f7f\u7528\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570 \\(f_1(x)\\) , \\(f_2(x)\\) , \\(f_3(x)\\) , \\(\\cdots\\) \u8fdb\u884c\u63a2\u6d4b\u3002

    \u63d2\u5165\u5143\u7d20\uff1a\u82e5\u54c8\u5e0c\u51fd\u6570 \\(f_1(x)\\) \u51fa\u73b0\u51b2\u7a81\uff0c\u5219\u5c1d\u8bd5 \\(f_2(x)\\) \uff0c\u4ee5\u6b64\u7c7b\u63a8\u2026\u2026\u76f4\u5230\u627e\u5230\u7a7a\u4f4d\u540e\u63d2\u5165\u5143\u7d20\u3002

    \u67e5\u627e\u5143\u7d20\uff1a\u4ee5\u76f8\u540c\u7684\u54c8\u5e0c\u51fd\u6570\u987a\u5e8f\u67e5\u627e\uff0c\u5b58\u5728\u4e24\u79cd\u60c5\u51b5\uff1a

    1. \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u5219\u8fd4\u56de\u4e4b\uff1b
    2. \u5230\u7a7a\u4f4d\u6216\u5df2\u5c1d\u8bd5\u6240\u6709\u54c8\u5e0c\u51fd\u6570\uff0c\u8bf4\u660e\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64\u5143\u7d20\uff1b

    \u76f8\u6bd4\u4e8e\u300c\u7ebf\u6027\u63a2\u6d4b\u300d\uff0c\u300c\u591a\u6b21\u54c8\u5e0c\u300d\u65b9\u6cd5\u66f4\u4e0d\u5bb9\u6613\u4ea7\u751f\u805a\u96c6\uff0c\u4ee3\u4ef7\u662f\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570\u589e\u52a0\u4e86\u989d\u5916\u8ba1\u7b97\u91cf\u3002

    \u5de5\u4e1a\u754c\u65b9\u6848

    Java \u91c7\u7528\u300c\u94fe\u5f0f\u5730\u5740\u300d\u3002\u5728 JDK 1.8 \u4e4b\u540e\uff0cHashMap \u5185\u6570\u7ec4\u957f\u5ea6\u5927\u4e8e 64 \u65f6\uff0c\u957f\u5ea6\u5927\u4e8e 8 \u7684\u94fe\u8868\u4f1a\u88ab\u8f6c\u5316\u4e3a\u300c\u7ea2\u9ed1\u6811\u300d\uff0c\u4ee5\u63d0\u5347\u67e5\u627e\u6027\u80fd\u3002

    Python \u91c7\u7528\u300c\u5f00\u653e\u5bfb\u5740\u300d\u3002\u5b57\u5178 dict \u4f7f\u7528\u4f2a\u968f\u673a\u6570\u8fdb\u884c\u63a2\u6d4b\u3002

    "},{"location":"chapter_hashing/hash_map/","title":"6.1. \u00a0 \u54c8\u5e0c\u8868","text":"

    \u54c8\u5e0c\u8868\u901a\u8fc7\u5efa\u7acb\u300c\u952e key\u300d\u548c\u300c\u503c value\u300d\u4e4b\u95f4\u7684\u6620\u5c04\uff0c\u5b9e\u73b0\u9ad8\u6548\u7684\u5143\u7d20\u67e5\u627e\u3002\u5177\u4f53\u5730\uff0c\u8f93\u5165\u4e00\u4e2a key \uff0c\u5728\u54c8\u5e0c\u8868\u4e2d\u67e5\u8be2\u5e76\u83b7\u53d6 value \uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \u3002

    \u4f8b\u5982\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u5305\u542b \\(n\\) \u4e2a\u5b66\u751f\u7684\u6570\u636e\u5e93\uff0c\u6bcf\u4e2a\u5b66\u751f\u6709\u201c\u59d3\u540d name \u201d\u548c\u201c\u5b66\u53f7 id \u201d\u4e24\u9879\u6570\u636e\uff0c\u5e0c\u671b\u5b9e\u73b0\u4e00\u4e2a\u67e5\u8be2\u529f\u80fd\uff1a\u8f93\u5165\u4e00\u4e2a\u5b66\u53f7\uff0c\u8fd4\u56de\u5bf9\u5e94\u7684\u59d3\u540d\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u54c8\u5e0c\u8868\u5b9e\u73b0\u3002

    Fig. \u54c8\u5e0c\u8868\u7684\u62bd\u8c61\u8868\u793a

    "},{"location":"chapter_hashing/hash_map/#611","title":"6.1.1. \u00a0 \u54c8\u5e0c\u8868\u6548\u7387","text":"

    \u9664\u4e86\u54c8\u5e0c\u8868\u4e4b\u5916\uff0c\u8fd8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u6570\u636e\u7ed3\u6784\u6765\u5b9e\u73b0\u4e0a\u8ff0\u67e5\u8be2\u529f\u80fd\uff1a

    1. \u65e0\u5e8f\u6570\u7ec4\uff1a\u6bcf\u4e2a\u5143\u7d20\u4e3a [\u5b66\u53f7, \u59d3\u540d] \uff1b
    2. \u6709\u5e8f\u6570\u7ec4\uff1a\u5c06 1. \u4e2d\u7684\u6570\u7ec4\u6309\u7167\u5b66\u53f7\u4ece\u5c0f\u5230\u5927\u6392\u5e8f\uff1b
    3. \u94fe\u8868\uff1a\u6bcf\u4e2a\u7ed3\u70b9\u7684\u503c\u4e3a [\u5b66\u53f7, \u59d3\u540d] \uff1b
    4. \u4e8c\u53c9\u641c\u7d22\u6811\uff1a\u6bcf\u4e2a\u7ed3\u70b9\u7684\u503c\u4e3a [\u5b66\u53f7, \u59d3\u540d] \uff0c\u6839\u636e\u5b66\u53f7\u5927\u5c0f\u6765\u6784\u5efa\u6811\uff1b

    \u4f7f\u7528\u4e0a\u8ff0\u65b9\u6cd5\uff0c\u5404\u9879\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5982\u4e0b\u8868\u6240\u793a\uff08\u5728\u6b64\u4e0d\u505a\u8d58\u8ff0\uff0c\u8be6\u89e3\u53ef\u89c1 \u4e8c\u53c9\u641c\u7d22\u6811\u7ae0\u8282\uff09\u3002\u65e0\u8bba\u662f\u67e5\u627e\u5143\u7d20\u3001\u8fd8\u662f\u589e\u5220\u5143\u7d20\uff0c\u54c8\u5e0c\u8868\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u662f \\(O(1)\\) \uff0c\u5168\u9762\u80dc\u51fa\uff01

    \u65e0\u5e8f\u6570\u7ec4 \u6709\u5e8f\u6570\u7ec4 \u94fe\u8868 \u4e8c\u53c9\u641c\u7d22\u6811 \u54c8\u5e0c\u8868 \u67e5\u627e\u5143\u7d20 \\(O(n)\\) \\(O(\\log n)\\) \\(O(n)\\) \\(O(\\log n)\\) \\(O(1)\\) \u63d2\u5165\u5143\u7d20 \\(O(1)\\) \\(O(n)\\) \\(O(1)\\) \\(O(\\log n)\\) \\(O(1)\\) \u5220\u9664\u5143\u7d20 \\(O(n)\\) \\(O(n)\\) \\(O(n)\\) \\(O(\\log n)\\) \\(O(1)\\)"},{"location":"chapter_hashing/hash_map/#612","title":"6.1.2. \u00a0 \u54c8\u5e0c\u8868\u5e38\u7528\u64cd\u4f5c","text":"

    \u54c8\u5e0c\u8868\u7684\u57fa\u672c\u64cd\u4f5c\u5305\u62ec \u521d\u59cb\u5316\u3001\u67e5\u8be2\u64cd\u4f5c\u3001\u6dfb\u52a0\u4e0e\u5220\u9664\u952e\u503c\u5bf9\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hash_map.java
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nMap<Integer, String> map = new HashMap<>();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.put(12836, \"\u5c0f\u54c8\");   map.put(15937, \"\u5c0f\u5570\");   map.put(16750, \"\u5c0f\u7b97\");   map.put(13276, \"\u5c0f\u6cd5\");\nmap.put(10583, \"\u5c0f\u9e2d\");\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nString name = map.get(15937);\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.remove(10583);\n
    hash_map.cpp
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nunordered_map<int, string> map;\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap[12836] = \"\u5c0f\u54c8\";\nmap[15937] = \"\u5c0f\u5570\";\nmap[16750] = \"\u5c0f\u7b97\";\nmap[13276] = \"\u5c0f\u6cd5\";\nmap[10583] = \"\u5c0f\u9e2d\";\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nstring name = map[15937];\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.erase(10583);\n
    hash_map.py
    \"\"\" \u521d\u59cb\u5316\u54c8\u5e0c\u8868 \"\"\"\nmapp: Dict = {}\n\"\"\" \u6dfb\u52a0\u64cd\u4f5c \"\"\"\n# \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmapp[12836] = \"\u5c0f\u54c8\"\nmapp[15937] = \"\u5c0f\u5570\"\nmapp[16750] = \"\u5c0f\u7b97\"\nmapp[13276] = \"\u5c0f\u6cd5\"\nmapp[10583] = \"\u5c0f\u9e2d\"\n\"\"\" \u67e5\u8be2\u64cd\u4f5c \"\"\"\n# \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nname: str = mapp[15937]\n\"\"\" \u5220\u9664\u64cd\u4f5c \"\"\"\n# \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmapp.pop(10583)\n
    hash_map.go
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nmapp := make(map[int]string)\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmapp[12836] = \"\u5c0f\u54c8\"\nmapp[15937] = \"\u5c0f\u5570\"\nmapp[16750] = \"\u5c0f\u7b97\"\nmapp[13276] = \"\u5c0f\u6cd5\"\nmapp[10583] = \"\u5c0f\u9e2d\"\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nname := mapp[15937]\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\ndelete(mapp, 10583)\n
    hash_map.js
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nconst map = new ArrayHashMap();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.set(12836, '\u5c0f\u54c8');\nmap.set(15937, '\u5c0f\u5570');\nmap.set(16750, '\u5c0f\u7b97');\nmap.set(13276, '\u5c0f\u6cd5');\nmap.set(10583, '\u5c0f\u9e2d');\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nlet name = map.get(15937);\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.delete(10583);\n
    hash_map.ts
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nconst map = new Map<number, string>();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.set(12836, '\u5c0f\u54c8');\nmap.set(15937, '\u5c0f\u5570');\nmap.set(16750, '\u5c0f\u7b97');\nmap.set(13276, '\u5c0f\u6cd5');\nmap.set(10583, '\u5c0f\u9e2d');\nconsole.info('\\n\u6dfb\u52a0\u5b8c\u6210\u540e\uff0c\u54c8\u5e0c\u8868\u4e3a\\nKey -> Value');\nconsole.info(map);\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nlet name = map.get(15937);\nconsole.info('\\n\u8f93\u5165\u5b66\u53f7 15937 \uff0c\u67e5\u8be2\u5230\u59d3\u540d ' + name);\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.delete(10583);\nconsole.info('\\n\u5220\u9664 10583 \u540e\uff0c\u54c8\u5e0c\u8868\u4e3a\\nKey -> Value');\nconsole.info(map);\n
    hash_map.c
    \n
    hash_map.cs
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nDictionary<int, String> map = new ();\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap.Add(12836, \"\u5c0f\u54c8\");\nmap.Add(15937, \"\u5c0f\u5570\");\nmap.Add(16750, \"\u5c0f\u7b97\");\nmap.Add(13276, \"\u5c0f\u6cd5\");\nmap.Add(10583, \"\u5c0f\u9e2d\");\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nString name = map[15937];\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.Remove(10583);\n
    hash_map.swift
    /* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nvar map: [Int: String] = [:]\n/* \u6dfb\u52a0\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u6dfb\u52a0\u952e\u503c\u5bf9 (key, value)\nmap[12836] = \"\u5c0f\u54c8\"\nmap[15937] = \"\u5c0f\u5570\"\nmap[16750] = \"\u5c0f\u7b97\"\nmap[13276] = \"\u5c0f\u6cd5\"\nmap[10583] = \"\u5c0f\u9e2d\"\n/* \u67e5\u8be2\u64cd\u4f5c */\n// \u5411\u54c8\u5e0c\u8868\u8f93\u5165\u952e key \uff0c\u5f97\u5230\u503c value\nlet name = map[15937]!\n/* \u5220\u9664\u64cd\u4f5c */\n// \u5728\u54c8\u5e0c\u8868\u4e2d\u5220\u9664\u952e\u503c\u5bf9 (key, value)\nmap.removeValue(forKey: 10583)\n
    hash_map.zig
    \n

    \u904d\u5386\u54c8\u5e0c\u8868\u6709\u4e09\u79cd\u65b9\u5f0f\uff0c\u5373 \u904d\u5386\u952e\u503c\u5bf9\u3001\u904d\u5386\u952e\u3001\u904d\u5386\u503c\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hash_map.java
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor (Map.Entry <Integer, String> kv: map.entrySet()) {\nSystem.out.println(kv.getKey() + \" -> \" + kv.getValue());\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nfor (int key: map.keySet()) {\nSystem.out.println(key);\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nfor (String val: map.values()) {\nSystem.out.println(val);\n}\n
    hash_map.cpp
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor (auto kv: map) {\ncout << kv.first << \" -> \" << kv.second << endl;\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nfor (auto key: map) {\ncout << key.first << endl;\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nfor (auto val: map) {\ncout << val.second << endl;\n}\n
    hash_map.py
    \"\"\" \u904d\u5386\u54c8\u5e0c\u8868 \"\"\"\n# \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor key, value in mapp.items():\nprint(key, \"->\", value)\n# \u5355\u72ec\u904d\u5386\u952e key\nfor key in mapp.keys():\nprint(key)\n# \u5355\u72ec\u904d\u5386\u503c value\nfor value in mapp.values():\nprint(value)\n
    hash_map_test.go
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 key->value\nfor key, value := range mapp {\nfmt.Println(key, \"->\", value)\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nfor key := range mapp {\nfmt.Println(key)\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nfor _, value := range mapp {\nfmt.Println(value)\n}\n
    hash_map.js
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\nconsole.info('\\n\u904d\u5386\u952e\u503c\u5bf9 Key->Value');\nfor (const [k, v] of map.entries()) {\nconsole.info(k + ' -> ' + v);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u952e Key');\nfor (const k of map.keys()) {\nconsole.info(k);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u503c Value');\nfor (const v of map.values()) {\nconsole.info(v);\n}\n
    hash_map.ts
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\nconsole.info('\\n\u904d\u5386\u952e\u503c\u5bf9 Key->Value');\nfor (const [k, v] of map.entries()) {\nconsole.info(k + ' -> ' + v);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u952e Key');\nfor (const k of map.keys()) {\nconsole.info(k);\n}\nconsole.info('\\n\u5355\u72ec\u904d\u5386\u503c Value');\nfor (const v of map.values()) {\nconsole.info(v);\n}\n
    hash_map.c
    \n
    hash_map.cs
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 Key->Value\nforeach (var kv in map)\n{\nConsole.WriteLine(kv.Key + \" -> \" + kv.Value);\n}\n// \u5355\u72ec\u904d\u5386\u952e key\nforeach (int key in map.Keys)\n{\nConsole.WriteLine(key);\n}\n// \u5355\u72ec\u904d\u5386\u503c value\nforeach (String val in map.Values)\n{\nConsole.WriteLine(val);\n}\n
    hash_map.swift
    /* \u904d\u5386\u54c8\u5e0c\u8868 */\n// \u904d\u5386\u952e\u503c\u5bf9 Key->Value\nfor (key, value) in map {\nprint(\"\\(key) -> \\(value)\")\n}\n// \u5355\u72ec\u904d\u5386\u952e Key\nfor key in map.keys {\nprint(key)\n}\n// \u5355\u72ec\u904d\u5386\u503c Value\nfor value in map.values {\nprint(value)\n}\n
    hash_map.zig
    \n
    "},{"location":"chapter_hashing/hash_map/#613","title":"6.1.3. \u00a0 \u54c8\u5e0c\u51fd\u6570","text":"

    \u54c8\u5e0c\u8868\u4e2d\u5b58\u50a8\u5143\u7d20\u7684\u6570\u636e\u7ed3\u6784\u88ab\u79f0\u4e3a\u300c\u6876 Bucket\u300d\uff0c\u5e95\u5c42\u5b9e\u73b0\u53ef\u80fd\u662f\u6570\u7ec4\u3001\u94fe\u8868\u3001\u4e8c\u53c9\u6811\uff08\u7ea2\u9ed1\u6811\uff09\uff0c\u6216\u662f\u5b83\u4eec\u7684\u7ec4\u5408\u3002

    \u6700\u7b80\u5355\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u4ec5\u7528\u4e00\u4e2a\u300c\u6570\u7ec4\u300d\u6765\u5b9e\u73b0\u54c8\u5e0c\u8868\u3002\u9996\u5148\uff0c\u5c06\u6240\u6709 value \u653e\u5165\u6570\u7ec4\u4e2d\uff0c\u90a3\u4e48\u6bcf\u4e2a value \u5728\u6570\u7ec4\u4e2d\u90fd\u6709\u552f\u4e00\u7684\u300c\u7d22\u5f15\u300d\u3002\u663e\u7136\uff0c\u8bbf\u95ee value \u9700\u8981\u7ed9\u5b9a\u7d22\u5f15\uff0c\u800c\u4e3a\u4e86 \u5efa\u7acb key \u548c\u7d22\u5f15\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u6211\u4eec\u9700\u8981\u4f7f\u7528\u300c\u54c8\u5e0c\u51fd\u6570 Hash Function\u300d\u3002

    \u8bbe\u6570\u7ec4\u4e3a bucket \uff0c\u54c8\u5e0c\u51fd\u6570\u4e3a f(x) \uff0c\u8f93\u5165\u952e\u4e3a key \u3002\u90a3\u4e48\u83b7\u53d6 value \u7684\u6b65\u9aa4\u4e3a\uff1a

    1. \u901a\u8fc7\u54c8\u5e0c\u51fd\u6570\u8ba1\u7b97\u51fa\u7d22\u5f15\uff0c\u5373 index = f(key) \uff1b
    2. \u901a\u8fc7\u7d22\u5f15\u5728\u6570\u7ec4\u4e2d\u83b7\u53d6\u503c\uff0c\u5373 value = bucket[index] \uff1b

    \u4ee5\u4e0a\u8ff0\u5b66\u751f\u6570\u636e key \u5b66\u53f7 -> value \u59d3\u540d \u4e3a\u4f8b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u300c\u54c8\u5e0c\u51fd\u6570\u300d\u8bbe\u8ba1\u4e3a

    \\[ f(x) = x \\% 100 \\]

    Fig. \u7b80\u5355\u54c8\u5e0c\u51fd\u6570\u793a\u4f8b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_hash_map.java
    /* \u952e\u503c\u5bf9 int->String */\nclass Entry {\npublic int key;\npublic String val;\npublic Entry(int key, String val) {\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate List<Entry> bucket;\npublic ArrayHashMap() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket = new ArrayList<>();\nfor (int i = 0; i < 100; i++) {\nbucket.add(null);\n}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate int hashFunc(int key) {\nint index = key % 100;\nreturn index;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\npublic String get(int key) {\nint index = hashFunc(key);\nEntry pair = bucket.get(index);\nif (pair == null) return null;\nreturn pair.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\npublic void put(int key, String val) {\nEntry pair = new Entry(key, val);\nint index = hashFunc(key);\nbucket.set(index, pair);\n}\n/* \u5220\u9664\u64cd\u4f5c */\npublic void remove(int key) {\nint index = hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nbucket.set(index, null);\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\npublic List<Entry> entrySet() {\nList<Entry> entrySet = new ArrayList<>();\nfor (Entry pair : bucket) {\nif (pair != null)\nentrySet.add(pair);\n}\nreturn entrySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\npublic List<Integer> keySet() {\nList<Integer> keySet = new ArrayList<>();\nfor (Entry pair : bucket) {\nif (pair != null)\nkeySet.add(pair.key);\n}\nreturn keySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\npublic List<String> valueSet() {\nList<String> valueSet = new ArrayList<>();\nfor (Entry pair : bucket) {\nif (pair != null)\nvalueSet.add(pair.val);\n}\nreturn valueSet;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\npublic void print() {\nfor (Entry kv: entrySet()) {\nSystem.out.println(kv.key + \" -> \" + kv.val);\n}\n}\n}\n
    array_hash_map.cpp
    /* \u952e\u503c\u5bf9 int->String */\nstruct Entry {\npublic:\nint key;\nstring val;\nEntry(int key, string val) {\nthis->key = key;\nthis->val = val;\n}\n};\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate:\nvector<Entry*> bucket;\npublic:\nArrayHashMap() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket= vector<Entry*>(100);\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nint hashFunc(int key) {\nint index = key % 100;\nreturn index;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nstring get(int key) {\nint index = hashFunc(key);\nEntry* pair = bucket[index];\nif (pair == nullptr)\nreturn nullptr;\nreturn pair->val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nvoid put(int key, string val) {\nEntry* pair = new Entry(key, val);\nint index = hashFunc(key);\nbucket[index] = pair;\n}\n/* \u5220\u9664\u64cd\u4f5c */\nvoid remove(int key) {\nint index = hashFunc(key);\n// \u7f6e\u4e3a nullptr \uff0c\u4ee3\u8868\u5220\u9664\nbucket[index] = nullptr;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\nvector<Entry*> entrySet() {\nvector<Entry*> entrySet;\nfor (Entry* pair: bucket) {\nif (pair != nullptr) {\nentrySet.push_back(pair);\n}\n}\nreturn entrySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nvector<int> keySet() {\nvector<int> keySet;\nfor (Entry* pair: bucket) {\nif (pair != nullptr) {\nkeySet.push_back(pair->key);\n}\n}\nreturn keySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nvector<string> valueSet() {\nvector<string> valueSet;\nfor (Entry* pair: bucket) {\nif (pair != nullptr){\nvalueSet.push_back(pair->val);\n}\n}\nreturn valueSet;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nvoid print() {\nfor (Entry* kv: entrySet()) {\ncout << kv->key << \" -> \" << kv->val << endl;\n}\n}\n};\n
    array_hash_map.py
    class Entry:\n\"\"\" \u952e\u503c\u5bf9 int->String \"\"\"\ndef __init__(self, key: int, val: str):\nself.key = key\nself.val = val\nclass ArrayHashMap:\n\"\"\" \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\n# \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nself.bucket: List[Optional[Entry]] = [None] * 100\ndef hash_func(self, key: int) -> int:\n\"\"\" \u54c8\u5e0c\u51fd\u6570 \"\"\"\nindex: int = key % 100\nreturn index\ndef get(self, key: int) -> str:\n\"\"\" \u67e5\u8be2\u64cd\u4f5c \"\"\"\nindex: int = self.hash_func(key)\npair: Entry = self.bucket[index]\nif pair is None:\nreturn None\nreturn pair.val\ndef put(self, key: int, val: str) -> None:\n\"\"\" \u6dfb\u52a0\u64cd\u4f5c \"\"\"\npair = Entry(key, val)\nindex: int = self.hash_func(key)\nself.bucket[index] = pair\ndef remove(self, key: int) -> None:\n\"\"\" \u5220\u9664\u64cd\u4f5c \"\"\"\nindex: int = self.hash_func(key)\n# \u7f6e\u4e3a None \uff0c\u4ee3\u8868\u5220\u9664\nself.bucket[index] = None\ndef entry_set(self) -> List[Entry]:\n\"\"\" \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 \"\"\"\nresult: List[Entry] = []\nfor pair in self.bucket:\nif pair is not None:\nresult.append(pair)\nreturn result\ndef key_set(self) -> List[int]:\n\"\"\" \u83b7\u53d6\u6240\u6709\u952e \"\"\"\nresult: List[int] = []\nfor pair in self.bucket:\nif pair is not None:\nresult.append(pair.key)\nreturn result\ndef value_set(self) -> List[str]:\n\"\"\" \u83b7\u53d6\u6240\u6709\u503c \"\"\"\nresult: List[str] = []\nfor pair in self.bucket:\nif pair is not None:\nresult.append(pair.val)\nreturn result\ndef print(self) -> None:\n\"\"\" \u6253\u5370\u54c8\u5e0c\u8868 \"\"\"\nfor pair in self.bucket:\nif pair is not None:\nprint(pair.key, \"->\", pair.val)\n
    array_hash_map.go
    /* \u952e\u503c\u5bf9 int->String */\ntype entry struct {\nkey int\nval string\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\ntype arrayHashMap struct {\nbucket []*entry\n}\n/* \u521d\u59cb\u5316\u54c8\u5e0c\u8868 */\nfunc newArrayHashMap() *arrayHashMap {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket := make([]*entry, 100)\nreturn &arrayHashMap{bucket: bucket}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nfunc (a *arrayHashMap) hashFunc(key int) int {\nindex := key % 100\nreturn index\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nfunc (a *arrayHashMap) get(key int) string {\nindex := a.hashFunc(key)\npair := a.bucket[index]\nif pair == nil {\nreturn \"Not Found\"\n}\nreturn pair.val\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nfunc (a *arrayHashMap) put(key int, val string) {\npair := &entry{key: key, val: val}\nindex := a.hashFunc(key)\na.bucket[index] = pair\n}\n/* \u5220\u9664\u64cd\u4f5c */\nfunc (a *arrayHashMap) remove(key int) {\nindex := a.hashFunc(key)\n// \u7f6e\u4e3a nil \uff0c\u4ee3\u8868\u5220\u9664\na.bucket[index] = nil\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u5bf9 */\nfunc (a *arrayHashMap) entrySet() []*entry {\nvar pairs []*entry\nfor _, pair := range a.bucket {\nif pair != nil {\npairs = append(pairs, pair)\n}\n}\nreturn pairs\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nfunc (a *arrayHashMap) keySet() []int {\nvar keys []int\nfor _, pair := range a.bucket {\nif pair != nil {\nkeys = append(keys, pair.key)\n}\n}\nreturn keys\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nfunc (a *arrayHashMap) valueSet() []string {\nvar values []string\nfor _, pair := range a.bucket {\nif pair != nil {\nvalues = append(values, pair.val)\n}\n}\nreturn values\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nfunc (a *arrayHashMap) print() {\nfor _, pair := range a.bucket {\nif pair != nil {\nfmt.Println(pair.key, \"->\", pair.val)\n}\n}\n}\n
    array_hash_map.js
    /* \u952e\u503c\u5bf9 Number -> String */\nclass Entry {\nconstructor(key, val) {\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\n#bucket;\nconstructor() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nthis.#bucket = new Array(100).fill(null);\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\n#hashFunc(key) {\nreturn key % 100;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nget(key) {\nlet index = this.#hashFunc(key);\nlet entry = this.#bucket[index];\nif (entry === null) return null;\nreturn entry.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nset(key, val) {\nlet index = this.#hashFunc(key);\nthis.#bucket[index] = new Entry(key, val);\n}\n/* \u5220\u9664\u64cd\u4f5c */\ndelete(key) {\nlet index = this.#hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nthis.#bucket[index] = null;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\nentries() {\nlet arr = [];\nfor (let i = 0; i < this.#bucket.length; i++) {\nif (this.#bucket[i]) {\narr.push(this.#bucket[i]);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nkeys() {\nlet arr = [];\nfor (let i = 0; i < this.#bucket.length; i++) {\nif (this.#bucket[i]) {\narr.push(this.#bucket[i]?.key);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nvalues() {\nlet arr = [];\nfor (let i = 0; i < this.#bucket.length; i++) {\nif (this.#bucket[i]) {\narr.push(this.#bucket[i]?.val);\n}\n}\nreturn arr;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nprint() {\nlet entrySet = this.entries();\nfor (const entry of entrySet) {\nif (!entry) continue;\nconsole.info(`${entry.key} -> ${entry.val}`);\n}\n}\n}\n
    array_hash_map.ts
    /* \u952e\u503c\u5bf9 Number -> String */\nclass Entry {\npublic key: number;\npublic val: string;\nconstructor(key: number, val: string) {\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate readonly bucket: (Entry | null)[];\nconstructor() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nthis.bucket = (new Array(100)).fill(null);\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate hashFunc(key: number): number {\nreturn key % 100;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\npublic get(key: number): string | null {\nlet index = this.hashFunc(key);\nlet entry = this.bucket[index];\nif (entry === null) return null;\nreturn entry.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\npublic set(key: number, val: string) {\nlet index = this.hashFunc(key);\nthis.bucket[index] = new Entry(key, val);\n}\n/* \u5220\u9664\u64cd\u4f5c */\npublic delete(key: number) {\nlet index = this.hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nthis.bucket[index] = null;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\npublic entries(): (Entry | null)[] {\nlet arr: (Entry | null)[] = [];\nfor (let i = 0; i < this.bucket.length; i++) {\nif (this.bucket[i]) {\narr.push(this.bucket[i]);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\npublic keys(): (number | undefined)[] {\nlet arr: (number | undefined)[] = [];\nfor (let i = 0; i < this.bucket.length; i++) {\nif (this.bucket[i]) {\narr.push(this.bucket[i]?.key);\n}\n}\nreturn arr;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\npublic values(): (string | undefined)[] {\nlet arr: (string | undefined)[] = [];\nfor (let i = 0; i < this.bucket.length; i++) {\nif (this.bucket[i]) {\narr.push(this.bucket[i]?.val);\n}\n}\nreturn arr;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\npublic print() {\nlet entrySet = this.entries();\nfor (const entry of entrySet) {\nif (!entry) continue;\nconsole.info(`${entry.key} -> ${entry.val}`);\n}\n}\n}\n
    array_hash_map.c
    [class]{entry}-[func]{}\n[class]{arrayHashMap}-[func]{}\n
    array_hash_map.cs
    /* \u952e\u503c\u5bf9 int->String */\nclass Entry\n{\npublic int key;\npublic String val;\npublic Entry(int key, String val)\n{\nthis.key = key;\nthis.val = val;\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap\n{\nprivate List<Entry?> bucket;\npublic ArrayHashMap()\n{\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nbucket = new();\nfor (int i = 0; i < 100; i++)\n{\nbucket.Add(null);\n}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate int hashFunc(int key)\n{\nint index = key % 100;\nreturn index;\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\npublic String? get(int key)\n{\nint index = hashFunc(key);\nEntry? pair = bucket[index];\nif (pair == null) return null;\nreturn pair.val;\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\npublic void put(int key, String val)\n{\nEntry pair = new Entry(key, val);\nint index = hashFunc(key);\nbucket[index] = pair;\n}\n/* \u5220\u9664\u64cd\u4f5c */\npublic void remove(int key)\n{\nint index = hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nbucket[index] = null;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\npublic List<Entry> entrySet()\n{\nList<Entry> entrySet = new();\nforeach (Entry? pair in bucket)\n{\nif (pair != null)\nentrySet.Add(pair);\n}\nreturn entrySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\npublic List<int> keySet()\n{\nList<int> keySet = new();\nforeach (Entry? pair in bucket)\n{\nif (pair != null)\nkeySet.Add(pair.key);\n}\nreturn keySet;\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\npublic List<String> valueSet()\n{\nList<String> valueSet = new();\nforeach (Entry? pair in bucket)\n{\nif (pair != null)\nvalueSet.Add(pair.val);\n}\nreturn valueSet;\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\npublic void print()\n{\nforeach (Entry kv in entrySet())\n{\nConsole.WriteLine(kv.key + \" -> \" + kv.val);\n}\n}\n}\n
    array_hash_map.swift
    /* \u952e\u503c\u5bf9 int->String */\nclass Entry {\nvar key: Int\nvar val: String\ninit(key: Int, val: String) {\nself.key = key\nself.val = val\n}\n}\n/* \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868 */\nclass ArrayHashMap {\nprivate var bucket: [Entry?] = []\ninit() {\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nfor _ in 0 ..< 100 {\nbucket.append(nil)\n}\n}\n/* \u54c8\u5e0c\u51fd\u6570 */\nprivate func hashFunc(key: Int) -> Int {\nlet index = key % 100\nreturn index\n}\n/* \u67e5\u8be2\u64cd\u4f5c */\nfunc get(key: Int) -> String? {\nlet index = hashFunc(key: key)\nlet pair = bucket[index]\nreturn pair?.val\n}\n/* \u6dfb\u52a0\u64cd\u4f5c */\nfunc put(key: Int, val: String) {\nlet pair = Entry(key: key, val: val)\nlet index = hashFunc(key: key)\nbucket[index] = pair\n}\n/* \u5220\u9664\u64cd\u4f5c */\nfunc remove(key: Int) {\nlet index = hashFunc(key: key)\n// \u7f6e\u4e3a nil \uff0c\u4ee3\u8868\u5220\u9664\nbucket[index] = nil\n}\n/* \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9 */\nfunc entrySet() -> [Entry] {\nvar entrySet: [Entry] = []\nfor pair in bucket {\nif let pair = pair {\nentrySet.append(pair)\n}\n}\nreturn entrySet\n}\n/* \u83b7\u53d6\u6240\u6709\u952e */\nfunc keySet() -> [Int] {\nvar keySet: [Int] = []\nfor pair in bucket {\nif let pair = pair {\nkeySet.append(pair.key)\n}\n}\nreturn keySet\n}\n/* \u83b7\u53d6\u6240\u6709\u503c */\nfunc valueSet() -> [String] {\nvar valueSet: [String] = []\nfor pair in bucket {\nif let pair = pair {\nvalueSet.append(pair.val)\n}\n}\nreturn valueSet\n}\n/* \u6253\u5370\u54c8\u5e0c\u8868 */\nfunc print() {\nfor entry in entrySet() {\nSwift.print(\"\\(entry.key) -> \\(entry.val)\")\n}\n}\n}\n
    array_hash_map.zig
    // \u952e\u503c\u5bf9 int->String\nconst Entry = struct {\nkey: usize = undefined,\nval: []const u8 = undefined,\npub fn init(key: usize, val: []const u8) Entry {\nreturn Entry {\n.key = key,\n.val = val,\n};\n}\n};\n// \u57fa\u4e8e\u6570\u7ec4\u7b80\u6613\u5b9e\u73b0\u7684\u54c8\u5e0c\u8868\nfn ArrayHashMap(comptime T: type) type {\nreturn struct {\nbucket: ?std.ArrayList(?T) = null,\nmem_allocator: std.mem.Allocator = undefined,\nconst Self = @This();\n// \u6784\u9020\u65b9\u6cd5\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nself.mem_allocator = allocator;\n// \u521d\u59cb\u5316\u4e00\u4e2a\u957f\u5ea6\u4e3a 100 \u7684\u6876\uff08\u6570\u7ec4\uff09\nself.bucket = std.ArrayList(?T).init(self.mem_allocator);\nvar i: i32 = 0;\nwhile (i < 100) : (i += 1) {\ntry self.bucket.?.append(null);\n}\n}\n// \u6790\u6784\u65b9\u6cd5\npub fn deinit(self: *Self) void {\nif (self.bucket != null) self.bucket.?.deinit();\n}\n// \u54c8\u5e0c\u51fd\u6570\nfn hashFunc(key: usize) usize {\nvar index = key % 100;\nreturn index;\n}\n// \u67e5\u8be2\u64cd\u4f5c\npub fn get(self: *Self, key: usize) []const u8 {\nvar index = hashFunc(key);\nvar pair = self.bucket.?.items[index];\nreturn pair.?.val;\n}\n// \u6dfb\u52a0\u64cd\u4f5c\npub fn put(self: *Self, key: usize, val: []const u8) !void {\nvar pair = Entry.init(key, val);\nvar index = hashFunc(key);\nself.bucket.?.items[index] = pair;\n}\n// \u5220\u9664\u64cd\u4f5c\npub fn remove(self: *Self, key: usize) !void {\nvar index = hashFunc(key);\n// \u7f6e\u4e3a null \uff0c\u4ee3\u8868\u5220\u9664\nself.bucket.?.items[index] = null;\n}       // \u83b7\u53d6\u6240\u6709\u952e\u503c\u5bf9\npub fn entrySet(self: *Self) !*std.ArrayList(T) {\nvar entry_set = std.ArrayList(T).init(self.mem_allocator);\nfor (self.bucket.?.items) |item| {\nif (item == null) continue;\ntry entry_set.append(item.?);\n}\nreturn &entry_set;\n}  // \u83b7\u53d6\u6240\u6709\u952e\npub fn keySet(self: *Self) !*std.ArrayList(usize) {\nvar key_set = std.ArrayList(usize).init(self.mem_allocator);\nfor (self.bucket.?.items) |item| {\nif (item == null) continue;\ntry key_set.append(item.?.key);\n}\nreturn &key_set;\n}  // \u83b7\u53d6\u6240\u6709\u503c\npub fn valueSet(self: *Self) !*std.ArrayList([]const u8) {\nvar value_set = std.ArrayList([]const u8).init(self.mem_allocator);\nfor (self.bucket.?.items) |item| {\nif (item == null) continue;\ntry value_set.append(item.?.val);\n}\nreturn &value_set;\n}\n// \u6253\u5370\u54c8\u5e0c\u8868\npub fn print(self: *Self) !void {\nvar entry_set = try self.entrySet();\ndefer entry_set.deinit();\nfor (entry_set.items) |item| {\nstd.debug.print(\"{} -> {s}\\n\", .{item.key, item.val});\n}\n}\n};\n}\n
    "},{"location":"chapter_hashing/hash_map/#614","title":"6.1.4. \u00a0 \u54c8\u5e0c\u51b2\u7a81","text":"

    \u7ec6\u5fc3\u7684\u540c\u5b66\u53ef\u80fd\u4f1a\u53d1\u73b0\uff0c\u54c8\u5e0c\u51fd\u6570 \\(f(x) = x \\% 100\\) \u4f1a\u5728\u67d0\u4e9b\u60c5\u51b5\u4e0b\u5931\u6548\u3002\u5177\u4f53\u5730\uff0c\u5f53\u8f93\u5165\u7684 key \u540e\u4e24\u4f4d\u76f8\u540c\u65f6\uff0c\u54c8\u5e0c\u51fd\u6570\u7684\u8ba1\u7b97\u7ed3\u679c\u4e5f\u76f8\u540c\uff0c\u6307\u5411\u540c\u4e00\u4e2a value \u3002\u4f8b\u5982\uff0c\u5206\u522b\u67e5\u8be2\u4e24\u4e2a\u5b66\u53f7 \\(12836\\) \u548c \\(20336\\) \uff0c\u5219\u6709

    \\[ f(12836) = f(20336) = 36 \\]

    \u4e24\u4e2a\u5b66\u53f7\u6307\u5411\u4e86\u540c\u4e00\u4e2a\u59d3\u540d\uff0c\u8fd9\u660e\u663e\u662f\u4e0d\u5bf9\u7684\uff0c\u6211\u4eec\u5c06\u8fd9\u79cd\u73b0\u8c61\u79f0\u4e3a\u300c\u54c8\u5e0c\u51b2\u7a81 Hash Collision\u300d\u3002\u5982\u4f55\u907f\u514d\u54c8\u5e0c\u51b2\u7a81\u7684\u95ee\u9898\u5c06\u88ab\u7559\u5728\u4e0b\u7ae0\u8ba8\u8bba\u3002

    Fig. \u54c8\u5e0c\u51b2\u7a81\u793a\u4f8b

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u4e00\u4e2a\u4f18\u79c0\u7684\u300c\u54c8\u5e0c\u51fd\u6570\u300d\u5e94\u8be5\u5177\u5907\u4ee5\u4e0b\u7279\u6027\uff1a

    • \u5c3d\u91cf\u5c11\u5730\u53d1\u751f\u54c8\u5e0c\u51b2\u7a81\uff1b
    • \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff0c\u8ba1\u7b97\u5c3d\u53ef\u80fd\u9ad8\u6548\uff1b
    • \u7a7a\u95f4\u4f7f\u7528\u7387\u9ad8\uff0c\u5373\u201c\u952e\u503c\u5bf9\u5360\u7528\u7a7a\u95f4 / \u54c8\u5e0c\u8868\u603b\u5360\u7528\u7a7a\u95f4\u201d\u5c3d\u53ef\u80fd\u5927\uff1b
    "},{"location":"chapter_hashing/summary/","title":"6.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u5411\u54c8\u5e0c\u8868\u4e2d\u8f93\u5165\u4e00\u4e2a\u952e key \uff0c\u67e5\u8be2\u5230\u503c value \u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(1)\\) \uff0c\u975e\u5e38\u9ad8\u6548\u3002
    • \u54c8\u5e0c\u8868\u7684\u5e38\u7528\u64cd\u4f5c\u5305\u62ec\u67e5\u8be2\u3001\u6dfb\u52a0\u4e0e\u5220\u9664\u952e\u503c\u5bf9\u3001\u904d\u5386\u952e\u503c\u5bf9\u7b49\u3002
    • \u54c8\u5e0c\u51fd\u6570\u5c06 key \u6620\u5c04\u5230\u6876\uff08\u6570\u7ec4\uff09\u7d22\u5f15\uff0c\u4ece\u800c\u8bbf\u95ee\u5230\u5bf9\u5e94\u7684\u503c value \u3002
    • \u4e24\u4e2a\u4e0d\u540c\u7684 key \u7ecf\u8fc7\u54c8\u5e0c\u51fd\u6570\u53ef\u80fd\u5f97\u5230\u76f8\u540c\u7684\u6876\u7d22\u5f15\uff0c\u8fdb\u800c\u53d1\u751f\u54c8\u5e0c\u51b2\u7a81\uff0c\u5bfc\u81f4\u67e5\u8be2\u9519\u8bef\u3002
    • \u7f13\u89e3\u54c8\u5e0c\u51b2\u7a81\u7684\u9014\u5f84\u6709\u4e24\u79cd\uff1a\u54c8\u5e0c\u8868\u6269\u5bb9\u3001\u4f18\u5316\u54c8\u5e0c\u8868\u7684\u8868\u793a\u65b9\u5f0f\u3002
    • \u8d1f\u8f7d\u56e0\u5b50\u5b9a\u4e49\u4e3a\u54c8\u5e0c\u8868\u4e2d\u5143\u7d20\u6570\u91cf\u9664\u4ee5\u6876\u69fd\u6570\u91cf\uff0c\u4f53\u73b0\u54c8\u5e0c\u51b2\u7a81\u7684\u4e25\u91cd\u7a0b\u5ea6\uff0c\u5e38\u7528\u4f5c\u54c8\u5e0c\u8868\u6269\u5bb9\u7684\u89e6\u53d1\u6761\u4ef6\u3002\u4e0e\u6570\u7ec4\u6269\u5bb9\u7684\u539f\u7406\u7c7b\u4f3c\uff0c\u54c8\u5e0c\u8868\u6269\u5bb9\u64cd\u4f5c\u5f00\u9500\u4e5f\u5f88\u5927\u3002
    • \u94fe\u5f0f\u5730\u5740\u8003\u8651\u5c06\u5355\u4e2a\u5143\u7d20\u8f6c\u5316\u6210\u4e00\u4e2a\u94fe\u8868\uff0c\u5c06\u6240\u6709\u51b2\u7a81\u5143\u7d20\u90fd\u5b58\u50a8\u5728\u4e00\u4e2a\u94fe\u8868\u4e2d\uff0c\u4ece\u800c\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002\u94fe\u8868\u8fc7\u957f\u4f1a\u5bfc\u81f4\u67e5\u8be2\u6548\u7387\u53d8\u4f4e\uff0c\u53ef\u4ee5\u901a\u8fc7\u628a\u94fe\u8868\u8f6c\u5316\u4e3a AVL \u6811\u6216\u7ea2\u9ed1\u6811\u6765\u89e3\u51b3\u3002
    • \u5f00\u653e\u5bfb\u5740\u901a\u8fc7\u591a\u6b21\u63a2\u6d4b\u6765\u89e3\u51b3\u54c8\u5e0c\u51b2\u7a81\u3002\u7ebf\u6027\u63a2\u6d4b\u4f7f\u7528\u56fa\u5b9a\u6b65\u957f\uff0c\u7f3a\u70b9\u662f\u4e0d\u80fd\u5220\u9664\u5143\u7d20\u4e14\u5bb9\u6613\u4ea7\u751f\u805a\u96c6\u3002\u591a\u6b21\u54c8\u5e0c\u4f7f\u7528\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570\u8fdb\u884c\u63a2\u6d4b\uff0c\u76f8\u5bf9\u7ebf\u6027\u63a2\u6d4b\u4e0d\u5bb9\u6613\u4ea7\u751f\u805a\u96c6\uff0c\u4ee3\u4ef7\u662f\u591a\u4e2a\u54c8\u5e0c\u51fd\u6570\u589e\u52a0\u4e86\u8ba1\u7b97\u91cf\u3002
    • \u5728\u5de5\u4e1a\u754c\u4e2d\uff0cJava \u7684 HashMap \u91c7\u7528\u94fe\u5f0f\u5730\u5740\u3001Python \u7684 Dict \u91c7\u7528\u5f00\u653e\u5bfb\u5740\u3002
    "},{"location":"chapter_heap/build_heap/","title":"8.2. \u00a0 \u5efa\u5806\u64cd\u4f5c *","text":"

    \u5982\u679c\u6211\u4eec\u60f3\u8981\u6839\u636e\u8f93\u5165\u5217\u8868\u6765\u751f\u6210\u4e00\u4e2a\u5806\uff0c\u8fd9\u6837\u7684\u64cd\u4f5c\u88ab\u79f0\u4e3a\u300c\u5efa\u5806\u300d\u3002

    "},{"location":"chapter_heap/build_heap/#821","title":"8.2.1. \u00a0 \u4e24\u79cd\u5efa\u5806\u65b9\u6cd5","text":""},{"location":"chapter_heap/build_heap/#_1","title":"\u501f\u52a9\u5165\u5806\u65b9\u6cd5\u5b9e\u73b0","text":"

    \u6700\u76f4\u63a5\u5730\uff0c\u8003\u8651\u501f\u52a9\u300c\u5143\u7d20\u5165\u5806\u300d\u65b9\u6cd5\uff0c\u5148\u5efa\u7acb\u4e00\u4e2a\u7a7a\u5806\uff0c\u518d\u5c06\u5217\u8868\u5143\u7d20\u4f9d\u6b21\u5165\u5806\u5373\u53ef\u3002

    "},{"location":"chapter_heap/build_heap/#_2","title":"\u57fa\u4e8e\u5806\u5316\u64cd\u4f5c\u5b9e\u73b0","text":"

    \u7136\u800c\uff0c\u5b58\u5728\u4e00\u79cd\u66f4\u52a0\u9ad8\u6548\u7684\u5efa\u5806\u65b9\u6cd5\u3002\u8bbe\u5143\u7d20\u6570\u91cf\u4e3a \\(n\\) \uff0c\u6211\u4eec\u5148\u5c06\u5217\u8868\u6240\u6709\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\uff0c\u7136\u540e\u8fed\u4ee3\u5730\u5bf9\u5404\u4e2a\u7ed3\u70b9\u6267\u884c\u300c\u4ece\u9876\u81f3\u5e95\u5806\u5316\u300d\u3002\u5f53\u7136\uff0c\u65e0\u9700\u5bf9\u53f6\u7ed3\u70b9\u6267\u884c\u5806\u5316\uff0c\u56e0\u4e3a\u5176\u6ca1\u6709\u5b50\u7ed3\u70b9\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nMaxHeap(List<Integer> nums) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = new ArrayList<>(nums);\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (int i = parent(size() - 1); i >= 0; i--) {\nsiftDown(i);\n}\n}\n
    my_heap.cpp
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nMaxHeap(vector<int> nums) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = nums;\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (int i = parent(size() - 1); i >= 0; i--) {\nsiftDown(i);\n}\n}\n
    my_heap.py
    def __init__(self, nums: List[int]):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\n# \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nself.max_heap = nums\n# \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor i in range(self.parent(self.size() - 1), -1, -1):\nself.sift_down(i)\n
    my_heap.go
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u5207\u7247\u5efa\u5806 */\nfunc newMaxHeap(nums []any) *maxHeap {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nh := &maxHeap{data: nums}\nfor i := len(h.data) - 1; i >= 0; i-- {\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nh.siftDown(i)\n}\nreturn h\n}\n
    my_heap.js
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u5efa\u7acb\u7a7a\u5806\u6216\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nconstructor(nums) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nthis.#maxHeap = nums === undefined ? [] : [...nums];\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (let i = this.#parent(this.size() - 1); i >= 0; i--) {\nthis.#siftDown(i);\n}\n}\n
    my_heap.ts
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u5efa\u7acb\u7a7a\u5806\u6216\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nconstructor(nums?: number[]) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nthis.maxHeap = nums === undefined ? [] : [...nums];\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor (let i = this.parent(this.size() - 1); i >= 0; i--) {\nthis.siftDown(i);\n}\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{newMaxHeap}\n
    my_heap.cs
    /* \u6784\u9020\u51fd\u6570\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\nMaxHeap(IEnumerable<int> nums)\n{\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = new List<int>(nums);\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nvar size = parent(this.size() - 1);\nfor (int i = size; i >= 0; i--)\n{\nsiftDown(i);\n}\n}\n
    my_heap.swift
    /* \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806 */\ninit(nums: [Int]) {\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\nmaxHeap = nums\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nfor i in stride(from: parent(i: size() - 1), through: 0, by: -1) {\nsiftDown(i: i)\n}\n}\n
    my_heap.zig
    // \u6784\u9020\u65b9\u6cd5\uff0c\u6839\u636e\u8f93\u5165\u5217\u8868\u5efa\u5806\nfn init(self: *Self, allocator: std.mem.Allocator, nums: []const T) !void {\nif (self.maxHeap != null) return;\nself.maxHeap = std.ArrayList(T).init(allocator);\n// \u5c06\u5217\u8868\u5143\u7d20\u539f\u5c01\u4e0d\u52a8\u6dfb\u52a0\u8fdb\u5806\ntry self.maxHeap.?.appendSlice(nums);\n// \u5806\u5316\u9664\u53f6\u7ed3\u70b9\u4ee5\u5916\u7684\u5176\u4ed6\u6240\u6709\u7ed3\u70b9\nvar i: usize = parent(self.size() - 1) + 1;\nwhile (i > 0) : (i -= 1) {\ntry self.siftDown(i - 1);\n}\n}\n
    "},{"location":"chapter_heap/build_heap/#822","title":"8.2.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u5bf9\u4e8e\u7b2c\u4e00\u79cd\u5efa\u5806\u65b9\u6cd5\uff0c\u5143\u7d20\u5165\u5806\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \uff0c\u800c\u5e73\u5747\u957f\u5ea6\u4e3a \\(\\frac{n}{2}\\) \uff0c\u56e0\u6b64\u8be5\u65b9\u6cd5\u7684\u603b\u4f53\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n \\log n)\\) \u3002

    \u90a3\u4e48\uff0c\u7b2c\u4e8c\u79cd\u5efa\u5806\u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f\u591a\u5c11\u5462\uff1f\u6211\u4eec\u6765\u5c55\u5f00\u63a8\u7b97\u4e00\u4e0b\u3002

    • \u5b8c\u5168\u4e8c\u53c9\u6811\u4e2d\uff0c\u8bbe\u7ed3\u70b9\u603b\u6570\u4e3a \\(n\\) \uff0c\u5219\u53f6\u7ed3\u70b9\u6570\u91cf\u4e3a \\((n + 1) / 2\\) \uff0c\u5176\u4e2d \\(/\\) \u4e3a\u5411\u4e0b\u6574\u9664\u3002\u56e0\u6b64\u5728\u6392\u9664\u53f6\u7ed3\u70b9\u540e\uff0c\u9700\u8981\u5806\u5316\u7ed3\u70b9\u6570\u91cf\u4e3a \\((n - 1)/2\\) \uff0c\u5373\u4e3a \\(O(n)\\) \uff1b
    • \u4ece\u9876\u81f3\u5e95\u5806\u5316\u4e2d\uff0c\u6bcf\u4e2a\u7ed3\u70b9\u6700\u591a\u5806\u5316\u81f3\u53f6\u7ed3\u70b9\uff0c\u56e0\u6b64\u6700\u5927\u8fed\u4ee3\u6b21\u6570\u4e3a\u4e8c\u53c9\u6811\u9ad8\u5ea6 \\(O(\\log n)\\) \uff1b

    \u5c06\u4e0a\u8ff0\u4e24\u8005\u76f8\u4e58\uff0c\u53ef\u5f97\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n \\log n)\\) \u3002\u7136\u800c\uff0c\u8be5\u4f30\u7b97\u7ed3\u679c\u4ecd\u4e0d\u591f\u51c6\u786e\uff0c\u56e0\u4e3a\u6211\u4eec\u6ca1\u6709\u8003\u8651\u5230 \u4e8c\u53c9\u6811\u5e95\u5c42\u7ed3\u70b9\u8fdc\u591a\u4e8e\u9876\u5c42\u7ed3\u70b9 \u7684\u6027\u8d28\u3002

    \u4e0b\u9762\u6211\u4eec\u6765\u5c1d\u8bd5\u5c55\u5f00\u8ba1\u7b97\u3002\u4e3a\u4e86\u51cf\u5c0f\u8ba1\u7b97\u96be\u5ea6\uff0c\u6211\u4eec\u5047\u8bbe\u6811\u662f\u4e00\u4e2a\u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u300d\uff0c\u8be5\u5047\u8bbe\u4e0d\u4f1a\u5f71\u54cd\u8ba1\u7b97\u7ed3\u679c\u7684\u6b63\u786e\u6027\u3002\u8bbe\u4e8c\u53c9\u6811\uff08\u5373\u5806\uff09\u7ed3\u70b9\u6570\u91cf\u4e3a \\(n\\) \uff0c\u6811\u9ad8\u5ea6\u4e3a \\(h\\) \u3002\u4e0a\u6587\u63d0\u5230\uff0c\u7ed3\u70b9\u5806\u5316\u6700\u5927\u8fed\u4ee3\u6b21\u6570\u7b49\u4e8e\u8be5\u7ed3\u70b9\u5230\u53f6\u7ed3\u70b9\u7684\u8ddd\u79bb\uff0c\u800c\u8fd9\u6b63\u662f\u201c\u7ed3\u70b9\u9ad8\u5ea6\u201d\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u5c06\u5404\u5c42\u7684\u201c\u7ed3\u70b9\u6570\u91cf \\(\\times\\) \u7ed3\u70b9\u9ad8\u5ea6\u201d\u6c42\u548c\uff0c\u5373\u53ef\u5f97\u5230\u6240\u6709\u7ed3\u70b9\u7684\u5806\u5316\u7684\u8fed\u4ee3\u6b21\u6570\u603b\u548c\u3002

    \\[ T(h) = 2^0h + 2^1(h-1) + 2^2(h-2) + \\cdots + 2^{(h-1)}\\times1 \\]

    Fig. \u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u5404\u5c42\u7ed3\u70b9\u6570\u91cf

    \u5316\u7b80\u4e0a\u5f0f\u9700\u8981\u501f\u52a9\u4e2d\u5b66\u7684\u6570\u5217\u77e5\u8bc6\uff0c\u5148\u5bf9 \\(T(h)\\) \u4e58\u4ee5 \\(2\\) \uff0c\u6613\u5f97

    \\[ \\begin{aligned} T(h) & = 2^0h + 2^1(h-1) + 2^2(h-2) + \\cdots + 2^{h-1}\\times1 \\newline 2 T(h) & = 2^1h + 2^2(h-1) + 2^3(h-2) + \\cdots + 2^{h}\\times1 \\newline \\end{aligned} \\]

    \u4f7f\u7528\u9519\u4f4d\u76f8\u51cf\u6cd5\uff0c\u4ee4\u4e0b\u5f0f \\(2 T(h)\\) \u51cf\u53bb\u4e0a\u5f0f \\(T(h)\\) \uff0c\u53ef\u5f97

    \\[ 2T(h) - T(h) = T(h) = -2^0h + 2^1 + 2^2 + \\cdots + 2^{h-1} + 2^h \\]

    \u89c2\u5bdf\u4e0a\u5f0f\uff0c\\(T(h)\\) \u662f\u4e00\u4e2a\u7b49\u6bd4\u6570\u5217\uff0c\u53ef\u76f4\u63a5\u4f7f\u7528\u6c42\u548c\u516c\u5f0f\uff0c\u5f97\u5230\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a

    \\[ \\begin{aligned} T(h) & = 2 \\frac{1 - 2^h}{1 - 2} - h \\newline & = 2^{h+1} - h \\newline & = O(2^h) \\end{aligned} \\]

    \u8fdb\u4e00\u6b65\u5730\uff0c\u9ad8\u5ea6\u4e3a \\(h\\) \u7684\u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u7ed3\u70b9\u6570\u91cf\u4e3a \\(n = 2^{h+1} - 1\\) \uff0c\u6613\u5f97\u590d\u6742\u5ea6\u4e3a \\(O(2^h) = O(n)\\)\u3002\u4ee5\u4e0a\u63a8\u7b97\u8868\u660e\uff0c\u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff0c\u975e\u5e38\u9ad8\u6548\u3002

    "},{"location":"chapter_heap/heap/","title":"8.1. \u00a0 \u5806","text":"

    \u300c\u5806 Heap\u300d\u662f\u4e00\u68f5\u9650\u5b9a\u6761\u4ef6\u4e0b\u7684\u300c\u5b8c\u5168\u4e8c\u53c9\u6811\u300d\u3002\u6839\u636e\u6210\u7acb\u6761\u4ef6\uff0c\u5806\u4e3b\u8981\u5206\u4e3a\u4e24\u79cd\u7c7b\u578b\uff1a

    • \u300c\u5927\u9876\u5806 Max Heap\u300d\uff0c\u4efb\u610f\u7ed3\u70b9\u7684\u503c \\(\\geq\\) \u5176\u5b50\u7ed3\u70b9\u7684\u503c\uff1b
    • \u300c\u5c0f\u9876\u5806 Min Heap\u300d\uff0c\u4efb\u610f\u7ed3\u70b9\u7684\u503c \\(\\leq\\) \u5176\u5b50\u7ed3\u70b9\u7684\u503c\uff1b

    Fig. \u5c0f\u9876\u5806\u4e0e\u5927\u9876\u5806

    "},{"location":"chapter_heap/heap/#811","title":"8.1.1. \u00a0 \u5806\u672f\u8bed\u4e0e\u6027\u8d28","text":"
    • \u7531\u4e8e\u5806\u662f\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u56e0\u6b64\u6700\u5e95\u5c42\u7ed3\u70b9\u9760\u5de6\u586b\u5145\uff0c\u5176\u5b83\u5c42\u7ed3\u70b9\u7686\u88ab\u586b\u6ee1\u3002
    • \u4e8c\u53c9\u6811\u4e2d\u7684\u6839\u7ed3\u70b9\u5bf9\u5e94\u300c\u5806\u9876\u300d\uff0c\u5e95\u5c42\u6700\u9760\u53f3\u7ed3\u70b9\u5bf9\u5e94\u300c\u5806\u5e95\u300d\u3002
    • \u5bf9\u4e8e\u5927\u9876\u5806 / \u5c0f\u9876\u5806\uff0c\u5176\u5806\u9876\u5143\u7d20\uff08\u5373\u6839\u7ed3\u70b9\uff09\u7684\u503c\u6700\u5927 / \u6700\u5c0f\u3002
    "},{"location":"chapter_heap/heap/#812","title":"8.1.2. \u00a0 \u5806\u5e38\u7528\u64cd\u4f5c","text":"

    \u503c\u5f97\u8bf4\u660e\u7684\u662f\uff0c\u591a\u6570\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u662f\u300c\u4f18\u5148\u961f\u5217 Priority Queue\u300d\uff0c\u5176\u662f\u4e00\u79cd\u62bd\u8c61\u6570\u636e\u7ed3\u6784\uff0c\u5b9a\u4e49\u4e3a\u5177\u6709\u51fa\u961f\u4f18\u5148\u7ea7\u7684\u961f\u5217\u3002

    \u800c\u6070\u597d\uff0c\u5806\u7684\u5b9a\u4e49\u4e0e\u4f18\u5148\u961f\u5217\u7684\u64cd\u4f5c\u903b\u8f91\u5b8c\u5168\u543b\u5408\uff0c\u5927\u9876\u5806\u5c31\u662f\u4e00\u4e2a\u5143\u7d20\u4ece\u5927\u5230\u5c0f\u51fa\u961f\u7684\u4f18\u5148\u961f\u5217\u3002\u4ece\u4f7f\u7528\u89d2\u5ea6\u770b\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u300c\u4f18\u5148\u961f\u5217\u300d\u548c\u300c\u5806\u300d\u7406\u89e3\u4e3a\u7b49\u4ef7\u7684\u6570\u636e\u7ed3\u6784\u3002\u56e0\u6b64\uff0c\u672c\u6587\u4e0e\u4ee3\u7801\u5bf9\u4e24\u8005\u4e0d\u505a\u7279\u522b\u533a\u5206\uff0c\u7edf\u4e00\u4f7f\u7528\u300c\u5806\u300d\u6765\u547d\u540d\u3002

    \u5806\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\uff08\u65b9\u6cd5\u547d\u540d\u4ee5 Java \u4e3a\u4f8b\uff09\u3002

    \u65b9\u6cd5 \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 add() \u5143\u7d20\u5165\u5806 \\(O(\\log n)\\) poll() \u5806\u9876\u5143\u7d20\u51fa\u5806 \\(O(\\log n)\\) peek() \u8bbf\u95ee\u5806\u9876\u5143\u7d20\uff08\u5927 / \u5c0f\u9876\u5806\u5206\u522b\u4e3a\u6700\u5927 / \u5c0f\u503c\uff09 \\(O(1)\\) size() \u83b7\u53d6\u5806\u7684\u5143\u7d20\u6570\u91cf \\(O(1)\\) isEmpty() \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a \\(O(1)\\)

    \u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u63d0\u4f9b\u7684\u5806\u7c7b\uff08\u6216\u4f18\u5148\u961f\u5217\u7c7b\uff09\u3002

    Tip

    \u7c7b\u4f3c\u4e8e\u6392\u5e8f\u4e2d\u201c\u4ece\u5c0f\u5230\u5927\u6392\u5217\u201d\u548c\u201c\u4ece\u5927\u5230\u5c0f\u6392\u5217\u201d\uff0c\u201c\u5927\u9876\u5806\u201d\u548c\u201c\u5c0f\u9876\u5806\u201d\u53ef\u4ec5\u901a\u8fc7\u4fee\u6539 Comparator \u6765\u4e92\u76f8\u8f6c\u6362\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig heap.java
    /* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5c0f\u9876\u5806\nQueue<Integer> minHeap = new PriorityQueue<>();\n// \u521d\u59cb\u5316\u5927\u9876\u5806\uff08\u4f7f\u7528 lambda \u8868\u8fbe\u5f0f\u4fee\u6539 Comparator \u5373\u53ef\uff09\nQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);\n/* \u5143\u7d20\u5165\u5806 */\nmaxHeap.add(1);\nmaxHeap.add(3);\nmaxHeap.add(2);\nmaxHeap.add(5);\nmaxHeap.add(4);\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\nint peek = maxHeap.peek(); // 5\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\npeek = heap.poll();  // 5\npeek = heap.poll();  // 4\npeek = heap.poll();  // 3\npeek = heap.poll();  // 2\npeek = heap.poll();  // 1\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nint size = maxHeap.size();\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = maxHeap.isEmpty();\n/* \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 */\nminHeap = new PriorityQueue<>(Arrays.asList(1, 3, 2, 5, 4));\n
    heap.cpp
    /* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5c0f\u9876\u5806\npriority_queue<int, vector<int>, greater<int>> minHeap;\n// \u521d\u59cb\u5316\u5927\u9876\u5806\npriority_queue<int, vector<int>, less<int>> maxHeap;\n/* \u5143\u7d20\u5165\u5806 */\nmaxHeap.push(1);\nmaxHeap.push(3);\nmaxHeap.push(2);\nmaxHeap.push(5);\nmaxHeap.push(4);\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\nint peek = maxHeap.top(); // 5\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\nmaxHeap.pop(); // 5\nmaxHeap.pop(); // 4\nmaxHeap.pop(); // 3\nmaxHeap.pop(); // 2\nmaxHeap.pop(); // 1\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nint size = maxHeap.size();\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = maxHeap.empty();\n/* \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 */\nvector<int> input{1, 3, 2, 5, 4};\npriority_queue<int, vector<int>, greater<int>> minHeap(input.begin(), input.end());\n
    heap.py
    # \u521d\u59cb\u5316\u5c0f\u9876\u5806\nmin_heap, flag = [], 1\n# \u521d\u59cb\u5316\u5927\u9876\u5806\nmax_heap, flag = [], -1\n# Python \u7684 heapq \u6a21\u5757\u9ed8\u8ba4\u5b9e\u73b0\u5c0f\u9876\u5806\n# \u8003\u8651\u5c06\u201c\u5143\u7d20\u53d6\u8d1f\u201d\u540e\u518d\u5165\u5806\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u5c06\u5927\u5c0f\u5173\u7cfb\u98a0\u5012\uff0c\u4ece\u800c\u5b9e\u73b0\u5927\u9876\u5806\n# \u5728\u672c\u793a\u4f8b\u4e2d\uff0cflag = 1 \u65f6\u5bf9\u5e94\u5c0f\u9876\u5806\uff0cflag = -1 \u65f6\u5bf9\u5e94\u5927\u9876\u5806\n\"\"\" \u5143\u7d20\u5165\u5806 \"\"\"\nheapq.heappush(max_heap, flag * 1)\nheapq.heappush(max_heap, flag * 3)\nheapq.heappush(max_heap, flag * 2)\nheapq.heappush(max_heap, flag * 5)\nheapq.heappush(max_heap, flag * 4)\n\"\"\" \u83b7\u53d6\u5806\u9876\u5143\u7d20 \"\"\"\npeek: int = flag * max_heap[0] # 5\n\"\"\" \u5806\u9876\u5143\u7d20\u51fa\u5806 \"\"\"\n# \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\nval = flag * heapq.heappop(max_heap) # 5\nval = flag * heapq.heappop(max_heap) # 4\nval = flag * heapq.heappop(max_heap) # 3\nval = flag * heapq.heappop(max_heap) # 2\nval = flag * heapq.heappop(max_heap) # 1\n\"\"\" \u83b7\u53d6\u5806\u5927\u5c0f \"\"\"\nsize: int = len(max_heap)\n\"\"\" \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = not max_heap\n\"\"\" \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 \"\"\"\nmin_heap: List[int] = [1, 3, 2, 5, 4]\nheapq.heapify(min_heap)\n
    heap.go
    // Go \u8bed\u8a00\u4e2d\u53ef\u4ee5\u901a\u8fc7\u5b9e\u73b0 heap.Interface \u6765\u6784\u5efa\u6574\u6570\u5927\u9876\u5806\n// \u5b9e\u73b0 heap.Interface \u9700\u8981\u540c\u65f6\u5b9e\u73b0 sort.Interface\ntype intHeap []any\n// Push heap.Interface \u7684\u65b9\u6cd5\uff0c\u5b9e\u73b0\u63a8\u5165\u5143\u7d20\u5230\u5806\nfunc (h *intHeap) Push(x any) {\n// Push \u548c Pop \u4f7f\u7528 pointer receiver \u4f5c\u4e3a\u53c2\u6570\n// \u56e0\u4e3a\u5b83\u4eec\u4e0d\u4ec5\u4f1a\u5bf9\u5207\u7247\u7684\u5185\u5bb9\u8fdb\u884c\u8c03\u6574\uff0c\u8fd8\u4f1a\u4fee\u6539\u5207\u7247\u7684\u957f\u5ea6\u3002\n*h = append(*h, x.(int))\n}\n// Pop heap.Interface \u7684\u65b9\u6cd5\uff0c\u5b9e\u73b0\u5f39\u51fa\u5806\u9876\u5143\u7d20\nfunc (h *intHeap) Pop() any {\n// \u5f85\u51fa\u5806\u5143\u7d20\u5b58\u653e\u5728\u6700\u540e\nlast := (*h)[len(*h)-1]\n*h = (*h)[:len(*h)-1]\nreturn last\n}\n// Len sort.Interface \u7684\u65b9\u6cd5\nfunc (h *intHeap) Len() int {\nreturn len(*h)\n}\n// Less sort.Interface \u7684\u65b9\u6cd5\nfunc (h *intHeap) Less(i, j int) bool {\n// \u5982\u679c\u5b9e\u73b0\u5c0f\u9876\u5806\uff0c\u5219\u9700\u8981\u8c03\u6574\u4e3a\u5c0f\u4e8e\u53f7\nreturn (*h)[i].(int) > (*h)[j].(int)\n}\n// Swap sort.Interface \u7684\u65b9\u6cd5\nfunc (h *intHeap) Swap(i, j int) {\n(*h)[i], (*h)[j] = (*h)[j], (*h)[i]\n}\n// Top \u83b7\u53d6\u5806\u9876\u5143\u7d20\nfunc (h *intHeap) Top() any {\nreturn (*h)[0]\n}\n/* Driver Code */\nfunc TestHeap(t *testing.T) {\n/* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5927\u9876\u5806\nmaxHeap := &intHeap{}\nheap.Init(maxHeap)\n/* \u5143\u7d20\u5165\u5806 */\n// \u8c03\u7528 heap.Interface \u7684\u65b9\u6cd5\uff0c\u6765\u6dfb\u52a0\u5143\u7d20\nheap.Push(maxHeap, 1)\nheap.Push(maxHeap, 3)\nheap.Push(maxHeap, 2)\nheap.Push(maxHeap, 4)\nheap.Push(maxHeap, 5)\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\ntop := maxHeap.Top()\nfmt.Printf(\"\u5806\u9876\u5143\u7d20\u4e3a %d\\n\", top)\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u8c03\u7528 heap.Interface \u7684\u65b9\u6cd5\uff0c\u6765\u79fb\u9664\u5143\u7d20\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\nheap.Pop(maxHeap)\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nsize := len(*maxHeap)\nfmt.Printf(\"\u5806\u5143\u7d20\u6570\u91cf\u4e3a %d\\n\", size)\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nisEmpty := len(*maxHeap) == 0\nfmt.Printf(\"\u5806\u662f\u5426\u4e3a\u7a7a %t\\n\", isEmpty)\n}\n
    heap.js
    // JavaScript \u672a\u63d0\u4f9b\u5185\u7f6e heap \u7c7b\n
    heap.ts
    // TypeScript \u672a\u63d0\u4f9b\u5185\u7f6e\u5806 Heap \u7c7b\n
    heap.c
    \n
    heap.cs
    /* \u521d\u59cb\u5316\u5806 */\n// \u521d\u59cb\u5316\u5c0f\u9876\u5806\nPriorityQueue<int, int> minHeap = new PriorityQueue<int, int>();\n// \u521d\u59cb\u5316\u5927\u9876\u5806\uff08\u4f7f\u7528 lambda \u8868\u8fbe\u5f0f\u4fee\u6539 Comparator \u5373\u53ef\uff09\nPriorityQueue<int, int> maxHeap = new PriorityQueue<int, int>(Comparer<int>.Create((x, y) => y - x));\n/* \u5143\u7d20\u5165\u5806 */\nmaxHeap.Enqueue(1, 1);\nmaxHeap.Enqueue(3, 3);\nmaxHeap.Enqueue(2, 2);\nmaxHeap.Enqueue(5, 5);\nmaxHeap.Enqueue(4, 4);\n/* \u83b7\u53d6\u5806\u9876\u5143\u7d20 */\nint peek = maxHeap.Peek();//5\n/* \u5806\u9876\u5143\u7d20\u51fa\u5806 */\n// \u51fa\u5806\u5143\u7d20\u4f1a\u5f62\u6210\u4e00\u4e2a\u4ece\u5927\u5230\u5c0f\u7684\u5e8f\u5217\npeek = maxHeap.Dequeue();  // 5\npeek = maxHeap.Dequeue();  // 4\npeek = maxHeap.Dequeue();  // 3\npeek = maxHeap.Dequeue();  // 2\npeek = maxHeap.Dequeue();  // 1\n/* \u83b7\u53d6\u5806\u5927\u5c0f */\nint size = maxHeap.Count;\n/* \u5224\u65ad\u5806\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = maxHeap.Count == 0;\n/* \u8f93\u5165\u5217\u8868\u5e76\u5efa\u5806 */\nminHeap = new PriorityQueue<int, int>(new List<(int, int)> { (1, 1), (3, 3), (2, 2), (5, 5), (4, 4), });\n
    heap.swift
    // Swift \u672a\u63d0\u4f9b\u5185\u7f6e heap \u7c7b\n
    heap.zig
    \n
    "},{"location":"chapter_heap/heap/#813","title":"8.1.3. \u00a0 \u5806\u7684\u5b9e\u73b0","text":"

    \u4e0b\u6587\u5b9e\u73b0\u7684\u662f\u300c\u5927\u9876\u5806\u300d\uff0c\u82e5\u60f3\u8f6c\u6362\u4e3a\u300c\u5c0f\u9876\u5806\u300d\uff0c\u5c06\u6240\u6709\u5927\u5c0f\u903b\u8f91\u5224\u65ad\u53d6\u9006\uff08\u4f8b\u5982\u5c06 \\(\\geq\\) \u66ff\u6362\u4e3a \\(\\leq\\) \uff09\u5373\u53ef\uff0c\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u81ea\u884c\u5b9e\u73b0\u3002

    "},{"location":"chapter_heap/heap/#_1","title":"\u5806\u7684\u5b58\u50a8\u4e0e\u8868\u793a","text":"

    \u5728\u4e8c\u53c9\u6811\u7ae0\u8282\u6211\u4eec\u5b66\u8fc7\uff0c\u300c\u5b8c\u5168\u4e8c\u53c9\u6811\u300d\u975e\u5e38\u9002\u5408\u4f7f\u7528\u300c\u6570\u7ec4\u300d\u6765\u8868\u793a\uff0c\u800c\u5806\u6070\u597d\u662f\u4e00\u68f5\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u56e0\u800c\u6211\u4eec\u91c7\u7528\u300c\u6570\u7ec4\u300d\u6765\u5b58\u50a8\u300c\u5806\u300d\u3002

    \u4e8c\u53c9\u6811\u6307\u9488\u3002\u4f7f\u7528\u6570\u7ec4\u8868\u793a\u4e8c\u53c9\u6811\u65f6\uff0c\u5143\u7d20\u4ee3\u8868\u7ed3\u70b9\u503c\uff0c\u7d22\u5f15\u4ee3\u8868\u7ed3\u70b9\u5728\u4e8c\u53c9\u6811\u4e2d\u7684\u4f4d\u7f6e\uff0c\u800c\u7ed3\u70b9\u6307\u9488\u901a\u8fc7\u7d22\u5f15\u6620\u5c04\u516c\u5f0f\u6765\u5b9e\u73b0\u3002

    \u5177\u4f53\u5730\uff0c\u7ed9\u5b9a\u7d22\u5f15 \\(i\\) \uff0c\u90a3\u4e48\u5176\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 1\\) \u3001\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 2\\) \u3001\u7236\u7ed3\u70b9\u7d22\u5f15\u4e3a \\((i - 1) / 2\\) \uff08\u5411\u4e0b\u6574\u9664\uff09\u3002\u5f53\u7d22\u5f15\u8d8a\u754c\u65f6\uff0c\u4ee3\u8868\u7a7a\u7ed3\u70b9\u6216\u7ed3\u70b9\u4e0d\u5b58\u5728\u3002

    Fig. \u5806\u7684\u8868\u793a\u4e0e\u5b58\u50a8

    \u6211\u4eec\u5c06\u7d22\u5f15\u6620\u5c04\u516c\u5f0f\u5c01\u88c5\u6210\u51fd\u6570\uff0c\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint left(int i) {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint right(int i) {\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nint parent(int i) {\nreturn (i - 1) / 2; // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.cpp
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint left(int i) {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint right(int i) {\nreturn 2 * i + 2;\n} /* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nint parent(int i) {\nreturn (i - 1) / 2; // \u5411\u4e0b\u53d6\u6574\n}\n
    my_heap.py
    def left(self, i: int) -> int:\n\"\"\" \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 \"\"\"\nreturn 2 * i + 1\ndef right(self, i: int) -> int:\n\"\"\" \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 \"\"\"\nreturn 2 * i + 2\ndef parent(self, i: int) -> int:\n\"\"\" \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 \"\"\"\nreturn (i - 1) // 2  # \u5411\u4e0b\u6574\u9664\n
    my_heap.go
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc (h *maxHeap) left(i int) int {\nreturn 2*i + 1\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc (h *maxHeap) right(i int) int {\nreturn 2*i + 2\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nfunc (h *maxHeap) parent(i int) int {\n// \u5411\u4e0b\u6574\u9664\nreturn (i - 1) / 2\n}\n
    my_heap.js
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\n#left(i) {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\n#right(i) {\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\n#parent(i) {\nreturn Math.floor((i - 1) / 2); // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.ts
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nleft(i: number): number {\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nright(i: number): number {\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nparent(i: number): number {\nreturn Math.floor((i - 1) / 2); // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{left}\n[class]{maxHeap}-[func]{right}\n[class]{maxHeap}-[func]{parent}\n
    my_heap.cs
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint left(int i)\n{\nreturn 2 * i + 1;\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nint right(int i)\n{\nreturn 2 * i + 2;\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nint parent(int i)\n{\nreturn (i - 1) / 2; // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.swift
    /* \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc left(i: Int) -> Int {\n2 * i + 1\n}\n/* \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15 */\nfunc right(i: Int) -> Int {\n2 * i + 2\n}\n/* \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15 */\nfunc parent(i: Int) -> Int {\n(i - 1) / 2 // \u5411\u4e0b\u6574\u9664\n}\n
    my_heap.zig
    // \u83b7\u53d6\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15\nfn left(i: usize) usize {\nreturn 2 * i + 1;\n}\n// \u83b7\u53d6\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15\nfn right(i: usize) usize {\nreturn 2 * i + 2;\n}\n// \u83b7\u53d6\u7236\u7ed3\u70b9\u7d22\u5f15\nfn parent(i: usize) usize {\n// return (i - 1) / 2; // \u5411\u4e0b\u6574\u9664\nreturn @divFloor(i - 1, 2);\n}\n
    "},{"location":"chapter_heap/heap/#_2","title":"\u8bbf\u95ee\u5806\u9876\u5143\u7d20","text":"

    \u5806\u9876\u5143\u7d20\u662f\u4e8c\u53c9\u6811\u7684\u6839\u7ed3\u70b9\uff0c\u5373\u5217\u8868\u9996\u5143\u7d20\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nint peek() {\nreturn maxHeap.get(0);\n}\n
    my_heap.cpp
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nint peek() {\nreturn maxHeap[0];\n}\n
    my_heap.py
    def peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u5806\u9876\u5143\u7d20 \"\"\"\nreturn self.max_heap[0]\n
    my_heap.go
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nfunc (h *maxHeap) peek() any {\nreturn h.data[0]\n}\n
    my_heap.js
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\npeek() {\nreturn this.#maxHeap[0];\n}\n
    my_heap.ts
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\npeek(): number {\nreturn this.maxHeap[0];\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{peek}\n
    my_heap.cs
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nint peek()\n{\nreturn maxHeap[0];\n}\n
    my_heap.swift
    /* \u8bbf\u95ee\u5806\u9876\u5143\u7d20 */\nfunc peek() -> Int {\nmaxHeap[0]\n}\n
    my_heap.zig
    // \u8bbf\u95ee\u5806\u9876\u5143\u7d20\nfn peek(self: *Self) T {\nreturn self.maxHeap.?.items[0];\n}  
    "},{"location":"chapter_heap/heap/#_3","title":"\u5143\u7d20\u5165\u5806","text":"

    \u7ed9\u5b9a\u5143\u7d20 val \uff0c\u6211\u4eec\u5148\u5c06\u5176\u6dfb\u52a0\u5230\u5806\u5e95\u3002\u6dfb\u52a0\u540e\uff0c\u7531\u4e8e val \u53ef\u80fd\u5927\u4e8e\u5806\u4e2d\u5176\u5b83\u5143\u7d20\uff0c\u6b64\u65f6\u5806\u7684\u6210\u7acb\u6761\u4ef6\u53ef\u80fd\u5df2\u7ecf\u88ab\u7834\u574f\uff0c\u56e0\u6b64\u9700\u8981\u4fee\u590d\u4ece\u63d2\u5165\u7ed3\u70b9\u5230\u6839\u7ed3\u70b9\u8fd9\u6761\u8def\u5f84\u4e0a\u7684\u5404\u4e2a\u7ed3\u70b9\uff0c\u8be5\u64cd\u4f5c\u88ab\u79f0\u4e3a\u300c\u5806\u5316 Heapify\u300d\u3002

    \u8003\u8651\u4ece\u5165\u5806\u7ed3\u70b9\u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u6267\u884c\u5806\u5316\u3002\u5177\u4f53\u5730\uff0c\u6bd4\u8f83\u63d2\u5165\u7ed3\u70b9\u4e0e\u5176\u7236\u7ed3\u70b9\u7684\u503c\uff0c\u82e5\u63d2\u5165\u7ed3\u70b9\u66f4\u5927\u5219\u5c06\u5b83\u4eec\u4ea4\u6362\uff1b\u5e76\u5faa\u73af\u4ee5\u4e0a\u64cd\u4f5c\uff0c\u4ece\u5e95\u81f3\u9876\u5730\u4fee\u590d\u5806\u4e2d\u7684\u5404\u4e2a\u7ed3\u70b9\uff1b\u76f4\u81f3\u8d8a\u8fc7\u6839\u7ed3\u70b9\u65f6\u7ed3\u675f\uff0c\u6216\u5f53\u9047\u5230\u65e0\u9700\u4ea4\u6362\u7684\u7ed3\u70b9\u65f6\u63d0\u524d\u7ed3\u675f\u3002

    <1><2><3><4><5><6>

    \u8bbe\u7ed3\u70b9\u603b\u6570\u4e3a \\(n\\) \uff0c\u5219\u6811\u7684\u9ad8\u5ea6\u4e3a \\(O(\\log n)\\) \uff0c\u6613\u5f97\u5806\u5316\u64cd\u4f5c\u7684\u5faa\u73af\u8f6e\u6570\u6700\u591a\u4e3a \\(O(\\log n)\\) \uff0c\u56e0\u800c\u5143\u7d20\u5165\u5806\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u5143\u7d20\u5165\u5806 */\nvoid push(int val) {\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.add(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nvoid siftUp(int i) {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nint p = parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || maxHeap.get(i) <= maxHeap.get(p))\nbreak;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.cpp
    /* \u5143\u7d20\u5165\u5806 */\nvoid push(int val) {\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.push_back(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nvoid siftUp(int i) {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nint p =  parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || maxHeap[i] <= maxHeap[p])\nbreak;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(maxHeap[i], maxHeap[p]);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.py
    def push(self, val: int):\n\"\"\" \u5143\u7d20\u5165\u5806 \"\"\"\n# \u6dfb\u52a0\u7ed3\u70b9\nself.max_heap.append(val)\n# \u4ece\u5e95\u81f3\u9876\u5806\u5316\nself.sift_up(self.size() - 1)\ndef sift_up(self, i: int):\n\"\"\" \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 \"\"\"\nwhile True:\n# \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\np = self.parent(i)\n# \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif p < 0 or self.max_heap[i] <= self.max_heap[p]:\nbreak\n# \u4ea4\u6362\u4e24\u7ed3\u70b9\nself.swap(i, p)\n# \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p\n
    my_heap.go
    /* \u5143\u7d20\u5165\u5806 */\nfunc (h *maxHeap) push(val any) {\n// \u6dfb\u52a0\u7ed3\u70b9\nh.data = append(h.data, val)\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nh.siftUp(len(h.data) - 1)\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nfunc (h *maxHeap) siftUp(i int) {\nfor true {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\np := h.parent(i)\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif p < 0 || h.data[i].(int) <= h.data[p].(int) {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nh.swap(i, p)\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p\n}\n}\n
    my_heap.js
    /* \u5143\u7d20\u5165\u5806 */\npush(val) {\n// \u6dfb\u52a0\u7ed3\u70b9\nthis.#maxHeap.push(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nthis.#siftUp(this.size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\n#siftUp(i) {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nconst p = this.#parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || this.#maxHeap[i] <= this.#maxHeap[p]) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.#swap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.ts
    /* \u5143\u7d20\u5165\u5806 */\npush(val: number): void {\n// \u6dfb\u52a0\u7ed3\u70b9\nthis.maxHeap.push(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nthis.siftUp(this.size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nsiftUp(i: number): void {\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nconst p = this.parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 || this.maxHeap[i] <= this.maxHeap[p]) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.swap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{push}\n[class]{maxHeap}-[func]{siftUp}\n
    my_heap.cs
    /* \u5143\u7d20\u5165\u5806 */\nvoid push(int val)\n{\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.Add(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(size() - 1);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nvoid siftUp(int i)\n{\nwhile (true)\n{\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nint p = parent(i);\n// \u82e5\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\uff0c\u5219\u7ed3\u675f\u5806\u5316\nif (p < 0 || maxHeap[i] <= maxHeap[p])\nbreak;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    my_heap.swift
    /* \u5143\u7d20\u5165\u5806 */\nfunc push(val: Int) {\n// \u6dfb\u52a0\u7ed3\u70b9\nmaxHeap.append(val)\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\nsiftUp(i: size() - 1)\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316 */\nfunc siftUp(i: Int) {\nvar i = i\nwhile true {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nlet p = parent(i: i)\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif p < 0 || maxHeap[i] <= maxHeap[p] {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i: i, j: p)\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p\n}\n}\n
    my_heap.zig
    // \u5143\u7d20\u5165\u5806\nfn push(self: *Self, val: T) !void {\n// \u6dfb\u52a0\u7ed3\u70b9\ntry self.maxHeap.?.append(val);\n// \u4ece\u5e95\u81f3\u9876\u5806\u5316\ntry self.siftUp(self.size() - 1);\n}  // \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5806\u5316\nfn siftUp(self: *Self, i_: usize) !void {\nvar i = i_;\nwhile (true) {\n// \u83b7\u53d6\u7ed3\u70b9 i \u7684\u7236\u7ed3\u70b9\nvar p = parent(i);\n// \u5f53\u201c\u8d8a\u8fc7\u6839\u7ed3\u70b9\u201d\u6216\u201c\u7ed3\u70b9\u65e0\u9700\u4fee\u590d\u201d\u65f6\uff0c\u7ed3\u675f\u5806\u5316\nif (p < 0 or self.maxHeap.?.items[i] <= self.maxHeap.?.items[p]) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\ntry self.swap(i, p);\n// \u5faa\u73af\u5411\u4e0a\u5806\u5316\ni = p;\n}\n}\n
    "},{"location":"chapter_heap/heap/#_4","title":"\u5806\u9876\u5143\u7d20\u51fa\u5806","text":"

    \u5806\u9876\u5143\u7d20\u662f\u4e8c\u53c9\u6811\u6839\u7ed3\u70b9\uff0c\u5373\u5217\u8868\u9996\u5143\u7d20\uff0c\u5982\u679c\u6211\u4eec\u76f4\u63a5\u5c06\u9996\u5143\u7d20\u4ece\u5217\u8868\u4e2d\u5220\u9664\uff0c\u5219\u4e8c\u53c9\u6811\u4e2d\u6240\u6709\u7ed3\u70b9\u90fd\u4f1a\u968f\u4e4b\u53d1\u751f\u79fb\u4f4d\uff08\u7d22\u5f15\u53d1\u751f\u53d8\u5316\uff09\uff0c\u8fd9\u6837\u540e\u7eed\u4f7f\u7528\u5806\u5316\u4fee\u590d\u5c31\u5f88\u9ebb\u70e6\u4e86\u3002\u4e3a\u4e86\u5c3d\u91cf\u51cf\u5c11\u5143\u7d20\u7d22\u5f15\u53d8\u52a8\uff0c\u91c7\u53d6\u4ee5\u4e0b\u64cd\u4f5c\u6b65\u9aa4\uff1a

    1. \u4ea4\u6362\u5806\u9876\u5143\u7d20\u4e0e\u5806\u5e95\u5143\u7d20\uff08\u5373\u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff09\uff1b
    2. \u4ea4\u6362\u5b8c\u6210\u540e\uff0c\u5c06\u5806\u5e95\u4ece\u5217\u8868\u4e2d\u5220\u9664\uff08\u6ce8\u610f\uff0c\u56e0\u4e3a\u5df2\u7ecf\u4ea4\u6362\uff0c\u5b9e\u9645\u4e0a\u5220\u9664\u7684\u662f\u539f\u6765\u7684\u5806\u9876\u5143\u7d20\uff09\uff1b
    3. \u4ece\u6839\u7ed3\u70b9\u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u6267\u884c\u5806\u5316\uff1b

    \u987e\u540d\u601d\u4e49\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316\u7684\u64cd\u4f5c\u65b9\u5411\u4e0e\u4ece\u5e95\u81f3\u9876\u5806\u5316\u76f8\u53cd\uff0c\u6211\u4eec\u6bd4\u8f83\u6839\u7ed3\u70b9\u7684\u503c\u4e0e\u5176\u4e24\u4e2a\u5b50\u7ed3\u70b9\u7684\u503c\uff0c\u5c06\u6700\u5927\u7684\u5b50\u7ed3\u70b9\u4e0e\u6839\u7ed3\u70b9\u6267\u884c\u4ea4\u6362\uff0c\u5e76\u5faa\u73af\u4ee5\u4e0a\u64cd\u4f5c\uff0c\u76f4\u5230\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u65f6\u7ed3\u675f\uff0c\u6216\u5f53\u9047\u5230\u65e0\u9700\u4ea4\u6362\u7684\u7ed3\u70b9\u65f6\u63d0\u524d\u7ed3\u675f\u3002

    <1><2><3><4><5><6><7><8><9><10>

    \u4e0e\u5143\u7d20\u5165\u5806\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u5806\u9876\u5143\u7d20\u51fa\u5806\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig my_heap.java
    /* \u5143\u7d20\u51fa\u5806 */\nint poll() {\n// \u5224\u7a7a\u5904\u7406\nif (isEmpty())\nthrow new EmptyStackException();\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(0, size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nint val = maxHeap.remove(size() - 1);\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nvoid siftDown(int i) {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nint l = left(i), r = right(i), ma = i;\nif (l < size() && maxHeap.get(l) > maxHeap.get(ma))\nma = l;\nif (r < size() && maxHeap.get(r) > maxHeap.get(ma))\nma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.cpp
    /* \u5143\u7d20\u51fa\u5806 */\nvoid poll() {\n// \u5224\u7a7a\u5904\u7406\nif (empty()) {\nthrow out_of_range(\"\u5806\u4e3a\u7a7a\");\n}\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(maxHeap[0], maxHeap[size() - 1]);\n// \u5220\u9664\u7ed3\u70b9\nmaxHeap.pop_back();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(0);\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nvoid siftDown(int i) {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nint l = left(i), r = right(i), ma = i;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (l < size() && maxHeap[l] > maxHeap[ma]) ma = l;\nif (r < size() && maxHeap[r] > maxHeap[ma])\nma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\nswap(maxHeap[i], maxHeap[ma]);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.py
    def poll(self) -> int:\n\"\"\" \u5143\u7d20\u51fa\u5806 \"\"\"\n# \u5224\u7a7a\u5904\u7406\nassert not self.is_empty()\n# \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nself.swap(0, self.size() - 1)\n# \u5220\u9664\u7ed3\u70b9\nval = self.max_heap.pop()\n# \u4ece\u9876\u81f3\u5e95\u5806\u5316\nself.sift_down(0)\n# \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val\ndef sift_down(self, i: int):\n\"\"\" \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 \"\"\"\nwhile True:\n# \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nl, r, ma = self.left(i), self.right(i), i\nif l < self.size() and self.max_heap[l] > self.max_heap[ma]:\nma = l\nif r < self.size() and self.max_heap[r] > self.max_heap[ma]:\nma = r\n# \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif ma == i:\nbreak\n# \u4ea4\u6362\u4e24\u7ed3\u70b9\nself.swap(i, ma)\n# \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma\n
    my_heap.go
    /* \u5143\u7d20\u51fa\u5806 */\nfunc (h *maxHeap) poll() any {\n// \u5224\u7a7a\u5904\u7406\nif h.isEmpty() {\nfmt.Println(\"error\")\nreturn nil\n}\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nh.swap(0, h.size()-1)\n// \u5220\u9664\u7ed3\u70b9\nval := h.data[len(h.data)-1]\nh.data = h.data[:len(h.data)-1]\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nh.siftDown(0)\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nfunc (h *maxHeap) siftDown(i int) {\nfor true {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a max\nl, r, max := h.left(i), h.right(i), i\nif l < h.size() && h.data[l].(int) > h.data[max].(int) {\nmax = l\n}\nif r < h.size() && h.data[r].(int) > h.data[max].(int) {\nmax = r\n}\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif max == i {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nh.swap(i, max)\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = max\n}\n}\n
    my_heap.js
    /* \u5143\u7d20\u51fa\u5806 */\npoll() {\n// \u5224\u7a7a\u5904\u7406\nif (this.isEmpty()) throw new Error(\"\u5806\u4e3a\u7a7a\");\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nthis.#swap(0, this.size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nconst val = this.#maxHeap.pop();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nthis.#siftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\n#siftDown(i) {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nconst l = this.#left(i),\nr = this.#right(i);\nlet ma = i;\nif (l < this.size() && this.#maxHeap[l] > this.#maxHeap[ma]) ma = l;\nif (r < this.size() && this.#maxHeap[r] > this.#maxHeap[ma]) ma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.#swap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.ts
    /* \u5143\u7d20\u51fa\u5806 */\npoll(): number {\n// \u5224\u7a7a\u5904\u7406\nif (this.isEmpty()) throw new RangeError('Heap is empty.');\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nthis.swap(0, this.size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nconst val = this.maxHeap.pop();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nthis.siftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nsiftDown(i: number): void {\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nconst l = this.left(i),\nr = this.right(i);\nlet ma = i;\nif (l < this.size() && this.maxHeap[l] > this.maxHeap[ma]) ma = l;\nif (r < this.size() && this.maxHeap[r] > this.maxHeap[ma]) ma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nthis.swap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.c
    [class]{maxHeap}-[func]{poll}\n[class]{maxHeap}-[func]{siftDown}\n
    my_heap.cs
    /* \u5143\u7d20\u51fa\u5806 */\nint poll()\n{\n// \u5224\u7a7a\u5904\u7406\nif (isEmpty())\nthrow new IndexOutOfRangeException();\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(0, size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nint val = maxHeap.Last();\nmaxHeap.RemoveAt(size() - 1);\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nvoid siftDown(int i)\n{\nwhile (true)\n{\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nint l = left(i), r = right(i), ma = i;\nif (l < size() && maxHeap[l] > maxHeap[ma])\nma = l;\nif (r < size() && maxHeap[r] > maxHeap[ma])\nma = r;\n// \u82e5\u201c\u7ed3\u70b9 i \u6700\u5927\u201d\u6216\u201c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u201d\uff0c\u5219\u7ed3\u675f\u5806\u5316\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    my_heap.swift
    /* \u5143\u7d20\u51fa\u5806 */\nfunc poll() -> Int {\n// \u5224\u7a7a\u5904\u7406\nif isEmpty() {\nfatalError(\"\u5806\u4e3a\u7a7a\")\n}\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\nswap(i: 0, j: size() - 1)\n// \u5220\u9664\u7ed3\u70b9\nlet val = maxHeap.remove(at: size() - 1)\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\nsiftDown(i: 0)\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val\n}\n/* \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316 */\nfunc siftDown(i: Int) {\nvar i = i\nwhile true {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nlet l = left(i: i)\nlet r = right(i: i)\nvar ma = i\nif l < size(), maxHeap[l] > maxHeap[ma] {\nma = l\n}\nif r < size(), maxHeap[r] > maxHeap[ma] {\nma = r\n}\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif ma == i {\nbreak\n}\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\nswap(i: i, j: ma)\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma\n}\n}\n
    my_heap.zig
    // \u5143\u7d20\u51fa\u5806\nfn poll(self: *Self) !T {\n// \u5224\u65ad\u5904\u7406\nif (self.isEmpty()) unreachable;\n// \u4ea4\u6362\u6839\u7ed3\u70b9\u4e0e\u6700\u53f3\u53f6\u7ed3\u70b9\uff08\u5373\u4ea4\u6362\u9996\u5143\u7d20\u4e0e\u5c3e\u5143\u7d20\uff09\ntry self.swap(0, self.size() - 1);\n// \u5220\u9664\u7ed3\u70b9\nvar val = self.maxHeap.?.pop();\n// \u4ece\u9876\u81f3\u5e95\u5806\u5316\ntry self.siftDown(0);\n// \u8fd4\u56de\u5806\u9876\u5143\u7d20\nreturn val;\n} // \u4ece\u7ed3\u70b9 i \u5f00\u59cb\uff0c\u4ece\u9876\u81f3\u5e95\u5806\u5316\nfn siftDown(self: *Self, i_: usize) !void {\nvar i = i_;\nwhile (true) {\n// \u5224\u65ad\u7ed3\u70b9 i, l, r \u4e2d\u503c\u6700\u5927\u7684\u7ed3\u70b9\uff0c\u8bb0\u4e3a ma\nvar l = left(i);\nvar r = right(i);\nvar ma = i;\nif (l < self.size() and self.maxHeap.?.items[l] > self.maxHeap.?.items[ma]) ma = l;\nif (r < self.size() and self.maxHeap.?.items[r] > self.maxHeap.?.items[ma]) ma = r;\n// \u82e5\u7ed3\u70b9 i \u6700\u5927\u6216\u7d22\u5f15 l, r \u8d8a\u754c\uff0c\u5219\u65e0\u9700\u7ee7\u7eed\u5806\u5316\uff0c\u8df3\u51fa\nif (ma == i) break;\n// \u4ea4\u6362\u4e24\u7ed3\u70b9\ntry self.swap(i, ma);\n// \u5faa\u73af\u5411\u4e0b\u5806\u5316\ni = ma;\n}\n}\n
    "},{"location":"chapter_heap/heap/#814","title":"8.1.4. \u00a0 \u5806\u5e38\u89c1\u5e94\u7528","text":"
    • \u4f18\u5148\u961f\u5217\u3002\u5806\u5e38\u4f5c\u4e3a\u5b9e\u73b0\u4f18\u5148\u961f\u5217\u7684\u9996\u9009\u6570\u636e\u7ed3\u6784\uff0c\u5165\u961f\u548c\u51fa\u961f\u64cd\u4f5c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(\\log n)\\) \uff0c\u5efa\u961f\u64cd\u4f5c\u4e3a \\(O(n)\\) \uff0c\u7686\u975e\u5e38\u9ad8\u6548\u3002
    • \u5806\u6392\u5e8f\u3002\u7ed9\u5b9a\u4e00\u7ec4\u6570\u636e\uff0c\u6211\u4eec\u4f7f\u7528\u5176\u5efa\u5806\uff0c\u5e76\u4f9d\u6b21\u5168\u90e8\u5f39\u51fa\uff0c\u5219\u53ef\u4ee5\u5f97\u5230\u6709\u5e8f\u7684\u5e8f\u5217\u3002\u5f53\u7136\uff0c\u5806\u6392\u5e8f\u4e00\u822c\u65e0\u9700\u5f39\u51fa\u5143\u7d20\uff0c\u4ec5\u9700\u6bcf\u8f6e\u5c06\u5806\u9876\u5143\u7d20\u4ea4\u6362\u81f3\u6570\u7ec4\u5c3e\u90e8\u5e76\u51cf\u5c0f\u5806\u7684\u957f\u5ea6\u5373\u53ef\u3002
    • \u83b7\u53d6\u6700\u5927\u7684 \\(k\\) \u4e2a\u5143\u7d20\u3002\u8fd9\u65e2\u662f\u4e00\u9053\u7ecf\u5178\u7b97\u6cd5\u9898\u76ee\uff0c\u4e5f\u662f\u4e00\u79cd\u5e38\u89c1\u5e94\u7528\uff0c\u4f8b\u5982\u9009\u53d6\u70ed\u5ea6\u524d 10 \u7684\u65b0\u95fb\u4f5c\u4e3a\u5fae\u535a\u70ed\u641c\uff0c\u9009\u53d6\u524d 10 \u9500\u91cf\u7684\u5546\u54c1\u7b49\u3002
    "},{"location":"chapter_heap/summary/","title":"8.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u5806\u662f\u4e00\u68f5\u9650\u5b9a\u6761\u4ef6\u4e0b\u7684\u5b8c\u5168\u4e8c\u53c9\u6811\uff0c\u6839\u636e\u6210\u7acb\u6761\u4ef6\u53ef\u5206\u4e3a\u5927\u9876\u5806\u548c\u5c0f\u9876\u5806\u3002\u5927\uff08\u5c0f\uff09\u9876\u5806\u7684\u5806\u9876\u5143\u7d20\u6700\u5927\uff08\u5c0f\uff09\u3002
    • \u4f18\u5148\u961f\u5217\u5b9a\u4e49\u4e3a\u4e00\u79cd\u5177\u6709\u51fa\u961f\u4f18\u5148\u7ea7\u7684\u961f\u5217\u3002\u5806\u662f\u5b9e\u73b0\u4f18\u5148\u961f\u5217\u7684\u6700\u5e38\u7528\u6570\u636e\u7ed3\u6784\u3002
    • \u5806\u7684\u5e38\u7528\u64cd\u4f5c\u548c\u5bf9\u5e94\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a\u5143\u7d20\u5165\u5806 \\(O(\\log n)\\) \u3001\u5806\u9876\u5143\u7d20\u51fa\u5806 \\(O(\\log n)\\) \u3001\u8bbf\u95ee\u5806\u9876\u5143\u7d20 \\(O(1)\\) \u7b49\u3002
    • \u5b8c\u5168\u4e8c\u53c9\u6811\u975e\u5e38\u9002\u5408\u7528\u6570\u7ec4\u6765\u8868\u793a\uff0c\u56e0\u6b64\u6211\u4eec\u4e00\u822c\u7528\u6570\u7ec4\u6765\u5b58\u50a8\u5806\u3002
    • \u5806\u5316\u64cd\u4f5c\u7528\u4e8e\u4fee\u590d\u5806\u7684\u7279\u6027\uff0c\u5728\u5165\u5806\u548c\u51fa\u5806\u64cd\u4f5c\u4e2d\u90fd\u4f1a\u4f7f\u7528\u5230\u3002
    • \u8f93\u5165 \\(n\\) \u4e2a\u5143\u7d20\u5e76\u5efa\u5806\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u53ef\u4ee5\u88ab\u4f18\u5316\u81f3 \\(O(n)\\) \uff0c\u975e\u5e38\u9ad8\u6548\u3002
    "},{"location":"chapter_introduction/algorithms_are_everywhere/","title":"1.1. \u00a0 \u7b97\u6cd5\u65e0\u5904\u4e0d\u5728","text":"

    \u542c\u5230\u201c\u7b97\u6cd5\u201d\u8fd9\u4e2a\u8bcd\uff0c\u6211\u4eec\u4e00\u822c\u4f1a\u8054\u60f3\u5230\u6570\u5b66\u3002\u4f46\u5b9e\u9645\u4e0a\uff0c\u5927\u591a\u6570\u7b97\u6cd5\u5e76\u4e0d\u5305\u542b\u590d\u6742\u7684\u6570\u5b66\uff0c\u800c\u66f4\u50cf\u662f\u5728\u8003\u5bdf\u57fa\u672c\u903b\u8f91\uff0c\u800c\u8fd9\u4e9b\u903b\u8f91\u5728\u6211\u4eec\u65e5\u5e38\u751f\u6d3b\u4e2d\u5904\u5904\u53ef\u89c1\u3002

    \u5728\u6b63\u5f0f\u4ecb\u7ecd\u7b97\u6cd5\u4e4b\u524d\uff0c\u6211\u60f3\u544a\u8bc9\u4f60\u4e00\u4ef6\u6709\u8da3\u7684\u4e8b\uff1a\u5176\u5b9e\uff0c\u4f60\u5728\u8fc7\u53bb\u5df2\u7ecf\u5b66\u4f1a\u4e86\u5f88\u591a\u7b97\u6cd5\uff0c\u5e76\u4e14\u5df2\u7ecf\u4e60\u60ef\u5c06\u5b83\u4eec\u5e94\u7528\u5230\u65e5\u5e38\u751f\u6d3b\u4e2d\u3002\u63a5\u4e0b\u6765\uff0c\u6211\u5c06\u4ecb\u7ecd\u4e24\u4e2a\u5177\u4f53\u4f8b\u5b50\u6765\u4f50\u8bc1\u3002

    \u4f8b\u4e00\uff1a\u62fc\u79ef\u6728\u3002\u4e00\u5957\u79ef\u6728\uff0c\u9664\u4e86\u6709\u8bb8\u591a\u90e8\u4ef6\u4e4b\u5916\uff0c\u8fd8\u4f1a\u9644\u9001\u8be6\u7ec6\u7684\u62fc\u88c5\u8bf4\u660e\u4e66\u3002\u6211\u4eec\u6309\u7167\u8bf4\u660e\u4e66\u4e0a\u4e00\u6b65\u6b65\u64cd\u4f5c\uff0c\u5373\u53ef\u62fc\u51fa\u590d\u6742\u7684\u79ef\u6728\u6a21\u578b\u3002

    \u5982\u679c\u4ece\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u89d2\u5ea6\u770b\uff0c\u5927\u5927\u5c0f\u5c0f\u7684\u300c\u79ef\u6728\u300d\u5c31\u662f\u6570\u636e\u7ed3\u6784\uff0c\u800c\u300c\u62fc\u88c5\u8bf4\u660e\u4e66\u300d\u4e0a\u7684\u4e00\u7cfb\u5217\u6b65\u9aa4\u5c31\u662f\u7b97\u6cd5\u3002

    \u4f8b\u4e8c\uff1a\u67e5\u5b57\u5178\u3002\u5728\u5b57\u5178\u4e2d\uff0c\u6bcf\u4e2a\u6c49\u5b57\u90fd\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684\u62fc\u97f3\uff0c\u800c\u5b57\u5178\u662f\u6309\u7167\u62fc\u97f3\u7684\u82f1\u6587\u5b57\u6bcd\u8868\u987a\u5e8f\u6392\u5217\u7684\u3002\u5047\u8bbe\u9700\u8981\u5728\u5b57\u5178\u4e2d\u67e5\u8be2\u4efb\u610f\u4e00\u4e2a\u62fc\u97f3\u9996\u5b57\u6bcd\u4e3a \\(r\\) \u7684\u5b57\uff0c\u4e00\u822c\u6211\u4eec\u4f1a\u8fd9\u6837\u505a\uff1a

    1. \u6253\u5f00\u5b57\u5178\u5927\u81f4\u4e00\u534a\u9875\u6570\u7684\u4f4d\u7f6e\uff0c\u67e5\u770b\u6b64\u9875\u7684\u9996\u5b57\u6bcd\u662f\u4ec0\u4e48\uff08\u5047\u8bbe\u4e3a \\(m\\) \uff09\uff1b
    2. \u7531\u4e8e\u5728\u82f1\u6587\u5b57\u6bcd\u8868\u4e2d \\(r\\) \u5728 \\(m\\) \u7684\u540e\u9762\uff0c\u56e0\u6b64\u5e94\u6392\u9664\u5b57\u5178\u524d\u534a\u90e8\u5206\uff0c\u67e5\u627e\u8303\u56f4\u4ec5\u5269\u540e\u534a\u90e8\u5206\uff1b
    3. \u5faa\u73af\u6267\u884c\u6b65\u9aa4 1-2 \uff0c\u76f4\u5230\u627e\u5230\u62fc\u97f3\u9996\u5b57\u6bcd\u4e3a \\(r\\) \u7684\u9875\u7801\u65f6\u7ec8\u6b62\u3002
    <1><2><3><4><5>

    \u67e5\u5b57\u5178\u8fd9\u4e2a\u5c0f\u5b66\u751f\u7684\u6807\u914d\u6280\u80fd\uff0c\u5b9e\u9645\u4e0a\u5c31\u662f\u5927\u540d\u9f0e\u9f0e\u7684\u300c\u4e8c\u5206\u67e5\u627e\u300d\u3002\u4ece\u6570\u636e\u7ed3\u6784\u89d2\u5ea6\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u5b57\u5178\u770b\u4f5c\u662f\u4e00\u4e2a\u5df2\u6392\u5e8f\u7684\u300c\u6570\u7ec4\u300d\uff1b\u800c\u4ece\u7b97\u6cd5\u89d2\u5ea6\uff0c\u6211\u4eec\u53ef\u5c06\u4e0a\u8ff0\u67e5\u5b57\u5178\u7684\u4e00\u7cfb\u5217\u6307\u4ee4\u770b\u4f5c\u662f\u300c\u4e8c\u5206\u67e5\u627e\u300d\u7b97\u6cd5\u3002

    \u5c0f\u5230\u70f9\u996a\u4e00\u9053\u83dc\u3001\u5927\u5230\u661f\u9645\u822a\u884c\uff0c\u51e0\u4e4e\u6240\u6709\u95ee\u9898\u7684\u89e3\u51b3\u90fd\u79bb\u4e0d\u5f00\u7b97\u6cd5\u3002\u8ba1\u7b97\u673a\u7684\u51fa\u73b0\uff0c\u4f7f\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u7f16\u7a0b\u5c06\u6570\u636e\u7ed3\u6784\u5b58\u50a8\u5728\u5185\u5b58\u4e2d\uff0c\u4e5f\u53ef\u4ee5\u7f16\u5199\u4ee3\u7801\u6765\u8c03\u7528 CPU, GPU \u6267\u884c\u7b97\u6cd5\uff0c\u4ece\u800c\u5c06\u751f\u6d3b\u4e2d\u7684\u95ee\u9898\u642c\u8fd0\u5230\u8ba1\u7b97\u673a\u4e2d\uff0c\u66f4\u52a0\u9ad8\u6548\u5730\u89e3\u51b3\u5404\u5f0f\u5404\u6837\u7684\u590d\u6742\u95ee\u9898\u3002

    Tip

    \u8bfb\u5230\u8fd9\u91cc\uff0c\u5982\u679c\u4f60\u611f\u5230\u5bf9\u6570\u636e\u7ed3\u6784\u3001\u7b97\u6cd5\u3001\u6570\u7ec4\u3001\u4e8c\u5206\u67e5\u627e\u7b49\u6b64\u7c7b\u6982\u5ff5\u4e00\u77e5\u534a\u89e3\uff0c\u90a3\u4e48\u5c31\u592a\u597d\u4e86\uff01\u56e0\u4e3a\u8fd9\u6b63\u662f\u672c\u4e66\u5b58\u5728\u7684\u4ef7\u503c\uff0c\u63a5\u4e0b\u6765\uff0c\u672c\u4e66\u5c06\u4f1a\u4e00\u6b65\u6b65\u5730\u5f15\u5bfc\u4f60\u8fdb\u5165\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u77e5\u8bc6\u6bbf\u5802\u3002

    "},{"location":"chapter_introduction/summary/","title":"1.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u7b97\u6cd5\u5728\u751f\u6d3b\u4e2d\u968f\u5904\u53ef\u89c1\uff0c\u5e76\u4e0d\u9ad8\u6df1\u83ab\u6d4b\u3002\u6211\u4eec\u5df2\u7ecf\u4e0d\u77e5\u4e0d\u89c9\u5730\u5b66\u4e60\u5230\u8bb8\u591a\u201c\u7b97\u6cd5\u201d\uff0c\u7528\u4e8e\u89e3\u51b3\u751f\u6d3b\u4e2d\u5927\u5927\u5c0f\u5c0f\u7684\u95ee\u9898\u3002
    • \u201c\u67e5\u5b57\u5178\u201d\u7684\u539f\u7406\u548c\u4e8c\u5206\u67e5\u627e\u7b97\u6cd5\u4e00\u81f4\u3002\u4e8c\u5206\u4f53\u73b0\u5206\u800c\u6cbb\u4e4b\u7684\u91cd\u8981\u7b97\u6cd5\u601d\u60f3\u3002
    • \u7b97\u6cd5\u662f\u5728\u6709\u9650\u65f6\u95f4\u5185\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u7684\u4e00\u7ec4\u6307\u4ee4\u6216\u64cd\u4f5c\u6b65\u9aa4\uff0c\u6570\u636e\u7ed3\u6784\u662f\u5728\u8ba1\u7b97\u673a\u4e2d\u7ec4\u7ec7\u4e0e\u5b58\u50a8\u6570\u636e\u7684\u65b9\u5f0f\u3002
    • \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e24\u8005\u7d27\u5bc6\u8054\u7cfb\u3002\u6570\u636e\u7ed3\u6784\u662f\u7b97\u6cd5\u7684\u5e95\u5ea7\uff0c\u7b97\u6cd5\u662f\u53d1\u6325\u6570\u636e\u7ed3\u6784\u7684\u821e\u53f0\u3002
    • \u4e50\u9ad8\u79ef\u6728\u5bf9\u5e94\u6570\u636e\uff0c\u79ef\u6728\u5f62\u72b6\u548c\u8fde\u63a5\u5f62\u5f0f\u5bf9\u5e94\u6570\u636e\u7ed3\u6784\uff0c\u62fc\u88c5\u79ef\u6728\u7684\u6d41\u7a0b\u6b65\u9aa4\u5bf9\u5e94\u7b97\u6cd5\u3002
    "},{"location":"chapter_introduction/what_is_dsa/","title":"1.2. \u00a0 \u7b97\u6cd5\u662f\u4ec0\u4e48","text":""},{"location":"chapter_introduction/what_is_dsa/#121","title":"1.2.1. \u00a0 \u7b97\u6cd5\u5b9a\u4e49","text":"

    \u300c\u7b97\u6cd5 Algorithm\u300d\u662f\u5728\u6709\u9650\u65f6\u95f4\u5185\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u7684\u4e00\u7ec4\u6307\u4ee4\u6216\u64cd\u4f5c\u6b65\u9aa4\u3002\u7b97\u6cd5\u5177\u6709\u4ee5\u4e0b\u7279\u6027\uff1a

    • \u95ee\u9898\u662f\u660e\u786e\u7684\uff0c\u9700\u8981\u62e5\u6709\u660e\u786e\u7684\u8f93\u5165\u548c\u8f93\u51fa\u5b9a\u4e49\u3002
    • \u89e3\u5177\u6709\u786e\u5b9a\u6027\uff0c\u5373\u7ed9\u5b9a\u76f8\u540c\u8f93\u5165\u65f6\uff0c\u8f93\u51fa\u4e00\u5b9a\u76f8\u540c\u3002
    • \u5177\u6709\u53ef\u884c\u6027\uff0c\u53ef\u5728\u6709\u9650\u6b65\u9aa4\u3001\u6709\u9650\u65f6\u95f4\u3001\u6709\u9650\u5185\u5b58\u7a7a\u95f4\u4e0b\u5b8c\u6210\u3002
    • \u72ec\u7acb\u4e8e\u7f16\u7a0b\u8bed\u8a00\uff0c\u5373\u53ef\u7528\u591a\u79cd\u8bed\u8a00\u5b9e\u73b0\u3002
    "},{"location":"chapter_introduction/what_is_dsa/#122","title":"1.2.2. \u00a0 \u6570\u636e\u7ed3\u6784\u5b9a\u4e49","text":"

    \u300c\u6570\u636e\u7ed3\u6784 Data Structure\u300d\u662f\u5728\u8ba1\u7b97\u673a\u4e2d\u7ec4\u7ec7\u4e0e\u5b58\u50a8\u6570\u636e\u7684\u65b9\u5f0f\u3002\u4e3a\u4e86\u63d0\u9ad8\u6570\u636e\u5b58\u50a8\u548c\u64cd\u4f5c\u6027\u80fd\uff0c\u6570\u636e\u7ed3\u6784\u7684\u8bbe\u8ba1\u539f\u5219\u6709\uff1a

    • \u7a7a\u95f4\u5360\u7528\u5c3d\u53ef\u80fd\u5c0f\uff0c\u8282\u7701\u8ba1\u7b97\u673a\u5185\u5b58\u3002
    • \u6570\u636e\u64cd\u4f5c\u5c3d\u91cf\u5feb\uff0c\u5305\u62ec\u6570\u636e\u8bbf\u95ee\u3001\u6dfb\u52a0\u3001\u5220\u9664\u3001\u66f4\u65b0\u7b49\u3002
    • \u63d0\u4f9b\u7b80\u6d01\u7684\u6570\u636e\u8868\u793a\u548c\u903b\u8f91\u4fe1\u606f\uff0c\u4ee5\u4fbf\u7b97\u6cd5\u9ad8\u6548\u8fd0\u884c\u3002

    \u6570\u636e\u7ed3\u6784\u7684\u8bbe\u8ba1\u662f\u4e00\u4e2a\u5145\u6ee1\u6743\u8861\u7684\u8fc7\u7a0b\uff0c\u8fd9\u610f\u5473\u7740\u5982\u679c\u83b7\u5f97\u67d0\u65b9\u9762\u7684\u4f18\u52bf\uff0c\u5219\u5f80\u5f80\u9700\u8981\u5728\u53e6\u4e00\u65b9\u9762\u505a\u51fa\u59a5\u534f\u3002\u4f8b\u5982\uff0c\u94fe\u8868\u76f8\u5bf9\u4e8e\u6570\u7ec4\uff0c\u6570\u636e\u6dfb\u52a0\u5220\u9664\u64cd\u4f5c\u66f4\u52a0\u65b9\u4fbf\uff0c\u4f46\u727a\u7272\u4e86\u6570\u636e\u7684\u8bbf\u95ee\u901f\u5ea6\uff1b\u56fe\u76f8\u5bf9\u4e8e\u94fe\u8868\uff0c\u63d0\u4f9b\u4e86\u66f4\u591a\u7684\u903b\u8f91\u4fe1\u606f\uff0c\u4f46\u9700\u8981\u5360\u7528\u66f4\u591a\u7684\u5185\u5b58\u7a7a\u95f4\u3002

    "},{"location":"chapter_introduction/what_is_dsa/#123","title":"1.2.3. \u00a0 \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u5173\u7cfb","text":"

    \u300c\u6570\u636e\u7ed3\u6784\u300d\u4e0e\u300c\u7b97\u6cd5\u300d\u662f\u9ad8\u5ea6\u76f8\u5173\u3001\u7d27\u5bc6\u5d4c\u5408\u7684\uff0c\u4f53\u73b0\u5728\uff1a

    • \u6570\u636e\u7ed3\u6784\u662f\u7b97\u6cd5\u7684\u5e95\u5ea7\u3002\u6570\u636e\u7ed3\u6784\u4e3a\u7b97\u6cd5\u63d0\u4f9b\u7ed3\u6784\u5316\u5b58\u50a8\u7684\u6570\u636e\uff0c\u4ee5\u53ca\u64cd\u4f5c\u6570\u636e\u7684\u5bf9\u5e94\u65b9\u6cd5\u3002
    • \u7b97\u6cd5\u662f\u6570\u636e\u7ed3\u6784\u53d1\u6325\u7684\u821e\u53f0\u3002\u6570\u636e\u7ed3\u6784\u4ec5\u5b58\u50a8\u6570\u636e\u4fe1\u606f\uff0c\u7ed3\u5408\u7b97\u6cd5\u624d\u53ef\u89e3\u51b3\u7279\u5b9a\u95ee\u9898\u3002
    • \u7b97\u6cd5\u6709\u5bf9\u5e94\u6700\u4f18\u7684\u6570\u636e\u7ed3\u6784\u3002\u7ed9\u5b9a\u7b97\u6cd5\uff0c\u4e00\u822c\u53ef\u57fa\u4e8e\u4e0d\u540c\u7684\u6570\u636e\u7ed3\u6784\u5b9e\u73b0\uff0c\u800c\u6700\u7ec8\u6267\u884c\u6548\u7387\u5f80\u5f80\u76f8\u5dee\u5f88\u5927\u3002

    Fig. \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u5173\u7cfb

    \u5982\u679c\u5c06\u300cLEGO \u4e50\u9ad8\u300d\u7c7b\u6bd4\u5230\u300c\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u300d\uff0c\u90a3\u4e48\u53ef\u4ee5\u5f97\u5230\u4e0b\u8868\u6240\u793a\u7684\u5bf9\u5e94\u5173\u7cfb\u3002

    \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5 LEGO \u4e50\u9ad8 \u8f93\u5165\u6570\u636e \u672a\u62fc\u88c5\u7684\u79ef\u6728 \u6570\u636e\u7ed3\u6784 \u79ef\u6728\u7ec4\u7ec7\u5f62\u5f0f\uff0c\u5305\u62ec\u5f62\u72b6\u3001\u5927\u5c0f\u3001\u8fde\u63a5\u65b9\u5f0f\u7b49 \u7b97\u6cd5 \u628a\u79ef\u6728\u62fc\u6210\u76ee\u6807\u5f62\u6001\u7684\u4e00\u7cfb\u5217\u64cd\u4f5c\u6b65\u9aa4 \u8f93\u51fa\u6570\u636e \u79ef\u6728\u6a21\u578b

    \u7ea6\u5b9a\u4fd7\u6210\u7684\u7b80\u79f0

    \u5728\u5b9e\u9645\u8ba8\u8bba\u4e2d\uff0c\u6211\u4eec\u901a\u5e38\u4f1a\u5c06\u300c\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u300d\u76f4\u63a5\u7b80\u79f0\u4e3a\u300c\u7b97\u6cd5\u300d\u3002\u4f8b\u5982\uff0c\u6211\u4eec\u719f\u79f0\u7684 LeetCode \u7b97\u6cd5\u9898\u76ee\uff0c\u5b9e\u9645\u4e0a\u540c\u65f6\u8003\u5bdf\u4e86\u6570\u636e\u7ed3\u6784\u548c\u7b97\u6cd5\u4e24\u90e8\u5206\u77e5\u8bc6\u3002

    "},{"location":"chapter_preface/about_the_book/","title":"0.1. \u00a0 \u5173\u4e8e\u672c\u4e66","text":"

    \u672c\u9879\u76ee\u81f4\u529b\u4e8e\u6784\u5efa\u4e00\u672c\u5f00\u6e90\u514d\u8d39\u3001\u65b0\u624b\u53cb\u597d\u7684\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5165\u95e8\u4e66\u3002

    • \u5168\u4e66\u91c7\u7528\u52a8\u753b\u56fe\u89e3\uff0c\u7ed3\u6784\u5316\u5730\u8bb2\u89e3\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u77e5\u8bc6\uff0c\u5185\u5bb9\u6e05\u6670\u6613\u61c2\u3001\u5b66\u4e60\u66f2\u7ebf\u5e73\u6ed1\uff1b
    • \u7b97\u6cd5\u6e90\u4ee3\u7801\u7686\u53ef\u4e00\u952e\u8fd0\u884c\uff0c\u652f\u6301 Java, C++, Python, Go, JS, TS, C#, Swift, Zig \u7b49\u8bed\u8a00\uff1b
    • \u9f13\u52b1\u8bfb\u8005\u5728\u7ae0\u8282\u8ba8\u8bba\u533a\u4e92\u5e2e\u4e92\u52a9\u3001\u5171\u540c\u8fdb\u6b65\uff0c\u63d0\u95ee\u4e0e\u8bc4\u8bba\u4e00\u822c\u80fd\u5728\u4e24\u65e5\u5185\u5f97\u5230\u56de\u590d\uff1b
    "},{"location":"chapter_preface/about_the_book/#011","title":"0.1.1. \u00a0 \u8bfb\u8005\u5bf9\u8c61","text":"

    \u5982\u679c\u60a8\u662f\u300c\u7b97\u6cd5\u521d\u5b66\u8005\u300d\uff0c\u5b8c\u5168\u6ca1\u6709\u63a5\u89e6\u8fc7\u7b97\u6cd5\uff0c\u6216\u8005\u5df2\u7ecf\u6709\u5c11\u91cf\u5237\u9898\uff0c\u5bf9\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u6709\u6726\u80e7\u7684\u7406\u89e3\uff0c\u5728\u4f1a\u4e0e\u4e0d\u4f1a\u4e4b\u95f4\u53cd\u590d\u6a2a\u8df3\uff0c\u90a3\u4e48\u8fd9\u672c\u4e66\u5c31\u662f\u4e3a\u4f60\u800c\u5199\uff01

    \u5982\u679c\u60a8\u662f\u300c\u7b97\u6cd5\u8001\u624b\u300d\uff0c\u5df2\u7ecf\u79ef\u7d2f\u4e00\u5b9a\u5237\u9898\u91cf\uff0c\u63a5\u89e6\u8fc7\u5927\u591a\u6570\u9898\u578b\uff0c\u90a3\u4e48\u672c\u4e66\u53ef\u4ee5\u5e2e\u52a9\u4f60\u56de\u987e\u4e0e\u68b3\u7406\u7b97\u6cd5\u77e5\u8bc6\u4f53\u7cfb\uff0c\u4ed3\u5e93\u6e90\u4ee3\u7801\u53ef\u4ee5\u88ab\u5f53\u4f5c\u201c\u5237\u9898\u5de5\u5177\u5e93\u201d\u6216\u201c\u7b97\u6cd5\u5b57\u5178\u201d\u6765\u4f7f\u7528\u3002

    \u5982\u679c\u60a8\u662f\u300c\u7b97\u6cd5\u5927\u4f6c\u300d\uff0c\u5e0c\u671b\u53ef\u4ee5\u5f97\u5230\u4f60\u7684\u5b9d\u8d35\u610f\u89c1\u5efa\u8bae\uff0c\u6216\u8005\u4e00\u8d77\u53c2\u4e0e\u521b\u4f5c\u3002

    \u524d\u7f6e\u6761\u4ef6

    \u60a8\u9700\u8981\u81f3\u5c11\u5177\u5907\u4efb\u4e00\u8bed\u8a00\u7684\u7f16\u7a0b\u57fa\u7840\uff0c\u80fd\u591f\u9605\u8bfb\u548c\u7f16\u5199\u7b80\u5355\u4ee3\u7801\u3002

    "},{"location":"chapter_preface/about_the_book/#012","title":"0.1.2. \u00a0 \u5185\u5bb9\u7ed3\u6784","text":"

    \u672c\u4e66\u4e3b\u8981\u5185\u5bb9\u6709\uff1a

    • \u590d\u6742\u5ea6\u5206\u6790\uff1a\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u8bc4\u4ef7\u7ef4\u5ea6\u3001\u7b97\u6cd5\u6548\u7387\u7684\u8bc4\u4f30\u65b9\u6cd5\u3002\u65f6\u95f4\u590d\u6742\u5ea6\u3001\u7a7a\u95f4\u590d\u6742\u5ea6\uff0c\u5305\u62ec\u63a8\u7b97\u65b9\u6cd5\u3001\u5e38\u89c1\u7c7b\u578b\u3001\u793a\u4f8b\u7b49\u3002
    • \u6570\u636e\u7ed3\u6784\uff1a\u5e38\u7528\u7684\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff0c\u6570\u636e\u5728\u5185\u5b58\u4e2d\u7684\u5b58\u50a8\u65b9\u5f0f\u3001\u6570\u636e\u7ed3\u6784\u5206\u7c7b\u65b9\u6cd5\u3002\u6570\u7ec4\u3001\u94fe\u8868\u3001\u6808\u3001\u961f\u5217\u3001\u6563\u5217\u8868\u3001\u6811\u3001\u5806\u3001\u56fe\u7b49\u6570\u636e\u7ed3\u6784\uff0c\u5185\u5bb9\u5305\u62ec\u5b9a\u4e49\u3001\u4f18\u52a3\u52bf\u3001\u5e38\u7528\u64cd\u4f5c\u3001\u5e38\u89c1\u7c7b\u578b\u3001\u5178\u578b\u5e94\u7528\u3001\u5b9e\u73b0\u65b9\u6cd5\u7b49\u3002
    • \u7b97\u6cd5\uff1a\u67e5\u627e\u7b97\u6cd5\u3001\u6392\u5e8f\u7b97\u6cd5\u3001\u641c\u7d22\u4e0e\u56de\u6eaf\u3001\u52a8\u6001\u89c4\u5212\u3001\u5206\u6cbb\u7b97\u6cd5\uff0c\u5185\u5bb9\u5305\u62ec\u5b9a\u4e49\u3001\u4f7f\u7528\u573a\u666f\u3001\u4f18\u52a3\u52bf\u3001\u65f6\u7a7a\u6548\u7387\u3001\u5b9e\u73b0\u65b9\u6cd5\u3001\u793a\u4f8b\u9898\u76ee\u7b49\u3002

    Fig. Hello \u7b97\u6cd5\u5185\u5bb9\u7ed3\u6784

    "},{"location":"chapter_preface/about_the_book/#013","title":"0.1.3. \u00a0 \u81f4\u8c22","text":"

    \u672c\u4e66\u7684\u6210\u4e66\u8fc7\u7a0b\u4e2d\uff0c\u6211\u83b7\u5f97\u4e86\u8bb8\u591a\u4eba\u7684\u5e2e\u52a9\uff0c\u5305\u62ec\u4f46\u4e0d\u9650\u4e8e\uff1a

    • \u611f\u8c22\u6211\u5728\u516c\u53f8\u7684\u5bfc\u5e08\u674e\u6c50\u535a\u58eb\uff0c\u5728\u4e00\u6b21\u7545\u8c08\u65f6\u60a8\u544a\u8bc9\u6211\u201c\u89c9\u5f97\u5e94\u8be5\u505a\u5c31\u53bb\u505a\u201d\uff0c\u575a\u5b9a\u4e86\u6211\u5199\u8fd9\u672c\u4e66\u7684\u51b3\u5fc3\u3002
    • \u611f\u8c22\u6211\u7684\u5973\u670b\u53cb\u6ce1\u6ce1\u62c5\u4efb\u672c\u4e66\u7684\u9996\u4f4d\u8bfb\u8005\uff0c\u4ece\u7b97\u6cd5\u5c0f\u767d\u7684\u89c6\u89d2\u63d0\u51fa\u4e86\u8bb8\u591a\u5efa\u8bae\uff0c\u4f7f\u8fd9\u672c\u4e66\u66f4\u52a0\u9002\u5408\u521d\u5b66\u8005\u6765\u9605\u8bfb\u3002
    • \u611f\u8c22\u817e\u5b9d\u3001\u7426\u5b9d\u3001\u98de\u5b9d\u4e3a\u672c\u4e66\u8d77\u4e86\u4e2a\u597d\u542c\u53c8\u6709\u6897\u540d\u5b57\uff0c\u76f4\u63a5\u5524\u8d77\u6211\u6700\u521d\u6572\u4e0b\u7b2c\u4e00\u884c\u4ee3\u7801 \"Hello World!\" \u7684\u56de\u5fc6\u3002
    • \u611f\u8c22\u82cf\u6f7c\u4e3a\u672c\u4e66\u8bbe\u8ba1\u4e86\u5c01\u9762\u548c LOGO \uff0c\u5728\u6211\u7684\u5f3a\u8feb\u75c7\u4e0b\u524d\u540e\u591a\u6b21\u5e2e\u5fd9\u4fee\u6539\uff0c\u8c22\u8c22\u4f60\u7684\u8010\u5fc3\u3002
    • \u611f\u8c22 @squidfunk \u7ed9\u51fa\u7684\u5199\u4f5c\u6392\u7248\u5efa\u8bae\uff0c\u4ee5\u53ca\u4f18\u79c0\u5f00\u6e90\u9879\u76ee Material-for-MkDocs \u3002

    \u672c\u4e66\u9f13\u52b1\u201c\u624b\u8111\u5e76\u7528\u201d\u7684\u5b66\u4e60\u65b9\u5f0f\uff0c\u5728\u8fd9\u70b9\u4e0a\u53d7\u5230\u4e86\u300a\u52a8\u624b\u5b66\u6df1\u5ea6\u5b66\u4e60\u300b\u5f88\u5927\u5f71\u54cd\uff0c\u4e5f\u5728\u6b64\u5411\u5404\u4f4d\u540c\u5b66\u5f3a\u70c8\u63a8\u8350\u8fd9\u672c\u8457\u4f5c\uff0c\u5305\u62ec\u4e2d\u6587\u7248\u3001\u82f1\u6587\u7248\u3001\u674e\u6c90\u8001\u5e08 bilibili \u4e3b\u9875\u3002

    \u5728\u5199\u4f5c\u8fc7\u7a0b\u4e2d\uff0c\u6211\u9605\u8bfb\u4e86\u8bb8\u591a\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u6559\u6750\u4e0e\u6587\u7ae0\uff0c\u8fd9\u4e9b\u8457\u4f5c\u4e3a\u672c\u4e66\u4f5c\u51fa\u4e86\u5f88\u597d\u7684\u699c\u6837\uff0c\u4fdd\u8bc1\u4e86\u672c\u4e66\u5185\u5bb9\u7684\u6b63\u786e\u6027\u4e0e\u8d28\u91cf\uff0c\u611f\u8c22\u5404\u4f4d\u8001\u5e08\u4e0e\u524d\u8f88\u7684\u7cbe\u5f69\u521b\u4f5c\uff01

    \u611f\u8c22\u7236\u6bcd\uff0c\u4f60\u4eec\u4e00\u8d2f\u7684\u652f\u6301\u4e0e\u9f13\u52b1\u7ed9\u4e86\u6211\u81ea\u7531\u5ea6\u6765\u505a\u8fd9\u4e9b\u6709\u8da3\u7684\u4e8b\u3002

    "},{"location":"chapter_preface/suggestions/","title":"0.2. \u00a0 \u5982\u4f55\u4f7f\u7528\u672c\u4e66","text":"

    \u5efa\u8bae\u901a\u8bfb\u672c\u8282\u5185\u5bb9\uff0c\u4ee5\u83b7\u53d6\u6700\u4f73\u9605\u8bfb\u4f53\u9a8c\u3002

    "},{"location":"chapter_preface/suggestions/#021","title":"0.2.1. \u00a0 \u7b97\u6cd5\u5b66\u4e60\u8def\u7ebf","text":"

    \u603b\u4f53\u4e0a\u770b\uff0c\u6211\u8ba4\u4e3a\u53ef\u5c06\u5b66\u4e60\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u7684\u8fc7\u7a0b\u5206\u4e3a\u4e09\u4e2a\u9636\u6bb5\u3002

    1. \u7b97\u6cd5\u5165\u95e8\u3002\u719f\u6089\u5404\u79cd\u6570\u636e\u7ed3\u6784\u7684\u7279\u70b9\u3001\u7528\u6cd5\uff0c\u5b66\u4e60\u5404\u79cd\u7b97\u6cd5\u7684\u539f\u7406\u3001\u6d41\u7a0b\u3001\u7528\u9014\u3001\u6548\u7387\u7b49\u3002
    2. \u5237\u7b97\u6cd5\u9898\u3002\u53ef\u4ee5\u5148\u4ece\u70ed\u95e8\u9898\u5355\u5f00\u5237\uff0c\u63a8\u8350\u5251\u6307 Offer\u3001LeetCode Hot 100\uff0c\u5148\u79ef\u7d2f\u81f3\u5c11 100 \u9053\u9898\u91cf\uff0c\u719f\u6089\u5927\u591a\u6570\u7684\u7b97\u6cd5\u95ee\u9898\u3002\u521a\u5f00\u59cb\u5237\u9898\u65f6\uff0c\u201c\u9057\u5fd8\u201d\u662f\u6700\u5927\u7684\u56f0\u6270\u70b9\uff0c\u4f46\u8fd9\u662f\u5f88\u6b63\u5e38\u7684\uff0c\u8bf7\u4e0d\u8981\u62c5\u5fc3\u3002\u5b66\u4e60\u4e2d\u6709\u4e00\u79cd\u6982\u5ff5\u53eb\u201c\u5468\u671f\u6027\u56de\u987e\u201d\uff0c\u540c\u4e00\u9053\u9898\u9694\u6bb5\u65f6\u95f4\u505a\u4e00\u6b21\uff0c\u5728\u91cd\u590d 3 \u8f6e\u4ee5\u4e0a\u540e\uff0c\u5f80\u5f80\u5c31\u80fd\u7262\u8bb0\u4e8e\u5fc3\u4e86\u3002
    3. \u642d\u5efa\u77e5\u8bc6\u4f53\u7cfb\u3002\u5728\u5b66\u4e60\u65b9\u9762\uff0c\u53ef\u4ee5\u9605\u8bfb\u7b97\u6cd5\u4e13\u680f\u6587\u7ae0\u3001\u89e3\u9898\u6846\u67b6\u3001\u7b97\u6cd5\u6559\u6750\uff0c\u4e0d\u65ad\u5730\u4e30\u5bcc\u77e5\u8bc6\u4f53\u7cfb\u3002\u5728\u5237\u9898\u65b9\u9762\uff0c\u53ef\u4ee5\u5f00\u59cb\u91c7\u7528\u8fdb\u9636\u5237\u9898\u65b9\u6848\uff0c\u4f8b\u5982\u6309\u4e13\u9898\u5206\u7c7b\u3001\u4e00\u9898\u591a\u89e3\u3001\u4e00\u89e3\u591a\u9898\u7b49\uff0c\u76f8\u5173\u5237\u9898\u5fc3\u5f97\u53ef\u4ee5\u5728\u5404\u4e2a\u793e\u533a\u4e2d\u627e\u5230\u3002

    \u4f5c\u4e3a\u4e00\u672c\u5165\u95e8\u6559\u7a0b\uff0c\u672c\u4e66\u5185\u5bb9\u4e3b\u8981\u5bf9\u5e94\u201c\u7b2c\u4e00\u9636\u6bb5\u201d\uff0c\u81f4\u529b\u4e8e\u5e2e\u52a9\u4f60\u66f4\u9ad8\u6548\u5730\u5f00\u5c55\u7b2c\u4e8c\u3001\u4e09\u9636\u6bb5\u7684\u5b66\u4e60\u3002

    Fig. \u7b97\u6cd5\u5b66\u4e60\u8def\u7ebf

    "},{"location":"chapter_preface/suggestions/#022","title":"0.2.2. \u00a0 \u884c\u6587\u98ce\u683c\u7ea6\u5b9a","text":"

    \u6807\u9898\u540e\u6807\u6ce8 * \u7684\u662f\u9009\u8bfb\u7ae0\u8282\uff0c\u5185\u5bb9\u76f8\u5bf9\u8f83\u96be\u3002\u5982\u679c\u4f60\u7684\u65f6\u95f4\u6709\u9650\uff0c\u5efa\u8bae\u53ef\u4ee5\u5148\u8df3\u8fc7\u3002

    \u6587\u7ae0\u4e2d\u7684\u91cd\u8981\u540d\u8bcd\u4f1a\u7528 \u300c\u62ec\u53f7\u300d \u6807\u6ce8\uff0c\u4f8b\u5982 \u300c\u6570\u7ec4 Array\u300d \u3002\u5efa\u8bae\u8bb0\u4f4f\u8fd9\u4e9b\u540d\u8bcd\uff0c\u5305\u62ec\u82f1\u6587\u7ffb\u8bd1\uff0c\u4ee5\u4fbf\u540e\u7eed\u9605\u8bfb\u6587\u732e\u65f6\u4f7f\u7528\u3002

    \u91cd\u70b9\u5185\u5bb9\u3001\u603b\u8d77\u53e5\u3001\u603b\u7ed3\u53e5\u4f1a\u88ab \u52a0\u7c97 \uff0c\u6b64\u7c7b\u6587\u5b57\u503c\u5f97\u7279\u522b\u5173\u6ce8\u3002

    \u4e13\u6709\u540d\u8bcd\u548c\u6709\u7279\u6307\u542b\u4e49\u7684\u8bcd\u53e5\u4f1a\u4f7f\u7528 \u201c\u53cc\u5f15\u53f7\u201d \u6807\u6ce8\uff0c\u4ee5\u907f\u514d\u6b67\u4e49\u3002

    \u672c\u4e66\u90e8\u5206\u653e\u5f03\u4e86\u7f16\u7a0b\u8bed\u8a00\u7684\u6ce8\u91ca\u89c4\u8303\uff0c\u4ee5\u6362\u53d6\u66f4\u52a0\u7d27\u51d1\u7684\u5185\u5bb9\u6392\u7248\u3002\u6ce8\u91ca\u4e3b\u8981\u5206\u4e3a\u4e09\u79cd\u7c7b\u578b\uff1a\u6807\u9898\u6ce8\u91ca\u3001\u5185\u5bb9\u6ce8\u91ca\u3001\u591a\u884c\u6ce8\u91ca\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    \"\"\" \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 \"\"\"\n# \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n\"\"\"\n\u591a\u884c\n\u6ce8\u91ca\n\"\"\"\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    /* \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49 */\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n/**\n * \u591a\u884c\n * \u6ce8\u91ca\n */\n
    // \u6807\u9898\u6ce8\u91ca\uff0c\u7528\u4e8e\u6807\u6ce8\u51fd\u6570\u3001\u7c7b\u3001\u6d4b\u8bd5\u6837\u4f8b\u7b49\n// \u5185\u5bb9\u6ce8\u91ca\uff0c\u7528\u4e8e\u8be6\u89e3\u4ee3\u7801\n// \u591a\u884c\n// \u6ce8\u91ca\n
    "},{"location":"chapter_preface/suggestions/#023","title":"0.2.3. \u00a0 \u5728\u52a8\u753b\u56fe\u89e3\u4e2d\u9ad8\u6548\u5b66\u4e60","text":"

    \u89c6\u9891\u548c\u56fe\u7247\u76f8\u6bd4\u4e8e\u6587\u5b57\u7684\u4fe1\u606f\u5bc6\u5ea6\u548c\u7ed3\u6784\u5316\u7a0b\u5ea6\u66f4\u9ad8\uff0c\u66f4\u5bb9\u6613\u7406\u89e3\u3002\u5728\u672c\u4e66\u4e2d\uff0c\u77e5\u8bc6\u91cd\u96be\u70b9\u4f1a\u4e3b\u8981\u4ee5\u52a8\u753b\u3001\u56fe\u89e3\u7684\u5f62\u5f0f\u5448\u73b0\uff0c\u800c\u6587\u5b57\u7684\u4f5c\u7528\u5219\u662f\u4f5c\u4e3a\u52a8\u753b\u548c\u56fe\u7684\u89e3\u91ca\u4e0e\u8865\u5145\u3002

    \u9605\u8bfb\u672c\u4e66\u65f6\uff0c\u82e5\u53d1\u73b0\u67d0\u6bb5\u5185\u5bb9\u63d0\u4f9b\u4e86\u52a8\u753b\u6216\u56fe\u89e3\uff0c\u5efa\u8bae\u4f60\u4ee5\u56fe\u4e3a\u4e3b\u7ebf\uff0c\u5c06\u6587\u5b57\u5185\u5bb9\uff08\u4e00\u822c\u5728\u56fe\u7684\u4e0a\u65b9\uff09\u5bf9\u9f50\u5230\u56fe\u4e2d\u5185\u5bb9\uff0c\u7efc\u5408\u6765\u7406\u89e3\u3002

    Fig. \u52a8\u753b\u56fe\u89e3\u793a\u4f8b

    "},{"location":"chapter_preface/suggestions/#024","title":"0.2.4. \u00a0 \u5728\u4ee3\u7801\u5b9e\u8df5\u4e2d\u52a0\u6df1\u7406\u89e3","text":"

    \u672c\u4e66\u7684\u914d\u5957\u4ee3\u7801\u6258\u7ba1\u5728GitHub \u4ed3\u5e93\uff0c\u6e90\u4ee3\u7801\u5305\u542b\u8be6\u7ec6\u6ce8\u91ca\uff0c\u914d\u6709\u6d4b\u8bd5\u6837\u4f8b\uff0c\u53ef\u4ee5\u76f4\u63a5\u8fd0\u884c\u3002

    • \u82e5\u5b66\u4e60\u65f6\u95f4\u7d27\u5f20\uff0c\u5efa\u8bae\u81f3\u5c11\u5c06\u6240\u6709\u4ee3\u7801\u901a\u8bfb\u5e76\u8fd0\u884c\u4e00\u904d\u3002
    • \u82e5\u65f6\u95f4\u5141\u8bb8\uff0c\u5f3a\u70c8\u5efa\u8bae\u5bf9\u7167\u7740\u4ee3\u7801\u81ea\u5df1\u6572\u4e00\u904d\u3002\u76f8\u6bd4\u4e8e\u8bfb\u4ee3\u7801\uff0c\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u5f80\u5f80\u80fd\u5e26\u6765\u65b0\u7684\u6536\u83b7\u3002

    Fig. \u8fd0\u884c\u4ee3\u7801\u793a\u4f8b

    \u7b2c\u4e00\u6b65\uff1a\u5b89\u88c5\u672c\u5730\u7f16\u7a0b\u73af\u5883\u3002\u53c2\u7167\u9644\u5f55\u6559\u7a0b\uff0c\u5982\u679c\u5df2\u6709\u53ef\u76f4\u63a5\u8df3\u8fc7\u3002

    \u7b2c\u4e8c\u6b65\uff1a\u4e0b\u8f7d\u4ee3\u7801\u4ed3\u3002\u5982\u679c\u5df2\u7ecf\u5b89\u88c5 Git \uff0c\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4\u884c\u6765\u514b\u9686\u4ee3\u7801\u4ed3\u3002

    git clone https://github.com/krahets/hello-algo.git\n

    \u5f53\u7136\uff0c\u4f60\u4e5f\u53ef\u4ee5\u70b9\u51fb\u201cDownload ZIP\u201d\u76f4\u63a5\u4e0b\u8f7d\u4ee3\u7801\u538b\u7f29\u5305\uff0c\u672c\u5730\u89e3\u538b\u5373\u53ef\u3002

    Fig. \u514b\u9686\u4ed3\u5e93\u4e0e\u4e0b\u8f7d\u4ee3\u7801

    \u7b2c\u4e09\u6b65\uff1a\u8fd0\u884c\u6e90\u4ee3\u7801\u3002\u82e5\u4ee3\u7801\u5757\u7684\u9876\u90e8\u6807\u6709\u6587\u4ef6\u540d\u79f0\uff0c\u5219\u53ef\u5728\u4ed3\u5e93 codes \u6587\u4ef6\u5939\u4e2d\u627e\u5230\u5bf9\u5e94\u7684 \u6e90\u4ee3\u7801\u6587\u4ef6\u3002\u6e90\u4ee3\u7801\u6587\u4ef6\u53ef\u4ee5\u5e2e\u52a9\u4f60\u7701\u53bb\u4e0d\u5fc5\u8981\u7684\u8c03\u8bd5\u65f6\u95f4\uff0c\u5c06\u7cbe\u529b\u96c6\u4e2d\u5728\u5b66\u4e60\u5185\u5bb9\u4e0a\u3002

    Fig. \u4ee3\u7801\u5757\u4e0e\u5bf9\u5e94\u7684\u6e90\u4ee3\u7801\u6587\u4ef6

    "},{"location":"chapter_preface/suggestions/#025","title":"0.2.5. \u00a0 \u5728\u63d0\u95ee\u8ba8\u8bba\u4e2d\u5171\u540c\u6210\u957f","text":"

    \u9605\u8bfb\u672c\u4e66\u65f6\uff0c\u8bf7\u4e0d\u8981\u201c\u60ef\u7740\u201d\u90a3\u4e9b\u5f04\u4e0d\u660e\u767d\u7684\u77e5\u8bc6\u70b9\u3002\u6b22\u8fce\u5728\u8bc4\u8bba\u533a\u7559\u4e0b\u4f60\u7684\u95ee\u9898\uff0c\u5c0f\u4f19\u4f34\u4eec\u548c\u6211\u90fd\u4f1a\u7ed9\u4e88\u89e3\u7b54\uff0c\u60a8\u4e00\u822c 2 \u65e5\u5185\u4f1a\u5f97\u5230\u56de\u590d\u3002

    \u540c\u65f6\uff0c\u4e5f\u5e0c\u671b\u4f60\u53ef\u4ee5\u591a\u82b1\u65f6\u95f4\u901b\u901b\u8bc4\u8bba\u533a\u3002\u4e00\u65b9\u9762\uff0c\u53ef\u4ee5\u770b\u770b\u5927\u5bb6\u9047\u5230\u4e86\u4ec0\u4e48\u95ee\u9898\uff0c\u53cd\u8fc7\u6765\u67e5\u6f0f\u8865\u7f3a\uff0c\u8fd9\u5f80\u5f80\u53ef\u4ee5\u5f15\u8d77\u66f4\u52a0\u6df1\u5ea6\u7684\u601d\u8003\u3002\u53e6\u4e00\u65b9\u9762\uff0c\u4e5f\u5e0c\u671b\u4f60\u53ef\u4ee5\u6177\u6168\u5730\u89e3\u7b54\u5c0f\u4f19\u4f34\u4eec\u7684\u95ee\u9898\u3001\u5206\u4eab\u81ea\u5df1\u7684\u89c1\u89e3\uff0c\u5927\u5bb6\u4e92\u76f8\u5b66\u4e60\u4e0e\u8fdb\u6b65\uff01

    Fig. \u8bc4\u8bba\u533a\u793a\u4f8b

    "},{"location":"chapter_preface/summary/","title":"0.3. \u00a0 \u5c0f\u7ed3","text":"
    • \u672c\u4e66\u4e3b\u8981\u9762\u5411\u7b97\u6cd5\u521d\u5b66\u8005\u3002\u5bf9\u4e8e\u5df2\u7ecf\u6709\u4e00\u5b9a\u79ef\u7d2f\u7684\u540c\u5b66\uff0c\u8fd9\u672c\u4e66\u53ef\u4ee5\u5e2e\u52a9\u4f60\u7cfb\u7edf\u56de\u987e\u7b97\u6cd5\u77e5\u8bc6\uff0c\u6e90\u4ee3\u7801\u53ef\u88ab\u5f53\u4f5c\u201c\u5237\u9898\u5de5\u5177\u5e93\u201d\u6765\u4f7f\u7528\u3002
    • \u4e66\u4e2d\u5185\u5bb9\u4e3b\u8981\u5206\u4e3a\u590d\u6742\u5ea6\u5206\u6790\u3001\u6570\u636e\u7ed3\u6784\u3001\u7b97\u6cd5\u4e09\u90e8\u5206\uff0c\u8986\u76d6\u4e86\u8be5\u9886\u57df\u7684\u5927\u90e8\u5206\u4e3b\u9898\u3002
    • \u5bf9\u4e8e\u7b97\u6cd5\u5c0f\u767d\uff0c\u5728\u521d\u5b66\u9636\u6bb5\u9605\u8bfb\u4e00\u672c\u5165\u95e8\u4e66\u662f\u975e\u5e38\u6709\u5fc5\u8981\u7684\uff0c\u53ef\u4ee5\u5c11\u8d70\u8bb8\u591a\u5f2f\u8def\u3002
    • \u4e66\u5185\u7684\u52a8\u753b\u548c\u56fe\u89e3\u5f80\u5f80\u4ecb\u7ecd\u7684\u662f\u91cd\u70b9\u548c\u96be\u70b9\u77e5\u8bc6\uff0c\u5728\u9605\u8bfb\u65f6\u5e94\u8be5\u591a\u52a0\u5173\u6ce8\u3002
    • \u5b9e\u8df5\u662f\u5b66\u4e60\u7f16\u7a0b\u7684\u6700\u4f73\u65b9\u5f0f\uff0c\u5f3a\u70c8\u63a8\u8350\u8fd0\u884c\u6e90\u4ee3\u7801\uff0c\u52a8\u624b\u6572\u4ee3\u7801\u3002
    • \u672c\u4e66\u63d0\u4f9b\u4e86\u8ba8\u8bba\u533a\uff0c\u9047\u5230\u7591\u60d1\u53ef\u4ee5\u968f\u65f6\u63d0\u95ee\u3002
    "},{"location":"chapter_reference/","title":"\u53c2\u8003\u6587\u732e","text":"

    [1] Thomas H. Cormen, et al. Introduction to Algorithms (3rd Edition).

    [2] Aditya Bhargava. Grokking Algorithms: An Illustrated Guide for Programmers and Other Curious People (1st Edition).

    [3] \u4e25\u851a\u654f. \u6570\u636e\u7ed3\u6784\uff08 C \u8bed\u8a00\u7248\uff09.

    [4] \u9093\u4fca\u8f89. \u6570\u636e\u7ed3\u6784\uff08 C++ \u8bed\u8a00\u7248\uff0c\u7b2c\u4e09\u7248\uff09.

    [5] \u9a6c\u514b\u00b7\u827e\u4f26\u00b7\u7ef4\u65af\u8457\uff0c\u9648\u8d8a\u8bd1. \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u5206\u6790\uff1aJava\u8bed\u8a00\u63cf\u8ff0\uff08\u7b2c\u4e09\u7248\uff09.

    [6] \u7a0b\u6770. \u5927\u8bdd\u6570\u636e\u7ed3\u6784.

    [7] \u738b\u4e89. \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e4b\u7f8e.

    [8] Gayle Laakmann McDowell. Cracking the Coding Interview: 189 Programming Questions and Solutions (6th Edition).

    [9] Aston Zhang, et al. Dive into Deep Learning.

    "},{"location":"chapter_searching/binary_search/","title":"10.2. \u00a0 \u4e8c\u5206\u67e5\u627e","text":"

    \u300c\u4e8c\u5206\u67e5\u627e Binary Search\u300d\u5229\u7528\u6570\u636e\u7684\u6709\u5e8f\u6027\uff0c\u901a\u8fc7\u6bcf\u8f6e\u7f29\u5c0f\u4e00\u534a\u641c\u7d22\u533a\u95f4\u6765\u67e5\u627e\u76ee\u6807\u5143\u7d20\u3002

    \u4f7f\u7528\u4e8c\u5206\u67e5\u627e\u6709\u4e24\u4e2a\u524d\u7f6e\u6761\u4ef6\uff1a

    • \u8981\u6c42\u8f93\u5165\u6570\u636e\u662f\u6709\u5e8f\u7684\uff0c\u8fd9\u6837\u624d\u80fd\u901a\u8fc7\u5224\u65ad\u5927\u5c0f\u5173\u7cfb\u6765\u6392\u9664\u4e00\u534a\u7684\u641c\u7d22\u533a\u95f4\uff1b
    • \u4e8c\u5206\u67e5\u627e\u4ec5\u9002\u7528\u4e8e\u6570\u7ec4\uff0c\u800c\u5728\u94fe\u8868\u4e2d\u4f7f\u7528\u6548\u7387\u5f88\u4f4e\uff0c\u56e0\u4e3a\u5176\u5728\u5faa\u73af\u4e2d\u9700\u8981\u8df3\u8dc3\u5f0f\uff08\u975e\u8fde\u7eed\u5730\uff09\u8bbf\u95ee\u5143\u7d20\u3002
    "},{"location":"chapter_searching/binary_search/#1021","title":"10.2.1. \u00a0 \u7b97\u6cd5\u5b9e\u73b0","text":"

    \u7ed9\u5b9a\u4e00\u4e2a\u957f\u5ea6\u4e3a \\(n\\) \u7684\u6392\u5e8f\u6570\u7ec4 nums \uff0c\u5143\u7d20\u4ece\u5c0f\u5230\u5927\u6392\u5217\u3002\u6570\u7ec4\u7684\u7d22\u5f15\u53d6\u503c\u8303\u56f4\u4e3a

    \\[ 0, 1, 2, \\cdots, n-1 \\]

    \u4f7f\u7528\u300c\u533a\u95f4\u300d\u6765\u8868\u793a\u8fd9\u4e2a\u53d6\u503c\u8303\u56f4\u7684\u65b9\u6cd5\u4e3b\u8981\u6709\u4e24\u79cd\uff1a

    1. \u53cc\u95ed\u533a\u95f4 \\([0, n-1]\\) \uff0c\u5373\u4e24\u4e2a\u8fb9\u754c\u90fd\u5305\u542b\u81ea\u8eab\uff1b\u6b64\u65b9\u6cd5\u4e0b\uff0c\u533a\u95f4 \\([0, 0]\\) \u4ecd\u5305\u542b\u4e00\u4e2a\u5143\u7d20\uff1b
    2. \u5de6\u95ed\u53f3\u5f00 \\([0, n)\\) \uff0c\u5373\u5de6\u8fb9\u754c\u5305\u542b\u81ea\u8eab\u3001\u53f3\u8fb9\u754c\u4e0d\u5305\u542b\u81ea\u8eab\uff1b\u6b64\u65b9\u6cd5\u4e0b\uff0c\u533a\u95f4 \\([0, 0)\\) \u4e3a\u7a7a\uff1b
    "},{"location":"chapter_searching/binary_search/#_1","title":"\u201c\u53cc\u95ed\u533a\u95f4\u201d\u5b9e\u73b0","text":"

    \u9996\u5148\uff0c\u6211\u4eec\u5148\u91c7\u7528\u201c\u53cc\u95ed\u533a\u95f4\u201d\u7684\u8868\u793a\uff0c\u5728\u6570\u7ec4 nums \u4e2d\u67e5\u627e\u76ee\u6807\u5143\u7d20 target \u7684\u5bf9\u5e94\u7d22\u5f15\u3002

    <1><2><3><4><5><6><7>

    \u4e8c\u5206\u67e5\u627e\u201c\u53cc\u95ed\u533a\u95f4\u201d\u8868\u793a\u4e0b\u7684\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search.java
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nint binarySearch(int[] nums, int target) {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nint i = 0, j = nums.length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.cpp
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nint binarySearch(vector<int>& nums, int target) {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nint i = 0, j = nums.size() - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.py
    def binary_search(nums: List[int], target: int) -> int:\n\"\"\" \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 \"\"\"\n# \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\ni, j = 0, len(nums) - 1\nwhile i <= j:\nm = (i + j) // 2        # \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target:    # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1\nelif nums[m] > target:  # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1\nelse:\nreturn m            # \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn -1                   # \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n
    binary_search.go
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunc binarySearch(nums []int, target int) int {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\ni, j := 0, len(nums)-1\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nfor i <= j {\nm := (i + j) / 2      // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.js
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunction binarySearch(nums, target) {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nlet i = 0, j = nums.length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nconst m = parseInt((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m \uff0c\u5728 JS \u4e2d\u9700\u4f7f\u7528 parseInt \u51fd\u6570\u53d6\u6574\nif (nums[m] < target)          // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target)     // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse\nreturn m;                  // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.ts
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunction binarySearch(nums: number[], target: number): number {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nlet i = 0, j = nums.length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nconst m = Math.floor((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target) {        // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\n} else if (nums[m] > target) { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\n} else {                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n}\nreturn -1; // \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n}\n
    binary_search.c
    [class]{}-[func]{binarySearch}\n
    binary_search.cs
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nint binarySearch(int[] nums, int target)\n{\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nint i = 0, j = nums.Length - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j)\n{\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.swift
    /* \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09 */\nfunc binarySearch(nums: [Int], target: Int) -> Int {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nvar i = 0\nvar j = nums.count - 1\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile i <= j {\nlet m = (i + j) / 2 // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.zig
    // \u4e8c\u5206\u67e5\u627e\uff08\u53cc\u95ed\u533a\u95f4\uff09\nfn binarySearch(comptime T: type, nums: std.ArrayList(T), target: T) T {\n// \u521d\u59cb\u5316\u53cc\u95ed\u533a\u95f4 [0, n-1] \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20\nvar i: usize = 0;\nvar j: usize = nums.items.len - 1;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i > j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nvar m = (i + j) / 2;                    // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums.items[m] < target) {           // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j] \u4e2d\ni = m + 1;\n} else if (nums.items[m] > target) {    // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m-1] \u4e2d\nj = m - 1;\n} else {                                // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn @intCast(T, m);\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    "},{"location":"chapter_searching/binary_search/#_2","title":"\u201c\u5de6\u95ed\u53f3\u5f00\u201d\u5b9e\u73b0","text":"

    \u5f53\u7136\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528\u201c\u5de6\u95ed\u53f3\u5f00\u201d\u7684\u8868\u793a\u65b9\u6cd5\uff0c\u5199\u51fa\u76f8\u540c\u529f\u80fd\u7684\u4e8c\u5206\u67e5\u627e\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search.java
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nint binarySearch1(int[] nums, int target) {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nint i = 0, j = nums.length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.cpp
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nint binarySearch1(vector<int>& nums, int target) {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nint i = 0, j = nums.size();\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.py
    def binary_search1(nums: List[int], target: int) -> int:\n\"\"\" \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 \"\"\"\n# \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\ni, j = 0, len(nums)\n# \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile i < j:\nm = (i + j) // 2        # \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target:    # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1\nelif nums[m] > target:  # \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m\nelse:                   # \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\nreturn -1                   # \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n
    binary_search.go
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunc binarySearch1(nums []int, target int) int {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\ni, j := 0, len(nums)\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nfor i < j {\nm := (i + j) / 2      // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.js
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunction binarySearch1(nums, target) {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nlet i = 0, j = nums.length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nconst m = parseInt((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m \uff0c\u5728 JS \u4e2d\u9700\u4f7f\u7528 parseInt \u51fd\u6570\u53d6\u6574\nif (nums[m] < target)          // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target)     // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                           // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.ts
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunction binarySearch1(nums: number[], target: number): number {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nlet i = 0, j = nums.length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j) {\nconst m = Math.floor((i + j) / 2); // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target) {        // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\n} else if (nums[m] > target) { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\n} else {                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n}\nreturn -1; // \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n}\n
    binary_search.c
    [class]{}-[func]{binarySearch1}\n
    binary_search.cs
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nint binarySearch1(int[] nums, int target)\n{\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nint i = 0, j = nums.Length;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i < j)\n{\nint m = (i + j) / 2;       // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums[m] < target)      // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\nelse if (nums[m] > target) // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\nelse                       // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    binary_search.swift
    /* \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09 */\nfunc binarySearch1(nums: [Int], target: Int) -> Int {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nvar i = 0\nvar j = nums.count\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile i < j {\nlet m = (i + j) / 2 // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif nums[m] < target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1\n} else if nums[m] > target { // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m\n} else { // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn m\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    binary_search.zig
    // \u4e8c\u5206\u67e5\u627e\uff08\u5de6\u95ed\u53f3\u5f00\uff09\nfn binarySearch1(comptime T: type, nums: std.ArrayList(T), target: T) T {\n// \u521d\u59cb\u5316\u5de6\u95ed\u53f3\u5f00 [0, n) \uff0c\u5373 i, j \u5206\u522b\u6307\u5411\u6570\u7ec4\u9996\u5143\u7d20\u3001\u5c3e\u5143\u7d20+1\nvar i: usize = 0;\nvar j: usize = nums.items.len;\n// \u5faa\u73af\uff0c\u5f53\u641c\u7d22\u533a\u95f4\u4e3a\u7a7a\u65f6\u8df3\u51fa\uff08\u5f53 i = j \u65f6\u4e3a\u7a7a\uff09\nwhile (i <= j) {\nvar m = (i + j) / 2;                    // \u8ba1\u7b97\u4e2d\u70b9\u7d22\u5f15 m\nif (nums.items[m] < target) {           // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [m+1, j) \u4e2d\ni = m + 1;\n} else if (nums.items[m] > target) {    // \u6b64\u60c5\u51b5\u8bf4\u660e target \u5728\u533a\u95f4 [i, m) \u4e2d\nj = m;\n} else {                                // \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn @intCast(T, m);\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    "},{"location":"chapter_searching/binary_search/#_3","title":"\u4e24\u79cd\u8868\u793a\u5bf9\u6bd4","text":"

    \u5bf9\u6bd4\u4e0b\u6765\uff0c\u4e24\u79cd\u8868\u793a\u7684\u4ee3\u7801\u5199\u6cd5\u6709\u4ee5\u4e0b\u4e0d\u540c\u70b9\uff1a

    \u8868\u793a\u65b9\u6cd5 \u521d\u59cb\u5316\u6307\u9488 \u7f29\u5c0f\u533a\u95f4 \u5faa\u73af\u7ec8\u6b62\u6761\u4ef6 \u53cc\u95ed\u533a\u95f4 \\([0, n-1]\\) \\(i = 0\\) , \\(j = n-1\\) \\(i = m + 1\\) , \\(j = m - 1\\) \\(i > j\\) \u5de6\u95ed\u53f3\u5f00 \\([0, n)\\) \\(i = 0\\) , \\(j = n\\) \\(i = m + 1\\) , \\(j = m\\) \\(i = j\\)

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5728\u201c\u53cc\u95ed\u533a\u95f4\u201d\u8868\u793a\u4e2d\uff0c\u7531\u4e8e\u5bf9\u5de6\u53f3\u4e24\u8fb9\u754c\u7684\u5b9a\u4e49\u662f\u76f8\u540c\u7684\uff0c\u56e0\u6b64\u7f29\u5c0f\u533a\u95f4\u7684 \\(i\\) , \\(j\\) \u5904\u7406\u65b9\u6cd5\u4e5f\u662f\u5bf9\u79f0\u7684\uff0c\u8fd9\u6837\u66f4\u4e0d\u5bb9\u6613\u51fa\u9519\u3002\u7efc\u4e0a\u6240\u8ff0\uff0c\u5efa\u8bae\u4f60\u91c7\u7528\u201c\u53cc\u95ed\u533a\u95f4\u201d\u7684\u5199\u6cd5\u3002

    "},{"location":"chapter_searching/binary_search/#_4","title":"\u5927\u6570\u8d8a\u754c\u5904\u7406","text":"

    \u5f53\u6570\u7ec4\u957f\u5ea6\u5f88\u5927\u65f6\uff0c\u52a0\u6cd5 \\(i + j\\) \u7684\u7ed3\u679c\u6709\u53ef\u80fd\u4f1a\u8d85\u51fa int \u7c7b\u578b\u7684\u53d6\u503c\u8303\u56f4\u3002\u5728\u6b64\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u9700\u8981\u6362\u4e00\u79cd\u8ba1\u7b97\u4e2d\u70b9\u7684\u5199\u6cd5\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nint m = (i + j) / 2;\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nint m = i + (j - i) / 2;\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nint m = (i + j) / 2;\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nint m = i + (j - i) / 2;\n
    # Python \u4e2d\u7684\u6570\u5b57\u7406\u8bba\u4e0a\u53ef\u4ee5\u65e0\u9650\u5927\uff08\u53d6\u51b3\u4e8e\u5185\u5b58\u5927\u5c0f\uff09\n# \u56e0\u6b64\u65e0\u9700\u8003\u8651\u5927\u6570\u8d8a\u754c\u95ee\u9898\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nm := (i + j) / 2\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nm := i + (j - i) / 2\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nlet m = parseInt((i + j) / 2);\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nlet m = parseInt(i + (j - i) / 2);\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa Number \u7684\u53d6\u503c\u8303\u56f4\nlet m = Math.floor((i + j) / 2);\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nlet m = Math.floor(i + (j - i) / 2);\n
    \n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nint m = (i + j) / 2;\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nint m = i + (j - i) / 2;\n
    // (i + j) \u6709\u53ef\u80fd\u8d85\u51fa int \u7684\u53d6\u503c\u8303\u56f4\nlet m = (i + j) / 2\n// \u66f4\u6362\u4e3a\u6b64\u5199\u6cd5\u5219\u4e0d\u4f1a\u8d8a\u754c\nlet m = i + (j - 1) / 2\n
    \n
    "},{"location":"chapter_searching/binary_search/#1022","title":"10.2.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(\\log n)\\) \uff1a\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u957f\u5ea6\uff1b\u6bcf\u8f6e\u6392\u9664\u4e00\u534a\u7684\u533a\u95f4\uff0c\u56e0\u6b64\u5faa\u73af\u8f6e\u6570\u4e3a \\(\\log_2 n\\) \uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u6307\u9488 i , j \u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u7a7a\u95f4\u3002

    "},{"location":"chapter_searching/binary_search/#1023","title":"10.2.3. \u00a0 \u4f18\u70b9\u4e0e\u7f3a\u70b9","text":"

    \u4e8c\u5206\u67e5\u627e\u6548\u7387\u5f88\u9ad8\uff0c\u4f53\u73b0\u5728\uff1a

    • \u4e8c\u5206\u67e5\u627e\u65f6\u95f4\u590d\u6742\u5ea6\u4f4e\u3002\u5bf9\u6570\u9636\u5728\u6570\u636e\u91cf\u5f88\u5927\u65f6\u5177\u6709\u5de8\u5927\u4f18\u52bf\uff0c\u4f8b\u5982\uff0c\u5f53\u6570\u636e\u5927\u5c0f \\(n = 2^{20}\\) \u65f6\uff0c\u7ebf\u6027\u67e5\u627e\u9700\u8981 \\(2^{20} = 1048576\\) \u8f6e\u5faa\u73af\uff0c\u800c\u4e8c\u5206\u67e5\u627e\u4ec5\u9700\u8981 \\(\\log_2 2^{20} = 20\\) \u8f6e\u5faa\u73af\u3002
    • \u4e8c\u5206\u67e5\u627e\u4e0d\u9700\u8981\u989d\u5916\u7a7a\u95f4\u3002\u76f8\u5bf9\u4e8e\u501f\u52a9\u989d\u5916\u6570\u636e\u7ed3\u6784\u6765\u5b9e\u73b0\u67e5\u627e\u7684\u7b97\u6cd5\u6765\u8bf4\uff0c\u5176\u66f4\u52a0\u8282\u7ea6\u7a7a\u95f4\u4f7f\u7528\u3002

    \u4f46\u5e76\u4e0d\u610f\u5473\u7740\u6240\u6709\u60c5\u51b5\u4e0b\u90fd\u5e94\u4f7f\u7528\u4e8c\u5206\u67e5\u627e\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    • \u4e8c\u5206\u67e5\u627e\u4ec5\u9002\u7528\u4e8e\u6709\u5e8f\u6570\u636e\u3002\u5982\u679c\u8f93\u5165\u6570\u636e\u662f\u65e0\u5e8f\u7684\uff0c\u4e3a\u4e86\u4f7f\u7528\u4e8c\u5206\u67e5\u627e\u800c\u4e13\u95e8\u6267\u884c\u6570\u636e\u6392\u5e8f\uff0c\u90a3\u4e48\u662f\u5f97\u4e0d\u507f\u5931\u7684\uff0c\u56e0\u4e3a\u6392\u5e8f\u7b97\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e00\u822c\u4e3a \\(O(n \\log n)\\) \uff0c\u6bd4\u7ebf\u6027\u67e5\u627e\u548c\u4e8c\u5206\u67e5\u627e\u90fd\u66f4\u5dee\u3002\u518d\u4f8b\u5982\uff0c\u5bf9\u4e8e\u9891\u7e41\u63d2\u5165\u5143\u7d20\u7684\u573a\u666f\uff0c\u4e3a\u4e86\u4fdd\u6301\u6570\u7ec4\u7684\u6709\u5e8f\u6027\uff0c\u9700\u8981\u5c06\u5143\u7d20\u63d2\u5165\u5230\u7279\u5b9a\u4f4d\u7f6e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff0c\u4e5f\u662f\u975e\u5e38\u6602\u8d35\u7684\u3002
    • \u4e8c\u5206\u67e5\u627e\u4ec5\u9002\u7528\u4e8e\u6570\u7ec4\u3002\u7531\u4e8e\u5728\u4e8c\u5206\u67e5\u627e\u4e2d\uff0c\u8bbf\u95ee\u7d22\u5f15\u662f \u201c\u975e\u8fde\u7eed\u201d \u7684\uff0c\u56e0\u6b64\u94fe\u8868\u6216\u8005\u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u90fd\u65e0\u6cd5\u4f7f\u7528\u3002
    • \u5728\u5c0f\u6570\u636e\u91cf\u4e0b\uff0c\u7ebf\u6027\u67e5\u627e\u7684\u6027\u80fd\u66f4\u597d\u3002\u5728\u7ebf\u6027\u67e5\u627e\u4e2d\uff0c\u6bcf\u8f6e\u53ea\u9700\u8981 1 \u6b21\u5224\u65ad\u64cd\u4f5c\uff1b\u800c\u5728\u4e8c\u5206\u67e5\u627e\u4e2d\uff0c\u9700\u8981 1 \u6b21\u52a0\u6cd5\u30011 \u6b21\u9664\u6cd5\u30011 ~ 3 \u6b21\u5224\u65ad\u64cd\u4f5c\u30011 \u6b21\u52a0\u6cd5\uff08\u51cf\u6cd5\uff09\uff0c\u5171 4 ~ 6 \u4e2a\u5355\u5143\u64cd\u4f5c\uff1b\u56e0\u6b64\uff0c\u5728\u6570\u636e\u91cf \\(n\\) \u8f83\u5c0f\u65f6\uff0c\u7ebf\u6027\u67e5\u627e\u53cd\u800c\u6bd4\u4e8c\u5206\u67e5\u627e\u66f4\u5feb\u3002
    "},{"location":"chapter_searching/hashing_search/","title":"10.3. \u00a0 \u54c8\u5e0c\u67e5\u627e","text":"

    Question

    \u5728\u6570\u636e\u91cf\u5f88\u5927\u65f6\uff0c\u300c\u7ebf\u6027\u67e5\u627e\u300d\u592a\u6162\uff1b\u800c\u300c\u4e8c\u5206\u67e5\u627e\u300d\u8981\u6c42\u6570\u636e\u5fc5\u987b\u662f\u6709\u5e8f\u7684\uff0c\u5e76\u4e14\u53ea\u80fd\u5728\u6570\u7ec4\u4e2d\u5e94\u7528\u3002\u90a3\u4e48\u662f\u5426\u6709\u65b9\u6cd5\u53ef\u4ee5\u540c\u65f6\u907f\u514d\u4e0a\u8ff0\u7f3a\u70b9\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u6b64\u65b9\u6cd5\u88ab\u79f0\u4e3a\u300c\u54c8\u5e0c\u67e5\u627e\u300d\u3002

    \u300c\u54c8\u5e0c\u67e5\u627e Hash Searching\u300d\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868\u6765\u5b58\u50a8\u9700\u8981\u7684\u300c\u952e\u503c\u5bf9 Key Value Pair\u300d\uff0c\u6211\u4eec\u53ef\u4ee5\u5728 \\(O(1)\\) \u65f6\u95f4\u4e0b\u5b9e\u73b0\u201c\u952e \\(\\rightarrow\\) \u503c\u201d\u6620\u5c04\u67e5\u627e\uff0c\u4f53\u73b0\u7740\u201c\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u201d\u7684\u7b97\u6cd5\u601d\u60f3\u3002

    "},{"location":"chapter_searching/hashing_search/#1031","title":"10.3.1. \u00a0 \u7b97\u6cd5\u5b9e\u73b0","text":"

    \u5982\u679c\u6211\u4eec\u60f3\u8981\u7ed9\u5b9a\u6570\u7ec4\u4e2d\u7684\u4e00\u4e2a\u76ee\u6807\u5143\u7d20 target \uff0c\u83b7\u53d6\u8be5\u5143\u7d20\u7684\u7d22\u5f15\uff0c\u90a3\u4e48\u53ef\u4ee5\u501f\u52a9\u4e00\u4e2a\u54c8\u5e0c\u8868\u5b9e\u73b0\u67e5\u627e\u3002

    Fig. \u54c8\u5e0c\u67e5\u627e\u6570\u7ec4\u7d22\u5f15

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hashing_search.java
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint hashingSearchArray(Map<Integer, Integer> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.getOrDefault(target, -1);\n}\n
    hashing_search.cpp
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint hashingSearchArray(unordered_map<int, int> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nif (map.find(target) == map.end())\nreturn -1;\nreturn map[target];\n}\n
    hashing_search.py
    def hashing_search_array(mapp: Dict[int, int], target: int) -> int:\n\"\"\" \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 \"\"\"\n# \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n# \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn mapp.get(target, -1)\n
    hashing_search.go
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc hashingSearchArray(m map[int]int, target int) int {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nif index, ok := m[target]; ok {\nreturn index\n} else {\nreturn -1\n}\n}\n
    hashing_search.js
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunction hashingSearchArray(map, target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.has(target) ? map.get(target) : -1;\n}\n
    hashing_search.ts
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunction hashingSearchArray(map: Map<number, number>, target: number): number {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.has(target) ? (map.get(target) as number) : -1;\n}\n
    hashing_search.c
    [class]{}-[func]{hashingSearchArray}\n
    hashing_search.cs
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint hashingSearchArray(Dictionary<int, int> map, int target)\n{\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map.GetValueOrDefault(target, -1);\n}\n
    hashing_search.swift
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc hashingSearchArray(map: [Int: Int], target: Int) -> Int {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1\nreturn map[target, default: -1]\n}\n
    hashing_search.zig
    // \u54c8\u5e0c\u67e5\u627e\uff08\u6570\u7ec4\uff09\nfn hashingSearchArray(comptime T: type, map: std.AutoHashMap(T, T), target: T) T {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7d22\u5f15\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de -1   \nif (map.getKey(target) == null) return -1;\nreturn map.get(target).?;\n}\n

    \u518d\u6bd4\u5982\uff0c\u5982\u679c\u6211\u4eec\u60f3\u8981\u7ed9\u5b9a\u4e00\u4e2a\u76ee\u6807\u7ed3\u70b9\u503c target \uff0c\u83b7\u53d6\u5bf9\u5e94\u7684\u94fe\u8868\u7ed3\u70b9\u5bf9\u8c61\uff0c\u90a3\u4e48\u4e5f\u53ef\u4ee5\u4f7f\u7528\u54c8\u5e0c\u67e5\u627e\u5b9e\u73b0\u3002

    Fig. \u54c8\u5e0c\u67e5\u627e\u94fe\u8868\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig hashing_search.java
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode hashingSearchLinkedList(Map<Integer, ListNode> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.getOrDefault(target, null);\n}\n
    hashing_search.cpp
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode* hashingSearchLinkedList(unordered_map<int, ListNode*> map, int target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de nullptr\nif (map.find(target) == map.end())\nreturn nullptr;\nreturn map[target];\n}\n
    hashing_search.py
    def hashing_search_linkedlist(mapp: Dict[int, ListNode], target: int) -> Optional[ListNode]:\n\"\"\" \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 \"\"\"\n# \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u5143\u7d20\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n# \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de None\nreturn mapp.get(target, None)\n
    hashing_search.go
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc hashingSearchLinkedList(m map[int]*ListNode, target int) *ListNode {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de nil\nif node, ok := m[target]; ok {\nreturn node\n} else {\nreturn nil\n}\n}\n
    hashing_search.js
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunction hashingSearchLinkedList(map, target) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.has(target) ? map.get(target) : null;\n}\n
    hashing_search.ts
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunction hashingSearchLinkedList(map: Map<number, ListNode>, target: number): ListNode | null {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.has(target) ? (map.get(target) as ListNode) : null;\n}\n
    hashing_search.c
    [class]{}-[func]{hashingSearchLinkedList}\n
    hashing_search.cs
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode? hashingSearchLinkedList(Dictionary<int, ListNode> map, int target)\n{\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map.GetValueOrDefault(target);\n}\n
    hashing_search.swift
    /* \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc hashingSearchLinkedList(map: [Int: ListNode], target: Int) -> ListNode? {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null\nreturn map[target]\n}\n
    hashing_search.zig
    // \u54c8\u5e0c\u67e5\u627e\uff08\u94fe\u8868\uff09\nfn hashingSearchLinkedList(comptime T: type, map: std.AutoHashMap(T, *inc.ListNode(T)), target: T) ?*inc.ListNode(T) {\n// \u54c8\u5e0c\u8868\u7684 key: \u76ee\u6807\u7ed3\u70b9\u503c\uff0cvalue: \u7ed3\u70b9\u5bf9\u8c61\n// \u82e5\u54c8\u5e0c\u8868\u4e2d\u65e0\u6b64 key \uff0c\u8fd4\u56de null \nif (map.getKey(target) == null) return null;\nreturn map.get(target);\n}\n
    "},{"location":"chapter_searching/hashing_search/#1032","title":"10.3.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u54c8\u5e0c\u8868\u7684\u67e5\u627e\u64cd\u4f5c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u957f\u5ea6\u3002

    "},{"location":"chapter_searching/hashing_search/#1033","title":"10.3.3. \u00a0 \u4f18\u70b9\u4e0e\u7f3a\u70b9","text":"

    \u5728\u54c8\u5e0c\u8868\u4e2d\uff0c\u67e5\u627e\u3001\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u7684\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(1)\\) \uff0c\u8fd9\u610f\u5473\u7740\u65e0\u8bba\u662f\u9ad8\u9891\u589e\u5220\u8fd8\u662f\u9ad8\u9891\u67e5\u627e\u573a\u666f\uff0c\u54c8\u5e0c\u67e5\u627e\u7684\u6027\u80fd\u8868\u73b0\u90fd\u975e\u5e38\u597d\u3002\u5f53\u7136\uff0c\u4e00\u5207\u7684\u524d\u63d0\u662f\u4fdd\u8bc1\u54c8\u5e0c\u8868\u672a\u9000\u5316\u3002

    \u5373\u4f7f\u5982\u6b64\uff0c\u54c8\u5e0c\u67e5\u627e\u4ecd\u5b58\u5728\u4e00\u4e9b\u95ee\u9898\uff0c\u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u9700\u8981\u6839\u636e\u60c5\u51b5\u7075\u6d3b\u9009\u62e9\u65b9\u6cd5\u3002

    • \u8f85\u52a9\u54c8\u5e0c\u8868 \u9700\u8981\u4f7f\u7528 \\(O(n)\\) \u7684\u989d\u5916\u7a7a\u95f4\uff0c\u610f\u5473\u7740\u9700\u8981\u9884\u7559\u66f4\u591a\u7684\u8ba1\u7b97\u673a\u5185\u5b58\uff1b
    • \u5efa\u7acb\u548c\u7ef4\u62a4\u54c8\u5e0c\u8868\u9700\u8981\u65f6\u95f4\uff0c\u56e0\u6b64\u54c8\u5e0c\u67e5\u627e \u4e0d\u9002\u5408\u9ad8\u9891\u589e\u5220\u3001\u4f4e\u9891\u67e5\u627e\u7684\u4f7f\u7528\u573a\u666f\uff1b
    • \u5f53\u54c8\u5e0c\u51b2\u7a81\u4e25\u91cd\u65f6\uff0c\u54c8\u5e0c\u8868\u4f1a\u9000\u5316\u4e3a\u94fe\u8868\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n)\\) \uff1b
    • \u5f53\u6570\u636e\u91cf\u5f88\u5c0f\u65f6\uff0c\u7ebf\u6027\u67e5\u627e\u6bd4\u54c8\u5e0c\u67e5\u627e\u66f4\u5feb\u3002\u8fd9\u662f\u56e0\u4e3a\u8ba1\u7b97\u54c8\u5e0c\u6620\u5c04\u51fd\u6570\u53ef\u80fd\u6bd4\u904d\u5386\u4e00\u4e2a\u5c0f\u578b\u6570\u7ec4\u66f4\u6162\uff1b
    "},{"location":"chapter_searching/linear_search/","title":"10.1. \u00a0 \u7ebf\u6027\u67e5\u627e","text":"

    \u300c\u7ebf\u6027\u67e5\u627e Linear Search\u300d\u662f\u4e00\u79cd\u6700\u57fa\u7840\u7684\u67e5\u627e\u65b9\u6cd5\uff0c\u5176\u4ece\u6570\u636e\u7ed3\u6784\u7684\u4e00\u7aef\u5f00\u59cb\uff0c\u4f9d\u6b21\u8bbf\u95ee\u6bcf\u4e2a\u5143\u7d20\uff0c\u76f4\u5230\u53e6\u4e00\u7aef\u540e\u505c\u6b62\u3002

    "},{"location":"chapter_searching/linear_search/#1011","title":"10.1.1. \u00a0 \u7b97\u6cd5\u5b9e\u73b0","text":"

    \u7ebf\u6027\u67e5\u627e\u5b9e\u8d28\u4e0a\u5c31\u662f\u904d\u5386\u6570\u636e\u7ed3\u6784 + \u5224\u65ad\u6761\u4ef6\u3002\u6bd4\u5982\uff0c\u6211\u4eec\u60f3\u8981\u5728\u6570\u7ec4 nums \u4e2d\u67e5\u627e\u76ee\u6807\u5143\u7d20 target \u7684\u5bf9\u5e94\u7d22\u5f15\uff0c\u90a3\u4e48\u53ef\u4ee5\u5728\u6570\u7ec4\u4e2d\u8fdb\u884c\u7ebf\u6027\u67e5\u627e\u3002

    Fig. \u5728\u6570\u7ec4\u4e2d\u7ebf\u6027\u67e5\u627e\u5143\u7d20

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linear_search.java
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint linearSearchArray(int[] nums, int target) {\n// \u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.length; i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] == target)\nreturn i;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.cpp
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint linearSearchArray(vector<int>& nums, int target) {\n// \u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.size(); i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] == target)\nreturn i;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.py
    def linear_search_array(nums: List[int], target: int) -> int:\n\"\"\" \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 \"\"\"\n# \u904d\u5386\u6570\u7ec4\nfor i in range(len(nums)):\nif nums[i] == target:  # \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nreturn i\nreturn -1                  # \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\n
    linear_search.go
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc linearSearchArray(nums []int, target int) int {\n// \u904d\u5386\u6570\u7ec4\nfor i := 0; i < len(nums); i++ {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif nums[i] == target {\nreturn i\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    linear_search.js
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunction linearSearchArray(nums, target) {\n// \u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] === target) {\nreturn i;\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1; }\n
    linear_search.ts
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09*/\nfunction linearSearchArray(nums: number[], target: number): number {\n// \u904d\u5386\u6570\u7ec4\nfor (let i = 0; i < nums.length; i++) {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] === target) {\nreturn i;\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.c
    [class]{}-[func]{linearSearchArray}\n
    linear_search.cs
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nint linearSearchArray(int[] nums, int target)\n{\n// \u904d\u5386\u6570\u7ec4\nfor (int i = 0; i < nums.Length; i++)\n{\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif (nums[i] == target)\nreturn i;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n
    linear_search.swift
    /* \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09 */\nfunc linearSearchArray(nums: [Int], target: Int) -> Int {\n// \u904d\u5386\u6570\u7ec4\nfor i in nums.indices {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de\u5176\u7d22\u5f15\nif nums[i] == target {\nreturn i\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1\n}\n
    linear_search.zig
    // \u7ebf\u6027\u67e5\u627e\uff08\u6570\u7ec4\uff09\nfn linearSearchArray(comptime T: type, nums: std.ArrayList(T), target: T) T {\n// \u904d\u5386\u6570\u7ec4\nfor (nums.items) |num, i| {\n// \u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c \u8fd4\u56de\u5176\u7d22\u5f15\nif (num == target) {\nreturn @intCast(T, i);\n}\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de -1\nreturn -1;\n}\n

    \u518d\u6bd4\u5982\uff0c\u6211\u4eec\u60f3\u8981\u5728\u7ed9\u5b9a\u4e00\u4e2a\u76ee\u6807\u7ed3\u70b9\u503c target \uff0c\u8fd4\u56de\u6b64\u7ed3\u70b9\u5bf9\u8c61\uff0c\u4e5f\u53ef\u4ee5\u5728\u94fe\u8868\u4e2d\u8fdb\u884c\u7ebf\u6027\u67e5\u627e\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linear_search.java
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode linearSearchLinkedList(ListNode head, int target) {\n// \u904d\u5386\u94fe\u8868\nwhile (head != null) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.val == target)\nreturn head;\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.cpp
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode* linearSearchLinkedList(ListNode* head, int target) {\n// \u904d\u5386\u94fe\u8868\nwhile (head != nullptr) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head->val == target)\nreturn head;\nhead = head->next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de nullptr\nreturn nullptr;\n}\n
    linear_search.py
    def linear_search_linkedlist(head: ListNode, target: int) -> Optional[ListNode]:\n\"\"\" \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 \"\"\"\n# \u904d\u5386\u94fe\u8868\nwhile head:\nif head.val == target: # \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nreturn head\nhead = head.next\nreturn None                # \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de None\n
    linear_search.go
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc linearSearchLinkedList(node *ListNode, target int) *ListNode {\n// \u904d\u5386\u94fe\u8868\nfor node != nil {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif node.Val == target {\nreturn node\n}\nnode = node.Next\n}\n// \u672a\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u8fd4\u56de nil\nreturn nil\n}\n
    linear_search.js
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09*/\nfunction linearSearchLinkedList(head, target) {\n// \u904d\u5386\u94fe\u8868\nwhile(head) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif(head.val === target) {\nreturn head;\n}\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.ts
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09*/\nfunction linearSearchLinkedList(head: ListNode | null, target: number): ListNode | null {\n// \u904d\u5386\u94fe\u8868\nwhile (head) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.val === target) {\nreturn head;\n}\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.c
    [class]{}-[func]{linearSearchLinkedList}\n
    linear_search.cs
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nListNode? linearSearchLinkedList(ListNode head, int target)\n{\n// \u904d\u5386\u94fe\u8868\nwhile (head != null)\n{\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.val == target)\nreturn head;\nhead = head.next;\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn null;\n}\n
    linear_search.swift
    /* \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09 */\nfunc linearSearchLinkedList(head: ListNode?, target: Int) -> ListNode? {\nvar head = head\n// \u904d\u5386\u94fe\u8868\nwhile head != nil {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif head?.val == target {\nreturn head\n}\nhead = head?.next\n}\n// \u672a\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de null\nreturn nil\n}\n
    linear_search.zig
    // \u7ebf\u6027\u67e5\u627e\uff08\u94fe\u8868\uff09\nfn linearSearchLinkedList(comptime T: type, node: ?*inc.ListNode(T), target: T) ?*inc.ListNode(T) {\nvar head = node;\n// \u904d\u5386\u94fe\u8868\nwhile (head != null) {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8fd4\u56de\u4e4b\nif (head.?.val == target) return head;\nhead = head.?.next;\n}\nreturn null;\n}\n
    "},{"location":"chapter_searching/linear_search/#1012","title":"10.1.2. \u00a0 \u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u5176\u4e2d \\(n\\) \u4e3a\u6570\u7ec4\u6216\u94fe\u8868\u957f\u5ea6\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u65e0\u9700\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\u3002

    "},{"location":"chapter_searching/linear_search/#1013","title":"10.1.3. \u00a0 \u4f18\u70b9\u4e0e\u7f3a\u70b9","text":"

    \u7ebf\u6027\u67e5\u627e\u7684\u901a\u7528\u6027\u6781\u4f73\u3002\u7531\u4e8e\u7ebf\u6027\u67e5\u627e\u662f\u4f9d\u6b21\u8bbf\u95ee\u5143\u7d20\u7684\uff0c\u5373\u6ca1\u6709\u8df3\u8dc3\u8bbf\u95ee\u5143\u7d20\uff0c\u56e0\u6b64\u6570\u7ec4\u6216\u94fe\u8868\u7686\u9002\u7528\u3002

    \u7ebf\u6027\u67e5\u627e\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u592a\u9ad8\u3002\u5728\u6570\u636e\u91cf \\(n\\) \u5f88\u5927\u65f6\uff0c\u67e5\u627e\u6548\u7387\u5f88\u4f4e\u3002

    "},{"location":"chapter_searching/summary/","title":"10.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u7ebf\u6027\u67e5\u627e\u662f\u4e00\u79cd\u6700\u57fa\u7840\u7684\u67e5\u627e\u65b9\u6cd5\uff0c\u901a\u8fc7\u904d\u5386\u6570\u636e\u7ed3\u6784 + \u5224\u65ad\u6761\u4ef6\u5b9e\u73b0\u67e5\u627e\u3002
    • \u4e8c\u5206\u67e5\u627e\u5229\u7528\u6570\u636e\u7684\u6709\u5e8f\u6027\uff0c\u901a\u8fc7\u5faa\u73af\u4e0d\u65ad\u7f29\u5c0f\u4e00\u534a\u641c\u7d22\u533a\u95f4\u6765\u5b9e\u73b0\u67e5\u627e\uff0c\u5176\u8981\u6c42\u8f93\u5165\u6570\u636e\u662f\u6709\u5e8f\u7684\uff0c\u5e76\u4e14\u4ec5\u9002\u7528\u4e8e\u6570\u7ec4\u6216\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6570\u636e\u7ed3\u6784\u3002
    • \u54c8\u5e0c\u67e5\u627e\u501f\u52a9\u54c8\u5e0c\u8868\u6765\u5b9e\u73b0\u5e38\u6570\u9636\u65f6\u95f4\u590d\u6742\u5ea6\u7684\u67e5\u627e\u64cd\u4f5c\uff0c\u4f53\u73b0\u4ee5\u7a7a\u95f4\u6362\u65f6\u95f4\u7684\u7b97\u6cd5\u601d\u60f3\u3002
    • \u4e0b\u8868\u603b\u7ed3\u5bf9\u6bd4\u4e86\u67e5\u627e\u7b97\u6cd5\u7684\u5404\u79cd\u7279\u6027\u548c\u65f6\u95f4\u590d\u6742\u5ea6\u3002
    \u7ebf\u6027\u67e5\u627e \u4e8c\u5206\u67e5\u627e \u54c8\u5e0c\u67e5\u627e \u9002\u7528\u6570\u636e\u7ed3\u6784 \u6570\u7ec4\u3001\u94fe\u8868 \u6570\u7ec4 \u6570\u7ec4\u3001\u94fe\u8868 \u8f93\u5165\u6570\u636e\u8981\u6c42 \u65e0 \u6709\u5e8f \u65e0 \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u67e5\u627e / \u63d2\u5165 / \u5220\u9664 \\(O(n)\\) / \\(O(1)\\) / \\(O(n)\\) \\(O(\\log n)\\) / \\(O(n)\\) / \\(O(n)\\) \\(O(1)\\) / \\(O(1)\\) / \\(O(1)\\) \u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u67e5\u627e / \u63d2\u5165 / \u5220\u9664 \\(O(n)\\) / \\(O(1)\\) / \\(O(n)\\) \\(O(\\log n)\\) / \\(O(n)\\) / \\(O(n)\\) \\(O(n)\\) / \\(O(n)\\) / \\(O(n)\\) \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \\(O(1)\\) \\(O(n)\\)"},{"location":"chapter_sorting/bubble_sort/","title":"11.2. \u00a0 \u5192\u6ce1\u6392\u5e8f","text":"

    \u300c\u5192\u6ce1\u6392\u5e8f Bubble Sort\u300d\u662f\u4e00\u79cd\u6700\u57fa\u7840\u7684\u6392\u5e8f\u7b97\u6cd5\uff0c\u975e\u5e38\u9002\u5408\u4f5c\u4e3a\u7b2c\u4e00\u4e2a\u5b66\u4e60\u7684\u6392\u5e8f\u7b97\u6cd5\u3002\u987e\u540d\u601d\u4e49\uff0c\u300c\u5192\u6ce1\u300d\u662f\u8be5\u7b97\u6cd5\u7684\u6838\u5fc3\u64cd\u4f5c\u3002

    \u4e3a\u4ec0\u4e48\u53eb\u201c\u5192\u6ce1\u201d

    \u5728\u6c34\u4e2d\uff0c\u8d8a\u5927\u7684\u6ce1\u6ce1\u6d6e\u529b\u8d8a\u5927\uff0c\u6240\u4ee5\u6700\u5927\u7684\u6ce1\u6ce1\u4f1a\u6700\u5148\u6d6e\u5230\u6c34\u9762\u3002

    \u300c\u5192\u6ce1\u300d\u64cd\u4f5c\u5219\u662f\u5728\u6a21\u62df\u4e0a\u8ff0\u8fc7\u7a0b\uff0c\u5177\u4f53\u505a\u6cd5\u4e3a\uff1a\u4ece\u6570\u7ec4\u6700\u5de6\u7aef\u5f00\u59cb\u5411\u53f3\u904d\u5386\uff0c\u4f9d\u6b21\u5bf9\u6bd4\u76f8\u90bb\u5143\u7d20\u5927\u5c0f\uff0c\u82e5 \u5de6\u5143\u7d20 > \u53f3\u5143\u7d20 \u5219\u5c06\u5b83\u4fe9\u4ea4\u6362\uff0c\u6700\u7ec8\u53ef\u5c06\u6700\u5927\u5143\u7d20\u79fb\u52a8\u81f3\u6570\u7ec4\u6700\u53f3\u7aef\u3002

    \u5b8c\u6210\u6b64\u6b21\u5192\u6ce1\u64cd\u4f5c\u540e\uff0c\u6570\u7ec4\u6700\u5927\u5143\u7d20\u5df2\u5728\u6b63\u786e\u4f4d\u7f6e\uff0c\u63a5\u4e0b\u6765\u53ea\u9700\u6392\u5e8f\u5269\u4f59 \\(n - 1\\) \u4e2a\u5143\u7d20\u3002

    <1><2><3><4><5><6><7>

    "},{"location":"chapter_sorting/bubble_sort/#1121","title":"11.2.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"
    1. \u8bbe\u6570\u7ec4\u957f\u5ea6\u4e3a \\(n\\) \uff0c\u5b8c\u6210\u7b2c\u4e00\u8f6e\u300c\u5192\u6ce1\u300d\u540e\uff0c\u6570\u7ec4\u6700\u5927\u5143\u7d20\u5df2\u5728\u6b63\u786e\u4f4d\u7f6e\uff0c\u63a5\u4e0b\u6765\u53ea\u9700\u6392\u5e8f\u5269\u4f59 \\(n - 1\\) \u4e2a\u5143\u7d20\u3002
    2. \u540c\u7406\uff0c\u5bf9\u5269\u4f59 \\(n - 1\\) \u4e2a\u5143\u7d20\u6267\u884c\u300c\u5192\u6ce1\u300d\uff0c\u53ef\u5c06\u7b2c\u4e8c\u5927\u5143\u7d20\u4ea4\u6362\u81f3\u6b63\u786e\u4f4d\u7f6e\uff0c\u56e0\u800c\u5f85\u6392\u5e8f\u5143\u7d20\u53ea\u5269 \\(n - 2\\) \u4e2a\u3002
    3. \u4ee5\u6b64\u7c7b\u63a8\u2026\u2026 \u5faa\u73af \\(n - 1\\) \u8f6e\u300c\u5192\u6ce1\u300d\uff0c\u5373\u53ef\u5b8c\u6210\u6574\u4e2a\u6570\u7ec4\u7684\u6392\u5e8f\u3002

    Fig. \u5192\u6ce1\u6392\u5e8f\u6d41\u7a0b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig bubble_sort.java
    /* \u5192\u6ce1\u6392\u5e8f */\nvoid bubbleSort(int[] nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.cpp
    /* \u5192\u6ce1\u6392\u5e8f */\nvoid bubbleSort(vector<int>& nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.size() - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\n// \u8fd9\u91cc\u4f7f\u7528\u4e86 std::swap() \u51fd\u6570\nswap(nums[j], nums[j + 1]);\n}\n}\n}\n}\n
    bubble_sort.py
    def bubble_sort(nums: List[int]) -> None:\n\"\"\" \u5192\u6ce1\u6392\u5e8f \"\"\"\nn: int = len(nums)\n# \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in range(n - 1, 0, -1):\n# \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in range(i):\nif nums[j] > nums[j + 1]:\n# \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j + 1] = nums[j + 1], nums[j]\n
    bubble_sort.go
    /* \u5192\u6ce1\u6392\u5e8f */\nfunc bubbleSort(nums []int) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := len(nums) - 1; i > 0; i-- {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j := 0; j < i; j++ {\nif nums[j] > nums[j+1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j+1] = nums[j+1], nums[j]\n}\n}\n}\n}\n
    bubble_sort.js
    /* \u5192\u6ce1\u6392\u5e8f */\nfunction bubbleSort(nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.ts
    /* \u5192\u6ce1\u6392\u5e8f */\nfunction bubbleSort(nums: number[]): void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.c
    [class]{}-[func]{bubbleSort}\n
    bubble_sort.cs
    /* \u5192\u6ce1\u6392\u5e8f */\nvoid bubbleSort(int[] nums)\n{\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.Length - 1; i > 0; i--)\n{\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++)\n{\nif (nums[j] > nums[j + 1])\n{\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    bubble_sort.swift
    /* \u5192\u6ce1\u6392\u5e8f */\nfunc bubbleSort(nums: inout [Int]) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in stride(from: nums.count - 1, to: 0, by: -1) {\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in stride(from: 0, to: i, by: 1) {\nif nums[j] > nums[j + 1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\n}\n}\n}\n}\n
    bubble_sort.zig
    // \u5192\u6ce1\u6392\u5e8f\nfn bubbleSort(nums: []i32) void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nvar i: usize = nums.len - 1;\nwhile (i > 0) : (i -= 1) {\nvar j: usize = 0;\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nwhile (j < i) : (j += 1) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nvar tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\n}\n}\n}\n}\n
    "},{"location":"chapter_sorting/bubble_sort/#1122","title":"11.2.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n^2)\\) \uff1a\u5404\u8f6e\u300c\u5192\u6ce1\u300d\u904d\u5386\u7684\u6570\u7ec4\u957f\u5ea6\u4e3a \\(n - 1\\) , \\(n - 2\\) , \\(\\cdots\\) , \\(2\\) , \\(1\\) \u6b21\uff0c\u6c42\u548c\u4e3a \\(\\frac{(n - 1) n}{2}\\) \uff0c\u56e0\u6b64\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u6307\u9488 \\(i\\) , \\(j\\) \u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u7684\u989d\u5916\u7a7a\u95f4\u3002

    \u539f\u5730\u6392\u5e8f\uff1a\u6307\u9488\u53d8\u91cf\u4ec5\u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u989d\u5916\u7a7a\u95f4\u3002

    \u7a33\u5b9a\u6392\u5e8f\uff1a\u4e0d\u4ea4\u6362\u76f8\u7b49\u5143\u7d20\u3002

    \u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u5f15\u5165 flag \u4f18\u5316\u540e\uff08\u89c1\u4e0b\u6587\uff09\uff0c\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \u3002

    "},{"location":"chapter_sorting/bubble_sort/#1123","title":"11.2.3. \u00a0 \u6548\u7387\u4f18\u5316","text":"

    \u6211\u4eec\u53d1\u73b0\uff0c\u82e5\u5728\u67d0\u8f6e\u300c\u5192\u6ce1\u300d\u4e2d\u672a\u6267\u884c\u4efb\u4f55\u4ea4\u6362\u64cd\u4f5c\uff0c\u5219\u8bf4\u660e\u6570\u7ec4\u5df2\u7ecf\u5b8c\u6210\u6392\u5e8f\uff0c\u53ef\u76f4\u63a5\u8fd4\u56de\u7ed3\u679c\u3002\u8003\u8651\u53ef\u4ee5\u589e\u52a0\u4e00\u4e2a\u6807\u5fd7\u4f4d flag \u6765\u76d1\u542c\u8be5\u60c5\u51b5\uff0c\u82e5\u51fa\u73b0\u5219\u76f4\u63a5\u8fd4\u56de\u3002

    \u4f18\u5316\u540e\uff0c\u5192\u6ce1\u6392\u5e8f\u7684\u6700\u5dee\u548c\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u4ecd\u4e3a \\(O(n^2)\\) \uff1b\u800c\u5728\u8f93\u5165\u6570\u7ec4 \u5df2\u6392\u5e8f \u65f6\uff0c\u8fbe\u5230 \u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig bubble_sort.java
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nvoid bubbleSortWithFlag(int[] nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.length - 1; i > 0; i--) {\nboolean flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.cpp
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nvoid bubbleSortWithFlag(vector<int>& nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.size() - 1; i > 0; i--) {\nbool flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\n// \u8fd9\u91cc\u4f7f\u7528\u4e86 std::swap() \u51fd\u6570\nswap(nums[j], nums[j + 1]);\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.py
    def bubble_sort_with_flag(nums: List[int]) -> None:\n\"\"\" \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09 \"\"\"\nn: int = len(nums)\n# \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in range(n - 1, 0, -1):\nflag: bool = False  # \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n# \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j in range(i):\nif nums[j] > nums[j + 1]:\n# \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j + 1] = nums[j + 1], nums[j]\nflag = True  # \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\nif not flag:\nbreak            # \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n
    bubble_sort.go
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunc bubbleSortWithFlag(nums []int) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := len(nums) - 1; i > 0; i-- {\nflag := false // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor j := 0; j < i; j++ {\nif nums[j] > nums[j+1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nnums[j], nums[j+1] = nums[j+1], nums[j]\nflag = true // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif flag == false { // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\nbreak\n}\n}\n}\n
    bubble_sort.js
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunction bubbleSortWithFlag(nums) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\nlet flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.ts
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunction bubbleSortWithFlag(nums: number[]): void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (let i = nums.length - 1; i > 0; i--) {\nlet flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (let j = 0; j < i; j++) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true; // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break; // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.c
    [class]{}-[func]{bubbleSortWithFlag}\n
    bubble_sort.cs
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nvoid bubbleSortWithFlag(int[] nums)\n{\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor (int i = nums.Length - 1; i > 0; i--)\n{\nbool flag = false; // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nfor (int j = 0; j < i; j++)\n{\nif (nums[j] > nums[j + 1])\n{\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nint tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;  // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif (!flag) break;     // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    bubble_sort.swift
    /* \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09*/\nfunc bubbleSortWithFlag(nums: inout [Int]) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i in stride(from: nums.count - 1, to: 0, by: -1) {\nvar flag = false // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\nfor j in stride(from: 0, to: i, by: 1) {\nif nums[j] > nums[j + 1] {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nlet tmp = nums[j]\nnums[j] = nums[j + 1]\nnums[j + 1] = tmp\nflag = true // \u8bb0\u5f55\u4ea4\u6362\u5143\u7d20\n}\n}\nif !flag { // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\nbreak\n}\n}\n}\n
    bubble_sort.zig
    // \u5192\u6ce1\u6392\u5e8f\uff08\u6807\u5fd7\u4f18\u5316\uff09\nfn bubbleSortWithFlag(nums: []i32) void {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nvar i: usize = nums.len - 1;\nwhile (i > 0) : (i -= 1) {\nvar flag = false;   // \u521d\u59cb\u5316\u6807\u5fd7\u4f4d\nvar j: usize = 0;\n// \u5185\u5faa\u73af\uff1a\u5192\u6ce1\u64cd\u4f5c\nwhile (j < i) : (j += 1) {\nif (nums[j] > nums[j + 1]) {\n// \u4ea4\u6362 nums[j] \u4e0e nums[j + 1]\nvar tmp = nums[j];\nnums[j] = nums[j + 1];\nnums[j + 1] = tmp;\nflag = true;\n}\n}\nif (!flag) break;   // \u6b64\u8f6e\u5192\u6ce1\u672a\u4ea4\u6362\u4efb\u4f55\u5143\u7d20\uff0c\u76f4\u63a5\u8df3\u51fa\n}\n}\n
    "},{"location":"chapter_sorting/insertion_sort/","title":"11.3. \u00a0 \u63d2\u5165\u6392\u5e8f","text":"

    \u300c\u63d2\u5165\u6392\u5e8f Insertion Sort\u300d\u662f\u4e00\u79cd\u57fa\u4e8e \u6570\u7ec4\u63d2\u5165\u64cd\u4f5c \u7684\u6392\u5e8f\u7b97\u6cd5\u3002

    \u300c\u63d2\u5165\u64cd\u4f5c\u300d\u539f\u7406\uff1a\u9009\u5b9a\u67d0\u4e2a\u5f85\u6392\u5e8f\u5143\u7d20\u4e3a\u57fa\u51c6\u6570 base\uff0c\u5c06 base \u4e0e\u5176\u5de6\u4fa7\u5df2\u6392\u5e8f\u533a\u95f4\u5143\u7d20\u4f9d\u6b21\u5bf9\u6bd4\u5927\u5c0f\uff0c\u5e76\u63d2\u5165\u5230\u6b63\u786e\u4f4d\u7f6e\u3002

    \u56de\u5fc6\u6570\u7ec4\u63d2\u5165\u64cd\u4f5c\uff0c\u6211\u4eec\u9700\u8981\u5c06\u4ece\u76ee\u6807\u7d22\u5f15\u5230 base \u4e4b\u95f4\u7684\u6240\u6709\u5143\u7d20\u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\uff0c\u7136\u540e\u518d\u5c06 base \u8d4b\u503c\u7ed9\u76ee\u6807\u7d22\u5f15\u3002

    Fig. \u5355\u6b21\u63d2\u5165\u64cd\u4f5c

    "},{"location":"chapter_sorting/insertion_sort/#1131","title":"11.3.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"
    1. \u7b2c 1 \u8f6e\u5148\u9009\u53d6\u6570\u7ec4\u7684 \u7b2c 2 \u4e2a\u5143\u7d20 \u4e3a base \uff0c\u6267\u884c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u540e\uff0c\u6570\u7ec4\u524d 2 \u4e2a\u5143\u7d20\u5df2\u5b8c\u6210\u6392\u5e8f\u3002
    2. \u7b2c 2 \u8f6e\u9009\u53d6 \u7b2c 3 \u4e2a\u5143\u7d20 \u4e3a base \uff0c\u6267\u884c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u540e\uff0c\u6570\u7ec4\u524d 3 \u4e2a\u5143\u7d20\u5df2\u5b8c\u6210\u6392\u5e8f\u3002
    3. \u4ee5\u6b64\u7c7b\u63a8\u2026\u2026\u6700\u540e\u4e00\u8f6e\u9009\u53d6 \u6570\u7ec4\u5c3e\u5143\u7d20 \u4e3a base \uff0c\u6267\u884c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u540e\uff0c\u6240\u6709\u5143\u7d20\u5df2\u5b8c\u6210\u6392\u5e8f\u3002

    Fig. \u63d2\u5165\u6392\u5e8f\u6d41\u7a0b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig insertion_sort.java
    /* \u63d2\u5165\u6392\u5e8f */\nvoid insertionSort(int[] nums) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (int i = 1; i < nums.length; i++) {\nint base = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.cpp
    /* \u63d2\u5165\u6392\u5e8f */\nvoid insertionSort(vector<int>& nums) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (int i = 1; i < nums.size(); i++) {\nint base = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.py
    def insertion_sort(nums: List[int]) -> None:\n\"\"\" \u63d2\u5165\u6392\u5e8f \"\"\"\n# \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]   \nfor i in range(1, len(nums)):\nbase: int = nums[i]\nj: int = i - 1\n# \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile j >= 0 and nums[j] > base:\nnums[j + 1] = nums[j]  # 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj -= 1\nnums[j + 1] = base         # 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n
    insertion_sort.go
    /* \u63d2\u5165\u6392\u5e8f */\nfunc insertionSort(nums []int) {\n// \u5916\u5faa\u73af\uff1a\u5f85\u6392\u5e8f\u5143\u7d20\u6570\u91cf\u4e3a n-1, n-2, ..., 1\nfor i := 1; i < len(nums); i++ {\nbase := nums[i]\nj := i - 1\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nfor j >= 0 && nums[j] > base {\nnums[j+1] = nums[j] // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--\n}\nnums[j+1] = base // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.js
    /* \u63d2\u5165\u6392\u5e8f */\nfunction insertionSort(nums) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (let i = 1; i < nums.length; i++) {\nlet base = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.ts
    /* \u63d2\u5165\u6392\u5e8f */\nfunction insertionSort(nums: number[]): void {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (let i = 1; i < nums.length; i++) {\nconst base = nums[i];\nlet j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > base) {\nnums[j + 1] = nums[j]; // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = base; // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.c
    [class]{}-[func]{insertionSort}\n
    insertion_sort.cs
    /* \u63d2\u5165\u6392\u5e8f */\nvoid insertionSort(int[] nums)\n{\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor (int i = 1; i < nums.Length; i++)\n{\nint bas = nums[i], j = i - 1;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 0 && nums[j] > bas)\n{\nnums[j + 1] = nums[j]; // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj--;\n}\nnums[j + 1] = bas;         // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.swift
    /* \u63d2\u5165\u6392\u5e8f */\nfunc insertionSort(nums: inout [Int]) {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nfor i in stride(from: 1, to: nums.count, by: 1) {\nlet base = nums[i]\nvar j = i - 1\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile j >= 0, nums[j] > base {\nnums[j + 1] = nums[j] // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\nj -= 1\n}\nnums[j + 1] = base // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    insertion_sort.zig
    // \u63d2\u5165\u6392\u5e8f\nfn insertionSort(nums: []i32) void {\n// \u5916\u5faa\u73af\uff1abase = nums[1], nums[2], ..., nums[n-1]\nvar i: usize = 1;\nwhile (i < nums.len) : (i += 1) {\nvar base = nums[i];\nvar j: usize = i;\n// \u5185\u5faa\u73af\uff1a\u5c06 base \u63d2\u5165\u5230\u5de6\u8fb9\u7684\u6b63\u786e\u4f4d\u7f6e\nwhile (j >= 1 and nums[j - 1] > base) : (j -= 1) {\nnums[j] = nums[j - 1];  // 1. \u5c06 nums[j] \u5411\u53f3\u79fb\u52a8\u4e00\u4f4d\n}\nnums[j] = base;             // 2. \u5c06 base \u8d4b\u503c\u5230\u6b63\u786e\u4f4d\u7f6e\n}\n}\n
    "},{"location":"chapter_sorting/insertion_sort/#1132","title":"11.3.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n^2)\\) \uff1a\u6700\u5dee\u60c5\u51b5\u4e0b\uff0c\u5404\u8f6e\u63d2\u5165\u64cd\u4f5c\u5faa\u73af \\(n - 1\\) , \\(n-2\\) , \\(\\cdots\\) , \\(2\\) , \\(1\\) \u6b21\uff0c\u6c42\u548c\u4e3a \\(\\frac{(n - 1) n}{2}\\) \uff0c\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(1)\\) \uff1a\u6307\u9488 \\(i\\) , \\(j\\) \u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u7684\u989d\u5916\u7a7a\u95f4\u3002

    \u539f\u5730\u6392\u5e8f\uff1a\u6307\u9488\u53d8\u91cf\u4ec5\u4f7f\u7528\u5e38\u6570\u5927\u5c0f\u989d\u5916\u7a7a\u95f4\u3002

    \u7a33\u5b9a\u6392\u5e8f\uff1a\u4e0d\u4ea4\u6362\u76f8\u7b49\u5143\u7d20\u3002

    \u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u6700\u4f73\u60c5\u51b5\u4e0b\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \u3002

    "},{"location":"chapter_sorting/insertion_sort/#1133-vs","title":"11.3.3. \u00a0 \u63d2\u5165\u6392\u5e8f vs \u5192\u6ce1\u6392\u5e8f","text":"

    Question

    \u867d\u7136\u300c\u63d2\u5165\u6392\u5e8f\u300d\u548c\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u4e3a \\(O(n^2)\\) \uff0c\u4f46\u5b9e\u9645\u8fd0\u884c\u901f\u5ea6\u5374\u6709\u5f88\u5927\u5dee\u522b\uff0c\u8fd9\u662f\u4e3a\u4ec0\u4e48\u5462\uff1f

    \u56de\u987e\u590d\u6742\u5ea6\u5206\u6790\uff0c\u4e24\u4e2a\u65b9\u6cd5\u7684\u5faa\u73af\u6b21\u6570\u90fd\u662f \\(\\frac{(n - 1) n}{2}\\) \u3002\u4f46\u4e0d\u540c\u7684\u662f\uff0c\u300c\u5192\u6ce1\u64cd\u4f5c\u300d\u662f\u5728\u505a \u5143\u7d20\u4ea4\u6362\uff0c\u9700\u8981\u501f\u52a9\u4e00\u4e2a\u4e34\u65f6\u53d8\u91cf\u5b9e\u73b0\uff0c\u5171 3 \u4e2a\u5355\u5143\u64cd\u4f5c\uff1b\u800c\u300c\u63d2\u5165\u64cd\u4f5c\u300d\u662f\u5728\u505a \u8d4b\u503c\uff0c\u53ea\u9700 1 \u4e2a\u5355\u5143\u64cd\u4f5c\uff1b\u56e0\u6b64\uff0c\u53ef\u4ee5\u7c97\u7565\u4f30\u8ba1\u51fa\u5192\u6ce1\u6392\u5e8f\u7684\u8ba1\u7b97\u5f00\u9500\u7ea6\u4e3a\u63d2\u5165\u6392\u5e8f\u7684 3 \u500d\u3002

    \u63d2\u5165\u6392\u5e8f\u8fd0\u884c\u901f\u5ea6\u5feb\uff0c\u5e76\u4e14\u5177\u6709\u539f\u5730\u3001\u7a33\u5b9a\u3001\u81ea\u9002\u5e94\u7684\u4f18\u70b9\uff0c\u56e0\u6b64\u5f88\u53d7\u6b22\u8fce\u3002\u5b9e\u9645\u4e0a\uff0c\u5305\u62ec Java \u5728\u5185\u7684\u8bb8\u591a\u7f16\u7a0b\u8bed\u8a00\u7684\u6392\u5e8f\u5e93\u51fd\u6570\u7684\u5b9e\u73b0\u90fd\u7528\u5230\u4e86\u63d2\u5165\u6392\u5e8f\u3002\u5e93\u51fd\u6570\u7684\u5927\u81f4\u601d\u8def\uff1a

    • \u5bf9\u4e8e \u957f\u6570\u7ec4\uff0c\u91c7\u7528\u57fa\u4e8e\u5206\u6cbb\u7684\u6392\u5e8f\u7b97\u6cd5\uff0c\u4f8b\u5982\u300c\u5feb\u901f\u6392\u5e8f\u300d\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n \\log n)\\) \uff1b
    • \u5bf9\u4e8e \u77ed\u6570\u7ec4\uff0c\u76f4\u63a5\u4f7f\u7528\u300c\u63d2\u5165\u6392\u5e8f\u300d\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \uff1b

    \u5728\u6570\u7ec4\u8f83\u77ed\u65f6\uff0c\u590d\u6742\u5ea6\u4e2d\u7684\u5e38\u6570\u9879\uff08\u5373\u6bcf\u8f6e\u4e2d\u7684\u5355\u5143\u64cd\u4f5c\u6570\u91cf\uff09\u5360\u4e3b\u5bfc\u4f5c\u7528\uff0c\u6b64\u65f6\u63d2\u5165\u6392\u5e8f\u8fd0\u884c\u5730\u66f4\u5feb\u3002\u8fd9\u4e2a\u73b0\u8c61\u4e0e\u300c\u7ebf\u6027\u67e5\u627e\u300d\u548c\u300c\u4e8c\u5206\u67e5\u627e\u300d\u7684\u60c5\u51b5\u7c7b\u4f3c\u3002

    "},{"location":"chapter_sorting/intro_to_sort/","title":"11.1. \u00a0 \u6392\u5e8f\u7b80\u4ecb","text":"

    \u300c\u6392\u5e8f\u7b97\u6cd5 Sorting Algorithm\u300d\u4f7f\u5f97\u5217\u8868\u4e2d\u7684\u6240\u6709\u5143\u7d20\u6309\u7167\u4ece\u5c0f\u5230\u5927\u7684\u987a\u5e8f\u6392\u5217\u3002

    • \u5f85\u6392\u5e8f\u7684\u5217\u8868\u7684 \u5143\u7d20\u7c7b\u578b \u53ef\u4ee5\u662f\u6574\u6570\u3001\u6d6e\u70b9\u6570\u3001\u5b57\u7b26\u3001\u6216\u5b57\u7b26\u4e32\uff1b
    • \u6392\u5e8f\u7b97\u6cd5\u53ef\u4ee5\u6839\u636e\u9700\u8981\u8bbe\u5b9a \u5224\u65ad\u89c4\u5219\uff0c\u4f8b\u5982\u6570\u5b57\u5927\u5c0f\u3001\u5b57\u7b26 ASCII \u7801\u987a\u5e8f\u3001\u81ea\u5b9a\u4e49\u89c4\u5219\uff1b

    Fig. \u6392\u5e8f\u4e2d\u4e0d\u540c\u7684\u5143\u7d20\u7c7b\u578b\u548c\u5224\u65ad\u89c4\u5219

    "},{"location":"chapter_sorting/intro_to_sort/#1111","title":"11.1.1. \u00a0 \u8bc4\u4ef7\u7ef4\u5ea6","text":"

    \u6392\u5e8f\u7b97\u6cd5\u4e3b\u8981\u53ef\u6839\u636e \u7a33\u5b9a\u6027 \u3001\u5c31\u5730\u6027 \u3001\u81ea\u9002\u5e94\u6027 \u3001\u6bd4\u8f83\u7c7b \u6765\u5206\u7c7b\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#_1","title":"\u7a33\u5b9a\u6027","text":"
    • \u300c\u7a33\u5b9a\u6392\u5e8f\u300d\u5728\u5b8c\u6210\u6392\u5e8f\u540e\uff0c\u4e0d\u6539\u53d8 \u76f8\u7b49\u5143\u7d20\u5728\u6570\u7ec4\u4e2d\u7684\u76f8\u5bf9\u987a\u5e8f\u3002
    • \u300c\u975e\u7a33\u5b9a\u6392\u5e8f\u300d\u5728\u5b8c\u6210\u6392\u5e8f\u540e\uff0c\u76f8\u7b49\u5143\u7d20\u5728\u6570\u7ec4\u4e2d\u7684\u76f8\u5bf9\u4f4d\u7f6e \u53ef\u80fd\u88ab\u6539\u53d8\u3002

    \u5047\u8bbe\u6211\u4eec\u6709\u4e00\u4e2a\u5b58\u50a8\u5b66\u751f\u4fe1\u606f\u7684\u8868\u683c\uff0c\u7b2c 1, 2 \u5217\u5206\u522b\u662f\u59d3\u540d\u548c\u5e74\u9f84\u3002\u90a3\u4e48\u5728\u4ee5\u4e0b\u793a\u4f8b\u4e2d\uff0c\u300c\u975e\u7a33\u5b9a\u6392\u5e8f\u300d\u4f1a\u5bfc\u81f4\u8f93\u5165\u6570\u636e\u7684\u6709\u5e8f\u6027\u4e22\u5931\u3002\u56e0\u6b64\u300c\u7a33\u5b9a\u6392\u5e8f\u300d\u662f\u5f88\u597d\u7684\u7279\u6027\uff0c\u5728\u591a\u7ea7\u6392\u5e8f\u4e2d\u662f\u5fc5\u987b\u7684\u3002

    # \u8f93\u5165\u6570\u636e\u662f\u6309\u7167\u59d3\u540d\u6392\u5e8f\u597d\u7684\n# (name, age)\n('A', 19)\n('B', 18)\n('C', 21)\n('D', 19)\n('E', 23)\n# \u5047\u8bbe\u4f7f\u7528\u975e\u7a33\u5b9a\u6392\u5e8f\u7b97\u6cd5\u6309\u5e74\u9f84\u6392\u5e8f\u5217\u8868\uff0c\n# \u7ed3\u679c\u4e2d ('D', 19) \u548c ('A', 19) \u7684\u76f8\u5bf9\u4f4d\u7f6e\u6539\u53d8\uff0c\n# \u8f93\u5165\u6570\u636e\u6309\u59d3\u540d\u6392\u5e8f\u7684\u6027\u8d28\u4e22\u5931\n('B', 18)\n('D', 19)\n('A', 19)\n('C', 21)\n('E', 23)\n
    "},{"location":"chapter_sorting/intro_to_sort/#_2","title":"\u5c31\u5730\u6027","text":"
    • \u300c\u539f\u5730\u6392\u5e8f\u300d\u65e0\u9700\u8f85\u52a9\u6570\u636e\uff0c\u4e0d\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff1b
    • \u300c\u975e\u539f\u5730\u6392\u5e8f\u300d\u9700\u8981\u501f\u52a9\u8f85\u52a9\u6570\u636e\uff0c\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff1b

    \u300c\u539f\u5730\u6392\u5e8f\u300d\u4e0d\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff0c\u53ef\u4ee5\u8282\u7ea6\u5185\u5b58\uff1b\u5e76\u4e14\u4e00\u822c\u60c5\u51b5\u4e0b\uff0c\u7531\u4e8e\u6570\u636e\u64cd\u4f5c\u51cf\u5c11\uff0c\u539f\u5730\u6392\u5e8f\u7684\u8fd0\u884c\u6548\u7387\u4e5f\u66f4\u9ad8\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#_3","title":"\u81ea\u9002\u5e94\u6027","text":"
    • \u300c\u81ea\u9002\u5e94\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u53d7\u8f93\u5165\u6570\u636e\u5f71\u54cd\uff0c\u5373\u6700\u4f73 / \u6700\u5dee / \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u4e0d\u76f8\u7b49\u3002
    • \u300c\u975e\u81ea\u9002\u5e94\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u6052\u5b9a\uff0c\u4e0e\u8f93\u5165\u6570\u636e\u65e0\u5173\u3002

    \u6211\u4eec\u5e0c\u671b \u6700\u5dee = \u5e73\u5747\uff0c\u5373\u4e0d\u5e0c\u671b\u6392\u5e8f\u7b97\u6cd5\u7684\u8fd0\u884c\u6548\u7387\u5728\u67d0\u4e9b\u8f93\u5165\u6570\u636e\u4e0b\u53d1\u751f\u52a3\u5316\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#_4","title":"\u6bd4\u8f83\u7c7b","text":"
    • \u300c\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u57fa\u4e8e\u5143\u7d20\u4e4b\u95f4\u7684\u6bd4\u8f83\u7b97\u5b50\uff08\u5c0f\u4e8e\u3001\u76f8\u7b49\u3001\u5927\u4e8e\uff09\u6765\u51b3\u5b9a\u5143\u7d20\u7684\u76f8\u5bf9\u987a\u5e8f\u3002
    • \u300c\u975e\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u4e0d\u57fa\u4e8e\u5143\u7d20\u4e4b\u95f4\u7684\u6bd4\u8f83\u7b97\u5b50\u6765\u51b3\u5b9a\u5143\u7d20\u7684\u76f8\u5bf9\u987a\u5e8f\u3002

    \u300c\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u6700\u4f18\u4e3a \\(O(n \\log n)\\) \uff1b\u800c\u300c\u975e\u6bd4\u8f83\u7c7b\u6392\u5e8f\u300d\u53ef\u4ee5\u8fbe\u5230 \\(O(n)\\) \u7684\u65f6\u95f4\u590d\u6742\u5ea6\uff0c\u4f46\u901a\u7528\u6027\u8f83\u5dee\u3002

    "},{"location":"chapter_sorting/intro_to_sort/#1112","title":"11.1.2. \u00a0 \u7406\u60f3\u6392\u5e8f\u7b97\u6cd5","text":"
    • \u8fd0\u884c\u5feb\uff0c\u5373\u65f6\u95f4\u590d\u6742\u5ea6\u4f4e\uff1b
    • \u7a33\u5b9a\u6392\u5e8f\uff0c\u5373\u6392\u5e8f\u540e\u76f8\u7b49\u5143\u7d20\u7684\u76f8\u5bf9\u4f4d\u7f6e\u4e0d\u53d8\u5316\uff1b
    • \u539f\u5730\u6392\u5e8f\uff0c\u5373\u8fd0\u884c\u4e2d\u4e0d\u4f7f\u7528\u989d\u5916\u7684\u8f85\u52a9\u7a7a\u95f4\uff1b
    • \u6b63\u5411\u81ea\u9002\u5e94\u6027\uff0c\u5373\u7b97\u6cd5\u7684\u8fd0\u884c\u6548\u7387\u4e0d\u4f1a\u5728\u67d0\u4e9b\u8f93\u5165\u6570\u636e\u4e0b\u53d1\u751f\u52a3\u5316\uff1b

    \u7136\u800c\uff0c\u6ca1\u6709\u6392\u5e8f\u7b97\u6cd5\u540c\u65f6\u5177\u5907\u4ee5\u4e0a\u6240\u6709\u7279\u6027\u3002\u6392\u5e8f\u7b97\u6cd5\u7684\u9009\u578b\u4f7f\u7528\u53d6\u51b3\u4e8e\u5177\u4f53\u7684\u5217\u8868\u7c7b\u578b\u3001\u5217\u8868\u957f\u5ea6\u3001\u5143\u7d20\u5206\u5e03\u7b49\u56e0\u7d20\u3002

    "},{"location":"chapter_sorting/merge_sort/","title":"11.5. \u00a0 \u5f52\u5e76\u6392\u5e8f","text":"

    \u300c\u5f52\u5e76\u6392\u5e8f Merge Sort\u300d\u662f\u7b97\u6cd5\u4e2d\u201c\u5206\u6cbb\u601d\u60f3\u201d\u7684\u5178\u578b\u4f53\u73b0\uff0c\u5176\u6709\u300c\u5212\u5206\u300d\u548c\u300c\u5408\u5e76\u300d\u4e24\u4e2a\u9636\u6bb5\uff1a

    1. \u5212\u5206\u9636\u6bb5\uff1a\u901a\u8fc7\u9012\u5f52\u4e0d\u65ad \u5c06\u6570\u7ec4\u4ece\u4e2d\u70b9\u4f4d\u7f6e\u5212\u5206\u5f00\uff0c\u5c06\u957f\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898\u8f6c\u5316\u4e3a\u77ed\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898\uff1b
    2. \u5408\u5e76\u9636\u6bb5\uff1a\u5212\u5206\u5230\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\uff0c\u5f00\u59cb\u5411\u4e0a\u5408\u5e76\uff0c\u4e0d\u65ad\u5c06 \u5de6\u3001\u53f3\u4e24\u4e2a\u77ed\u6392\u5e8f\u6570\u7ec4 \u5408\u5e76\u4e3a \u4e00\u4e2a\u957f\u6392\u5e8f\u6570\u7ec4\uff0c\u76f4\u81f3\u5408\u5e76\u81f3\u539f\u6570\u7ec4\u65f6\u5b8c\u6210\u6392\u5e8f\uff1b

    Fig. \u5f52\u5e76\u6392\u5e8f\u7684\u5212\u5206\u4e0e\u5408\u5e76\u9636\u6bb5

    "},{"location":"chapter_sorting/merge_sort/#1151","title":"11.5.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"

    \u300c\u9012\u5f52\u5212\u5206\u300d \u4ece\u9876\u81f3\u5e95\u9012\u5f52\u5730 \u5c06\u6570\u7ec4\u4ece\u4e2d\u70b9\u5207\u4e3a\u4e24\u4e2a\u5b50\u6570\u7ec4\uff0c\u76f4\u81f3\u957f\u5ea6\u4e3a 1 \uff1b

    1. \u8ba1\u7b97\u6570\u7ec4\u4e2d\u70b9 mid \uff0c\u9012\u5f52\u5212\u5206\u5de6\u5b50\u6570\u7ec4\uff08\u533a\u95f4 [left, mid] \uff09\u548c\u53f3\u5b50\u6570\u7ec4\uff08\u533a\u95f4 [mid + 1, right] \uff09\uff1b
    2. \u9012\u5f52\u6267\u884c 1. \u6b65\u9aa4\uff0c\u76f4\u81f3\u5b50\u6570\u7ec4\u533a\u95f4\u957f\u5ea6\u4e3a 1 \u65f6\uff0c\u7ec8\u6b62\u9012\u5f52\u5212\u5206\uff1b

    \u300c\u56de\u6eaf\u5408\u5e76\u300d \u4ece\u5e95\u81f3\u9876\u5730\u5c06\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\u5408\u5e76\u4e3a\u4e00\u4e2a \u6709\u5e8f\u6570\u7ec4 \uff1b

    \u9700\u8981\u6ce8\u610f\uff0c\u7531\u4e8e\u4ece\u957f\u5ea6\u4e3a 1 \u7684\u5b50\u6570\u7ec4\u5f00\u59cb\u5408\u5e76\uff0c\u6240\u4ee5 \u6bcf\u4e2a\u5b50\u6570\u7ec4\u90fd\u662f\u6709\u5e8f\u7684\u3002\u56e0\u6b64\uff0c\u5408\u5e76\u4efb\u52a1\u672c\u8d28\u662f\u8981 \u5c06\u4e24\u4e2a\u6709\u5e8f\u5b50\u6570\u7ec4\u5408\u5e76\u4e3a\u4e00\u4e2a\u6709\u5e8f\u6570\u7ec4\u3002

    <1><2><3><4><5><6><7><8><9><10>

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5f52\u5e76\u6392\u5e8f\u7684\u9012\u5f52\u987a\u5e8f\u5c31\u662f\u4e8c\u53c9\u6811\u7684\u300c\u540e\u5e8f\u904d\u5386\u300d\u3002

    • \u540e\u5e8f\u904d\u5386\uff1a\u5148\u9012\u5f52\u5de6\u5b50\u6811\u3001\u518d\u9012\u5f52\u53f3\u5b50\u6811\u3001\u6700\u540e\u5904\u7406\u6839\u7ed3\u70b9\u3002
    • \u5f52\u5e76\u6392\u5e8f\uff1a\u5148\u9012\u5f52\u5de6\u5b50\u6811\u3001\u518d\u9012\u5f52\u53f3\u5b50\u6811\u3001\u6700\u540e\u5904\u7406\u5408\u5e76\u3002
    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig merge_sort.java
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nvoid merge(int[] nums, int left, int mid, int right) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nint[] tmp = Arrays.copyOfRange(nums, left, right + 1);   // \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nint leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nint rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nint i = leftStart, j = rightStart;                // \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (int k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd)\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if (j > rightEnd || tmp[i] <= tmp[j])\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse\nnums[k] = tmp[j++];\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nvoid mergeSort(int[] nums, int left, int right) {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nint mid = (left + right) / 2;    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.cpp
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nvoid merge(vector<int>& nums, int left, int mid, int right) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nvector<int> tmp(nums.begin() + left, nums.begin() + right + 1);   // \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nint leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nint rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nint i = leftStart, j = rightStart;                // \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (int k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd)\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if (j > rightEnd || tmp[i] <= tmp[j])\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse\nnums[k] = tmp[j++];\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nvoid mergeSort(vector<int>& nums, int left, int right) {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nint mid = (left + right) / 2;    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.py
    def merge(nums: List[int], left: int, mid: int, right: int) -> None:\n\"\"\" \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 \"\"\"\n# \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n# \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\n# \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4 \u501f\u52a9 copy\u6a21\u5757\ntmp: List[int] = nums[left:right + 1].copy()\n# \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nleft_start: int = 0\nleft_end: int = mid - left\n# \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nright_start: int = mid + 1 - left\nright_end: int = right - left\n# i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\ni: int = left_start\nj: int = right_start\n# \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor k in range(left, right + 1):\n# \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif i > left_end:\nnums[k] = tmp[j]\nj += 1\n# \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelif j > right_end or tmp[i] <= tmp[j]:\nnums[k] = tmp[i]\ni += 1\n# \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse:\nnums[k] = tmp[j]\nj += 1\ndef merge_sort(nums: List[int], left: int, right: int) -> None:\n\"\"\" \u5f52\u5e76\u6392\u5e8f \"\"\"\n# \u7ec8\u6b62\u6761\u4ef6\nif left >= right:\nreturn                        # \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n# \u5212\u5206\u9636\u6bb5\nmid: int = (left + right) // 2    # \u8ba1\u7b97\u4e2d\u70b9\nmerge_sort(nums, left, mid)       # \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmerge_sort(nums, mid + 1, right)  # \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n# \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right)\n
    merge_sort.go
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunc merge(nums []int, left, mid, right int) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4 \u501f\u52a9 copy \u6a21\u5757\ntmp := make([]int, right-left+1)\nfor i := left; i <= right; i++ {\ntmp[i-left] = nums[i]\n}\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nleftStart, leftEnd := left-left, mid-left\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nrightStart, rightEnd := mid+1-left, right-left\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\ni, j := leftStart, rightStart\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor k := left; k <= right; k++ {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif i > leftEnd {\nnums[k] = tmp[j]\nj++\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if j > rightEnd || tmp[i] <= tmp[j] {\nnums[k] = tmp[i]\ni++\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j]\nj++\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunc mergeSort(nums []int, left, right int) {\n// \u7ec8\u6b62\u6761\u4ef6\nif left >= right {\nreturn\n}\n// \u5212\u5206\u9636\u6bb5\nmid := (left + right) / 2\nmergeSort(nums, left, mid)\nmergeSort(nums, mid+1, right)\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right)\n}\n
    merge_sort.js
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunction merge(nums, left, mid, right) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nlet tmp = nums.slice(left, right + 1);   // \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nlet leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nlet rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nlet i = leftStart, j = rightStart;                // \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (let k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd) {\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if (j > rightEnd || tmp[i] <= tmp[j]) {\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j++];\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunction mergeSort(nums, left, right) {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nlet mid = Math.floor((left + right) / 2);    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.ts
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunction merge(nums: number[], left: number, mid: number, right: number): void {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nlet tmp = nums.slice(left, right + 1);\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nlet i = leftStart, j = rightStart;\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (let k = left; k <= right; k++) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd) {\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if (j > rightEnd || tmp[i] <= tmp[j]) {\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j++];\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunction mergeSort(nums: number[], left: number, right: number): void {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return; // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nlet mid = Math.floor((left + right) / 2); // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid); // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.c
    \n
    merge_sort.cs
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nvoid merge(int[] nums, int left, int mid, int right)\n{\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nint[] tmp = nums[left..(right + 1)];\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nint leftStart = left - left, leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nint rightStart = mid + 1 - left, rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nint i = leftStart, j = rightStart;\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor (int k = left; k <= right; k++)\n{\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd)\nnums[k] = tmp[j++];\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if (j > rightEnd || tmp[i] <= tmp[j])\nnums[k] = tmp[i++];\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse\nnums[k] = tmp[j++];\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nvoid mergeSort(int[] nums, int left, int right)\n{\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;       // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nint mid = (left + right) / 2;    // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums, left, mid);      // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums, mid + 1, right); // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums, left, mid, right);\n}\n
    merge_sort.swift
    /* \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4 */\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfunc merge(nums: inout [Int], left: Int, mid: Int, right: Int) {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nlet tmp = Array(nums[left ..< (right + 1)])\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet leftStart = left - left\nlet leftEnd = mid - left\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15\nlet rightStart = mid + 1 - left\nlet rightEnd = right - left\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nvar i = leftStart\nvar j = rightStart\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nfor k in left ... right {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif i > leftEnd {\nnums[k] = tmp[j]\nj += 1\n}\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\nelse if j > rightEnd || tmp[i] <= tmp[j] {\nnums[k] = tmp[i]\ni += 1\n}\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nelse {\nnums[k] = tmp[j]\nj += 1\n}\n}\n}\n/* \u5f52\u5e76\u6392\u5e8f */\nfunc mergeSort(nums: inout [Int], left: Int, right: Int) {\n// \u7ec8\u6b62\u6761\u4ef6\nif left >= right { // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nreturn\n}\n// \u5212\u5206\u9636\u6bb5\nlet mid = (left + right) / 2 // \u8ba1\u7b97\u4e2d\u70b9\nmergeSort(nums: &nums, left: left, right: mid) // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\nmergeSort(nums: &nums, left: mid + 1, right: right) // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\nmerge(nums: &nums, left: left, mid: mid, right: right)\n}\n
    merge_sort.zig
    // \u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\n// \u5de6\u5b50\u6570\u7ec4\u533a\u95f4 [left, mid]\n// \u53f3\u5b50\u6570\u7ec4\u533a\u95f4 [mid + 1, right]\nfn merge(nums: []i32, left: usize, mid: usize, right: usize) !void {\n// \u521d\u59cb\u5316\u8f85\u52a9\u6570\u7ec4\nvar mem_arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);\ndefer mem_arena.deinit();\nconst mem_allocator = mem_arena.allocator();\nvar tmp = try mem_allocator.alloc(i32, right + 1 - left);\nstd.mem.copy(i32, tmp, nums[left..right+1]);\n// \u5de6\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15  \nvar leftStart = left - left;\nvar leftEnd = mid - left;\n// \u53f3\u5b50\u6570\u7ec4\u7684\u8d77\u59cb\u7d22\u5f15\u548c\u7ed3\u675f\u7d22\u5f15       \nvar rightStart = mid + 1 - left;\nvar rightEnd = right - left;\n// i, j \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u7684\u9996\u5143\u7d20\nvar i = leftStart;\nvar j = rightStart;\n// \u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u6765\u5408\u5e76\u5de6\u5b50\u6570\u7ec4\u548c\u53f3\u5b50\u6570\u7ec4\nvar k = left;\nwhile (k <= right) : (k += 1) {\n// \u82e5\u201c\u5de6\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\nif (i > leftEnd) {\nnums[k] = tmp[j];\nj += 1;\n// \u5426\u5219\uff0c\u82e5\u201c\u53f3\u5b50\u6570\u7ec4\u5df2\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u6216\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 <= \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u5de6\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 i++\n} else if  (j > rightEnd or tmp[i] <= tmp[j]) {\nnums[k] = tmp[i];\ni += 1;\n// \u5426\u5219\uff0c\u82e5\u201c\u5de6\u53f3\u5b50\u6570\u7ec4\u90fd\u672a\u5168\u90e8\u5408\u5e76\u5b8c\u201d\u4e14\u201c\u5de6\u5b50\u6570\u7ec4\u5143\u7d20 > \u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u201d\uff0c\u5219\u9009\u53d6\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\uff0c\u5e76\u4e14 j++\n} else {\nnums[k] = tmp[j];\nj += 1;\n}\n}\n}\n// \u5f52\u5e76\u6392\u5e8f\nfn mergeSort(nums: []i32, left: usize, right: usize) !void {\n// \u7ec8\u6b62\u6761\u4ef6\nif (left >= right) return;              // \u5f53\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\n// \u5212\u5206\u9636\u6bb5\nvar mid = (left + right) / 2;           // \u8ba1\u7b97\u4e2d\u70b9\ntry mergeSort(nums, left, mid);         // \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\ntry mergeSort(nums, mid + 1, right);    // \u9012\u5f52\u53f3\u5b50\u6570\u7ec4\n// \u5408\u5e76\u9636\u6bb5\ntry merge(nums, left, mid, right);\n}\n

    \u4e0b\u9762\u91cd\u70b9\u89e3\u91ca\u4e00\u4e0b\u5408\u5e76\u65b9\u6cd5 merge() \u7684\u6d41\u7a0b\uff1a

    1. \u521d\u59cb\u5316\u4e00\u4e2a\u8f85\u52a9\u6570\u7ec4 tmp \u6682\u5b58\u5f85\u5408\u5e76\u533a\u95f4 [left, right] \u5185\u7684\u5143\u7d20\uff0c\u540e\u7eed\u901a\u8fc7\u8986\u76d6\u539f\u6570\u7ec4 nums \u7684\u5143\u7d20\u6765\u5b9e\u73b0\u5408\u5e76\uff1b
    2. \u521d\u59cb\u5316\u6307\u9488 i , j , k \u5206\u522b\u6307\u5411\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\u3001\u539f\u6570\u7ec4\u7684\u9996\u5143\u7d20\uff1b
    3. \u5faa\u73af\u5224\u65ad tmp[i] \u548c tmp[j] \u7684\u5927\u5c0f\uff0c\u5c06\u8f83\u5c0f\u7684\u5148\u8986\u76d6\u81f3 nums[k] \uff0c\u6307\u9488 i , j \u6839\u636e\u5224\u65ad\u7ed3\u679c\u4ea4\u66ff\u524d\u8fdb\uff08\u6307\u9488 k \u4e5f\u524d\u8fdb\uff09\uff0c\u76f4\u81f3\u4e24\u4e2a\u5b50\u6570\u7ec4\u90fd\u904d\u5386\u5b8c\uff0c\u5373\u53ef\u5b8c\u6210\u5408\u5e76\u3002

    \u5408\u5e76\u65b9\u6cd5 merge() \u4ee3\u7801\u4e2d\u7684\u4e3b\u8981\u96be\u70b9\uff1a

    • nums \u7684\u5f85\u5408\u5e76\u533a\u95f4\u4e3a [left, right] \uff0c\u800c\u56e0\u4e3a tmp \u53ea\u590d\u5236\u4e86 nums \u8be5\u533a\u95f4\u5143\u7d20\uff0c\u6240\u4ee5 tmp \u5bf9\u5e94\u533a\u95f4\u4e3a [0, right - left] \uff0c\u9700\u8981\u7279\u522b\u6ce8\u610f\u4ee3\u7801\u4e2d\u5404\u4e2a\u53d8\u91cf\u7684\u542b\u4e49\u3002
    • \u5224\u65ad tmp[i] \u548c tmp[j] \u7684\u5927\u5c0f\u7684\u64cd\u4f5c\u4e2d\uff0c\u8fd8 \u9700\u8003\u8651\u5f53\u5b50\u6570\u7ec4\u904d\u5386\u5b8c\u6210\u540e\u7684\u7d22\u5f15\u8d8a\u754c\u95ee\u9898\uff0c\u5373 i > leftEnd \u548c j > rightEnd \u7684\u60c5\u51b5\uff0c\u7d22\u5f15\u8d8a\u754c\u7684\u4f18\u5148\u7ea7\u662f\u6700\u9ad8\u7684\uff0c\u4f8b\u5982\u5982\u679c\u5de6\u5b50\u6570\u7ec4\u5df2\u7ecf\u88ab\u5408\u5e76\u5b8c\u4e86\uff0c\u90a3\u4e48\u4e0d\u7528\u7ee7\u7eed\u5224\u65ad\uff0c\u76f4\u63a5\u5408\u5e76\u53f3\u5b50\u6570\u7ec4\u5143\u7d20\u5373\u53ef\u3002
    "},{"location":"chapter_sorting/merge_sort/#1152","title":"11.5.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"
    • \u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n \\log n)\\) \uff1a\u5212\u5206\u5f62\u6210\u9ad8\u5ea6\u4e3a \\(\\log n\\) \u7684\u9012\u5f52\u6811\uff0c\u6bcf\u5c42\u5408\u5e76\u7684\u603b\u64cd\u4f5c\u6570\u91cf\u4e3a \\(n\\) \uff0c\u603b\u4f53\u4f7f\u7528 \\(O(n \\log n)\\) \u65f6\u95f4\u3002
    • \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u9700\u501f\u52a9\u8f85\u52a9\u6570\u7ec4\u5b9e\u73b0\u5408\u5e76\uff0c\u4f7f\u7528 \\(O(n)\\) \u5927\u5c0f\u7684\u989d\u5916\u7a7a\u95f4\uff1b\u9012\u5f52\u6df1\u5ea6\u4e3a \\(\\log n\\) \uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u5927\u5c0f\u7684\u6808\u5e27\u7a7a\u95f4\u3002
    • \u975e\u539f\u5730\u6392\u5e8f\uff1a\u8f85\u52a9\u6570\u7ec4\u9700\u8981\u4f7f\u7528 \\(O(n)\\) \u989d\u5916\u7a7a\u95f4\u3002
    • \u7a33\u5b9a\u6392\u5e8f\uff1a\u5728\u5408\u5e76\u65f6\u53ef\u4fdd\u8bc1\u76f8\u7b49\u5143\u7d20\u7684\u76f8\u5bf9\u4f4d\u7f6e\u4e0d\u53d8\u3002
    • \u975e\u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u5bf9\u4e8e\u4efb\u610f\u8f93\u5165\u6570\u636e\uff0c\u5f52\u5e76\u6392\u5e8f\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u76f8\u540c\u3002
    "},{"location":"chapter_sorting/merge_sort/#1153","title":"11.5.3. \u00a0 \u94fe\u8868\u6392\u5e8f *","text":"

    \u5f52\u5e76\u6392\u5e8f\u6709\u4e00\u4e2a\u5f88\u7279\u522b\u7684\u4f18\u52bf\uff0c\u7528\u4e8e\u6392\u5e8f\u94fe\u8868\u65f6\u6709\u5f88\u597d\u7684\u6027\u80fd\u8868\u73b0\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u53ef\u88ab\u4f18\u5316\u81f3 \\(O(1)\\) \uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    • \u7531\u4e8e\u94fe\u8868\u53ef\u4ec5\u901a\u8fc7\u6539\u53d8\u6307\u9488\u6765\u5b9e\u73b0\u7ed3\u70b9\u589e\u5220\uff0c\u56e0\u6b64\u201c\u5c06\u4e24\u4e2a\u77ed\u6709\u5e8f\u94fe\u8868\u5408\u5e76\u4e3a\u4e00\u4e2a\u957f\u6709\u5e8f\u94fe\u8868\u201d\u65e0\u9700\u4f7f\u7528\u989d\u5916\u7a7a\u95f4\uff0c\u5373\u56de\u6eaf\u5408\u5e76\u9636\u6bb5\u4e0d\u7528\u50cf\u6392\u5e8f\u6570\u7ec4\u4e00\u6837\u5efa\u7acb\u8f85\u52a9\u6570\u7ec4 tmp \uff1b
    • \u901a\u8fc7\u4f7f\u7528\u300c\u8fed\u4ee3\u300d\u4ee3\u66ff\u300c\u9012\u5f52\u5212\u5206\u300d\uff0c\u53ef\u7701\u53bb\u9012\u5f52\u4f7f\u7528\u7684\u6808\u5e27\u7a7a\u95f4\uff1b

    \u8be6\u60c5\u53c2\u8003\uff1a148. \u6392\u5e8f\u94fe\u8868

    "},{"location":"chapter_sorting/quick_sort/","title":"11.4. \u00a0 \u5feb\u901f\u6392\u5e8f","text":"

    \u300c\u5feb\u901f\u6392\u5e8f Quick Sort\u300d\u662f\u4e00\u79cd\u57fa\u4e8e\u201c\u5206\u6cbb\u601d\u60f3\u201d\u7684\u6392\u5e8f\u7b97\u6cd5\uff0c\u901f\u5ea6\u5f88\u5feb\u3001\u5e94\u7528\u5f88\u5e7f\u3002

    \u5feb\u901f\u6392\u5e8f\u7684\u6838\u5fc3\u64cd\u4f5c\u4e3a\u300c\u54e8\u5175\u5212\u5206\u300d\uff0c\u5176\u76ee\u6807\u4e3a\uff1a\u9009\u53d6\u6570\u7ec4\u67d0\u4e2a\u5143\u7d20\u4e3a \u57fa\u51c6\u6570\uff0c\u5c06\u6240\u6709\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\u79fb\u52a8\u81f3\u5176\u5de6\u8fb9\uff0c\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\u79fb\u52a8\u81f3\u5176\u53f3\u8fb9\u3002\u300c\u54e8\u5175\u5212\u5206\u300d\u7684\u5b9e\u73b0\u6d41\u7a0b\u4e3a\uff1a

    1. \u4ee5\u6570\u7ec4\u6700\u5de6\u7aef\u5143\u7d20\u4f5c\u4e3a\u57fa\u51c6\u6570\uff0c\u521d\u59cb\u5316\u4e24\u4e2a\u6307\u9488 i , j \u6307\u5411\u6570\u7ec4\u4e24\u7aef\uff1b
    2. \u8bbe\u7f6e\u4e00\u4e2a\u5faa\u73af\uff0c\u6bcf\u8f6e\u4e2d\u4f7f\u7528 i / j \u5206\u522b\u5bfb\u627e\u9996\u4e2a\u6bd4\u57fa\u51c6\u6570\u5927 / \u5c0f\u7684\u5143\u7d20\uff0c\u5e76\u4ea4\u6362\u6b64\u4e24\u5143\u7d20\uff1b
    3. \u4e0d\u65ad\u5faa\u73af\u6b65\u9aa4 2. \uff0c\u76f4\u81f3 i , j \u76f8\u9047\u65f6\u8df3\u51fa\uff0c\u6700\u7ec8\u628a\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u4e2a\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\uff1b

    \u300c\u54e8\u5175\u5212\u5206\u300d\u6267\u884c\u5b8c\u6bd5\u540e\uff0c\u539f\u6570\u7ec4\u88ab\u5212\u5206\u6210\u4e24\u4e2a\u90e8\u5206\uff0c\u5373 \u5de6\u5b50\u6570\u7ec4 \u548c \u53f3\u5b50\u6570\u7ec4\uff0c\u4e14\u6ee1\u8db3 \u5de6\u5b50\u6570\u7ec4\u4efb\u610f\u5143\u7d20 < \u57fa\u51c6\u6570 < \u53f3\u5b50\u6570\u7ec4\u4efb\u610f\u5143\u7d20\u3002\u56e0\u6b64\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u53ea\u9700\u8981\u6392\u5e8f\u4e24\u4e2a\u5b50\u6570\u7ec4\u5373\u53ef\u3002

    <1><2><3><4><5><6><7><8><9>

    \u5feb\u901f\u6392\u5e8f\u7684\u5206\u6cbb\u601d\u60f3

    \u54e8\u5175\u5212\u5206\u7684\u5b9e\u8d28\u662f\u5c06 \u4e00\u4e2a\u957f\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898 \u7b80\u5316\u4e3a \u4e24\u4e2a\u77ed\u6570\u7ec4\u7684\u6392\u5e8f\u95ee\u9898\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u5143\u7d20\u4ea4\u6362 */\nvoid swap(int[] nums, int i, int j) {\nint tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\nint partition(int[] nums, int left, int right) {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.cpp
    /* \u5143\u7d20\u4ea4\u6362 */\nvoid swap(vector<int>& nums, int i, int j) {\nint tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\nint partition(vector<int>& nums, int left, int right) {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.py
    def partition(self, nums: List[int], left: int, right: int) -> int:\n\"\"\" \u54e8\u5175\u5212\u5206 \"\"\"\n# \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j = left, right\nwhile i < j:\nwhile i < j and nums[j] >= nums[left]:\nj -= 1  # \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile i < j and nums[i] <= nums[left]:\ni += 1  # \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n# \u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n# \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i  # \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n
    quick_sort.go
    /* \u54e8\u5175\u5212\u5206 */\nfunc (q *quickSort) partition(nums []int, left, right int) int {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j := left, right\nfor i < j {\nfor i < j && nums[j] >= nums[left] {\nj-- // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nfor i < j && nums[i] <= nums[left] {\ni++ // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n// \u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n}\n// \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.js
    /* \u5143\u7d20\u4ea4\u6362 */\nswap(nums, i, j) {\nlet tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\npartition(nums, left, right) {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) {\nj -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile (i < j && nums[i] <= nums[left]) {\ni += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n// \u5143\u7d20\u4ea4\u6362\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.ts
    /* \u5143\u7d20\u4ea4\u6362 */\nswap(nums: number[], i: number, j: number): void {\nlet tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\npartition(nums: number[], left: number, right: number): number {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) {\nj -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile (i < j && nums[i] <= nums[left]) {\ni += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n// \u5143\u7d20\u4ea4\u6362\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.c
    [class]{quickSort}-[func]{partition}\n
    quick_sort.cs
    /* \u5143\u7d20\u4ea4\u6362 */\nvoid swap(int[] nums, int i, int j)\n{\nint tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n/* \u54e8\u5175\u5212\u5206 */\nint partition(int[] nums, int left, int right)\n{\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j)\n{\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.swift
    /* \u5143\u7d20\u4ea4\u6362 */\nfunc swap(nums: inout [Int], i: Int, j: Int) {\nlet tmp = nums[i]\nnums[i] = nums[j]\nnums[j] = tmp\n}\n/* \u54e8\u5175\u5212\u5206 */\nfunc partition(nums: inout [Int], left: Int, right: Int) -> Int {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nvar i = left\nvar j = right\nwhile i < j {\nwhile i < j, nums[j] >= nums[left] {\nj -= 1 // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile i < j, nums[i] <= nums[left] {\ni += 1 // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nswap(nums: &nums, i: i, j: j) // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums: &nums, i: i, j: left) // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.zig
    // \u5143\u7d20\u4ea4\u6362\nfn swap(nums: []i32, i: usize, j: usize) void {\nvar tmp = nums[i];\nnums[i] = nums[j];\nnums[j] = tmp;\n}\n// \u54e8\u5175\u5212\u5206\nfn partition(nums: []i32, left: usize, right: usize) usize {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nvar i = left;\nvar j = right;\nwhile (i < j) {\nwhile (i < j and nums[j] >= nums[left]) j -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j and nums[i] <= nums[left]) i += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j);   // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);    // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;               // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    "},{"location":"chapter_sorting/quick_sort/#1141","title":"11.4.1. \u00a0 \u7b97\u6cd5\u6d41\u7a0b","text":"
    1. \u9996\u5148\uff0c\u5bf9\u6570\u7ec4\u6267\u884c\u4e00\u6b21\u300c\u54e8\u5175\u5212\u5206\u300d\uff0c\u5f97\u5230\u5f85\u6392\u5e8f\u7684 \u5de6\u5b50\u6570\u7ec4 \u548c \u53f3\u5b50\u6570\u7ec4\uff1b
    2. \u63a5\u4e0b\u6765\uff0c\u5bf9 \u5de6\u5b50\u6570\u7ec4 \u548c \u53f3\u5b50\u6570\u7ec4 \u5206\u522b \u9012\u5f52\u6267\u884c\u300c\u54e8\u5175\u5212\u5206\u300d\u2026\u2026
    3. \u76f4\u81f3\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6 \u7ec8\u6b62\u9012\u5f52\uff0c\u5373\u53ef\u5b8c\u6210\u5bf9\u6574\u4e2a\u6570\u7ec4\u7684\u6392\u5e8f\uff1b

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5feb\u901f\u6392\u5e8f\u548c\u300c\u4e8c\u5206\u67e5\u627e\u300d\u7684\u539f\u7406\u7c7b\u4f3c\uff0c\u90fd\u662f\u4ee5\u5bf9\u6570\u9636\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u6765\u7f29\u5c0f\u5904\u7406\u533a\u95f4\u3002

    Fig. \u5feb\u901f\u6392\u5e8f\u6d41\u7a0b

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u5feb\u901f\u6392\u5e8f */\nvoid quickSort(int[] nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right)\nreturn;\n// \u54e8\u5175\u5212\u5206\nint pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    quick_sort.cpp
    /* \u5feb\u901f\u6392\u5e8f */\nvoid quickSort(vector<int>& nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right)\nreturn;\n// \u54e8\u5175\u5212\u5206\nint pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    quick_sort.py
    def quick_sort(self, nums: List[int], left: int, right: int) -> None:\n\"\"\" \u5feb\u901f\u6392\u5e8f \"\"\"\n# \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif left >= right:\nreturn\n# \u54e8\u5175\u5212\u5206\npivot: int = self.partition(nums, left, right)\n# \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nself.quick_sort(nums, left, pivot - 1)\nself.quick_sort(nums, pivot + 1, right)\n
    quick_sort.go
    /* \u5feb\u901f\u6392\u5e8f */\nfunc (q *quickSort) quickSort(nums []int, left, right int) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif left >= right {\nreturn\n}\n// \u54e8\u5175\u5212\u5206\npivot := q.partition(nums, left, right)\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nq.quickSort(nums, left, pivot-1)\nq.quickSort(nums, pivot+1, right)\n}\n
    quick_sort.js
    /* \u5feb\u901f\u6392\u5e8f */\nquickSort(nums, left, right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right) return;\n// \u54e8\u5175\u5212\u5206\nconst pivot = this.partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nthis.quickSort(nums, left, pivot - 1);\nthis.quickSort(nums, pivot + 1, right);\n}\n
    quick_sort.ts
    /* \u5feb\u901f\u6392\u5e8f */\nquickSort(nums: number[], left: number, right: number): void {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right) {\nreturn;\n}\n// \u54e8\u5175\u5212\u5206\nconst pivot = this.partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nthis.quickSort(nums, left, pivot - 1);\nthis.quickSort(nums, pivot + 1, right);\n}\n
    quick_sort.c
    [class]{quickSort}-[func]{quickSort}\n
    quick_sort.cs
    /* \u5feb\u901f\u6392\u5e8f */\nvoid quickSort(int[] nums, int left, int right)\n{\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right)\nreturn;\n// \u54e8\u5175\u5212\u5206\nint pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    quick_sort.swift
    /* \u5feb\u901f\u6392\u5e8f */\nfunc quickSort(nums: inout [Int], left: Int, right: Int) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif left >= right {\nreturn\n}\n// \u54e8\u5175\u5212\u5206\nlet pivot = partition(nums: &nums, left: left, right: right)\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums: &nums, left: left, right: pivot - 1)\nquickSort(nums: &nums, left: pivot + 1, right: right)\n}\n
    quick_sort.zig
    // \u5feb\u901f\u6392\u5e8f\nfn quickSort(nums: []i32, left: usize, right: usize) void {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nif (left >= right) return;\n// \u54e8\u5175\u5212\u5206\nvar pivot = partition(nums, left, right);\n// \u9012\u5f52\u5de6\u5b50\u6570\u7ec4\u3001\u53f3\u5b50\u6570\u7ec4\nquickSort(nums, left, pivot - 1);\nquickSort(nums, pivot + 1, right);\n}\n
    "},{"location":"chapter_sorting/quick_sort/#1142","title":"11.4.2. \u00a0 \u7b97\u6cd5\u7279\u6027","text":"

    \u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n \\log n)\\) \uff1a\u5e73\u5747\u60c5\u51b5\u4e0b\uff0c\u54e8\u5175\u5212\u5206\u7684\u9012\u5f52\u5c42\u6570\u4e3a \\(\\log n\\) \uff0c\u6bcf\u5c42\u4e2d\u7684\u603b\u5faa\u73af\u6570\u4e3a \\(n\\) \uff0c\u603b\u4f53\u4f7f\u7528 \\(O(n \\log n)\\) \u65f6\u95f4\u3002

    \u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6 \\(O(n^2)\\) \uff1a\u6700\u5dee\u60c5\u51b5\u4e0b\uff0c\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u5c06\u957f\u5ea6\u4e3a \\(n\\) \u7684\u6570\u7ec4\u5212\u5206\u4e3a\u957f\u5ea6\u4e3a \\(0\\) \u548c \\(n - 1\\) \u7684\u4e24\u4e2a\u5b50\u6570\u7ec4\uff0c\u6b64\u65f6\u9012\u5f52\u5c42\u6570\u8fbe\u5230 \\(n\\) \u5c42\uff0c\u6bcf\u5c42\u4e2d\u7684\u5faa\u73af\u6570\u4e3a \\(n\\) \uff0c\u603b\u4f53\u4f7f\u7528 \\(O(n^2)\\) \u65f6\u95f4\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6 \\(O(n)\\) \uff1a\u8f93\u5165\u6570\u7ec4\u5b8c\u5168\u5012\u5e8f\u4e0b\uff0c\u8fbe\u5230\u6700\u5dee\u9012\u5f52\u6df1\u5ea6 \\(n\\) \u3002

    \u539f\u5730\u6392\u5e8f\uff1a\u53ea\u5728\u9012\u5f52\u4e2d\u4f7f\u7528 \\(O(\\log n)\\) \u5927\u5c0f\u7684\u6808\u5e27\u7a7a\u95f4\u3002

    \u975e\u7a33\u5b9a\u6392\u5e8f\uff1a\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u53ef\u80fd\u6539\u53d8\u76f8\u7b49\u5143\u7d20\u7684\u76f8\u5bf9\u4f4d\u7f6e\u3002

    \u81ea\u9002\u5e94\u6392\u5e8f\uff1a\u6700\u5dee\u60c5\u51b5\u4e0b\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n^2)\\) \u3002

    "},{"location":"chapter_sorting/quick_sort/#1143","title":"11.4.3. \u00a0 \u5feb\u6392\u4e3a\u4ec0\u4e48\u5feb\uff1f","text":"

    \u4ece\u547d\u540d\u80fd\u591f\u770b\u51fa\uff0c\u5feb\u901f\u6392\u5e8f\u5728\u6548\u7387\u65b9\u9762\u4e00\u5b9a\u201c\u6709\u4e24\u628a\u5237\u5b50\u201d\u3002\u5feb\u901f\u6392\u5e8f\u7684\u5e73\u5747\u65f6\u95f4\u590d\u6742\u5ea6\u867d\u7136\u4e0e\u300c\u5f52\u5e76\u6392\u5e8f\u300d\u548c\u300c\u5806\u6392\u5e8f\u300d\u4e00\u81f4\uff0c\u4f46\u5b9e\u9645 \u6548\u7387\u66f4\u9ad8\uff0c\u8fd9\u662f\u56e0\u4e3a\uff1a

    • \u51fa\u73b0\u6700\u5dee\u60c5\u51b5\u7684\u6982\u7387\u5f88\u4f4e\uff1a\u867d\u7136\u5feb\u901f\u6392\u5e8f\u7684\u6700\u5dee\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n^2)\\) \uff0c\u4e0d\u5982\u5f52\u5e76\u6392\u5e8f\uff0c\u4f46\u7edd\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0c\u5feb\u901f\u6392\u5e8f\u53ef\u4ee5\u8fbe\u5230 \\(O(n \\log n)\\) \u7684\u590d\u6742\u5ea6\u3002
    • \u7f13\u5b58\u4f7f\u7528\u6548\u7387\u9ad8\uff1a\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u65f6\uff0c\u5c06\u6574\u4e2a\u5b50\u6570\u7ec4\u52a0\u8f7d\u5165\u7f13\u5b58\u4e2d\uff0c\u8bbf\u95ee\u5143\u7d20\u6548\u7387\u5f88\u9ad8\u3002\u800c\u8bf8\u5982\u300c\u5806\u6392\u5e8f\u300d\u9700\u8981\u8df3\u8dc3\u5f0f\u8bbf\u95ee\u5143\u7d20\uff0c\u56e0\u6b64\u4e0d\u5177\u6709\u6b64\u7279\u6027\u3002
    • \u590d\u6742\u5ea6\u7684\u5e38\u6570\u7cfb\u6570\u4f4e\uff1a\u5728\u63d0\u53ca\u7684\u4e09\u79cd\u7b97\u6cd5\u4e2d\uff0c\u5feb\u901f\u6392\u5e8f\u7684 \u6bd4\u8f83\u3001\u8d4b\u503c\u3001\u4ea4\u6362 \u4e09\u79cd\u64cd\u4f5c\u7684\u603b\u4f53\u6570\u91cf\u6700\u5c11\uff08\u7c7b\u4f3c\u4e8e\u300c\u63d2\u5165\u6392\u5e8f\u300d\u5feb\u4e8e\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u7684\u539f\u56e0\uff09\u3002
    "},{"location":"chapter_sorting/quick_sort/#1144","title":"11.4.4. \u00a0 \u57fa\u51c6\u6570\u4f18\u5316","text":"

    \u666e\u901a\u5feb\u901f\u6392\u5e8f\u5728\u67d0\u4e9b\u8f93\u5165\u4e0b\u7684\u65f6\u95f4\u6548\u7387\u53d8\u5dee\u3002\u4e3e\u4e2a\u6781\u7aef\u4f8b\u5b50\uff0c\u5047\u8bbe\u8f93\u5165\u6570\u7ec4\u662f\u5b8c\u5168\u5012\u5e8f\u7684\uff0c\u7531\u4e8e\u6211\u4eec\u9009\u53d6\u6700\u5de6\u7aef\u5143\u7d20\u4e3a\u57fa\u51c6\u6570\uff0c\u90a3\u4e48\u5728\u54e8\u5175\u5212\u5206\u5b8c\u6210\u540e\uff0c\u57fa\u51c6\u6570\u88ab\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u53f3\u7aef\uff0c\u4ece\u800c \u5de6\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a \\(n - 1\\)\u3001\u53f3\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a \\(0\\) \u3002\u8fd9\u6837\u8fdb\u4e00\u6b65\u9012\u5f52\u4e0b\u53bb\uff0c\u6bcf\u8f6e\u54e8\u5175\u5212\u5206\u540e\u7684\u53f3\u5b50\u6570\u7ec4\u957f\u5ea6\u90fd\u4e3a \\(0\\) \uff0c\u5206\u6cbb\u7b56\u7565\u5931\u6548\uff0c\u5feb\u901f\u6392\u5e8f\u9000\u5316\u4e3a\u300c\u5192\u6ce1\u6392\u5e8f\u300d\u4e86\u3002

    \u4e3a\u4e86\u5c3d\u91cf\u907f\u514d\u8fd9\u79cd\u60c5\u51b5\u53d1\u751f\uff0c\u6211\u4eec\u53ef\u4ee5\u4f18\u5316\u4e00\u4e0b\u57fa\u51c6\u6570\u7684\u9009\u53d6\u7b56\u7565\u3002\u9996\u5148\uff0c\u5728\u54e8\u5175\u5212\u5206\u4e2d\uff0c\u6211\u4eec\u53ef\u4ee5 \u968f\u673a\u9009\u53d6\u4e00\u4e2a\u5143\u7d20\u4f5c\u4e3a\u57fa\u51c6\u6570\u3002\u4f46\u5982\u679c\u8fd0\u6c14\u5f88\u5dee\uff0c\u6bcf\u6b21\u90fd\u9009\u62e9\u5230\u6bd4\u8f83\u5dee\u7684\u57fa\u51c6\u6570\uff0c\u90a3\u4e48\u6548\u7387\u4f9d\u7136\u4e0d\u597d\u3002

    \u8fdb\u4e00\u6b65\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u6570\u7ec4\u4e2d\u9009\u53d6 3 \u4e2a\u5019\u9009\u5143\u7d20\uff08\u4e00\u822c\u4e3a\u6570\u7ec4\u7684\u9996\u3001\u5c3e\u3001\u4e2d\u70b9\u5143\u7d20\uff09\uff0c\u5e76\u5c06\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\u4f5c\u4e3a\u57fa\u51c6\u6570\uff0c\u8fd9\u6837\u57fa\u51c6\u6570\u201c\u65e2\u4e0d\u5927\u4e5f\u4e0d\u5c0f\u201d\u7684\u6982\u7387\u5c31\u5927\u5927\u63d0\u5347\u4e86\u3002\u5f53\u7136\uff0c\u5982\u679c\u6570\u7ec4\u5f88\u957f\u7684\u8bdd\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9009\u53d6\u66f4\u591a\u5019\u9009\u5143\u7d20\uff0c\u6765\u8fdb\u4e00\u6b65\u63d0\u5347\u7b97\u6cd5\u7684\u7a33\u5065\u6027\u3002\u91c7\u53d6\u8be5\u65b9\u6cd5\u540e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n^2)\\) \u7684\u6982\u7387\u6781\u4f4e\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nint medianThree(int[] nums, int left, int mid, int right) {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))\nreturn left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))\nreturn mid;\nelse\nreturn right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nint partition(int[] nums, int left, int right) {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nint med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.cpp
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nint medianThree(vector<int>& nums, int left, int mid, int right) {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))\nreturn left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))\nreturn mid;\nelse\nreturn right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nint partition(vector<int>& nums, int left, int right) {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nint med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.py
    def median_three(self, nums: List[int], left: int, mid: int, right: int) -> int:\n\"\"\" \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 \"\"\"\n# \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n# \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif (nums[left] < nums[mid]) ^ (nums[left] < nums[right]):\nreturn left\nelif (nums[mid] < nums[left]) ^ (nums[mid] < nums[right]):\nreturn mid\nreturn right\ndef partition(self, nums: List[int], left: int, right: int) -> int:\n\"\"\" \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 \"\"\"\n# \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nmed: int = self.median_three(nums, left, (left + right) // 2, right)\n# \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nnums[left], nums[med] = nums[med], nums[left]\n# \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j = left, right\nwhile i < j:\nwhile i < j and nums[j] >= nums[left]:\nj -= 1  # \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile i < j and nums[i] <= nums[left]:\ni += 1  # \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n# \u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n# \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i  # \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n
    quick_sort.go
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nfunc (q *quickSortMedian) medianThree(nums []int, left, mid, right int) int {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\uff08!= \u5728\u8fd9\u91cc\u8d77\u5230\u5f02\u6216\u7684\u4f5c\u7528\uff09\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif (nums[left] < nums[mid]) != (nums[left] < nums[right]) {\nreturn left\n} else if (nums[mid] < nums[left]) != (nums[mid] < nums[right]) {\nreturn mid\n}\nreturn right\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09*/\nfunc (q *quickSortMedian) partition(nums []int, left, right int) int {\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nmed := q.medianThree(nums, left, (left+right)/2, right)\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nnums[left], nums[med] = nums[med], nums[left]\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\ni, j := left, right\nfor i < j {\nfor i < j && nums[j] >= nums[left] {\nj-- //\u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nfor i < j && nums[i] <= nums[left] {\ni++ //\u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\n//\u5143\u7d20\u4ea4\u6362\nnums[i], nums[j] = nums[j], nums[i]\n}\n//\u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nnums[i], nums[left] = nums[left], nums[i]\nreturn i //\u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.js
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nmedianThree(nums, left, mid, right) {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right])) return left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right])) return mid;\nelse return right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\npartition(nums, left, right) {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nlet med = this.medianThree(nums, left, Math.floor((left + right) / 2), right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nthis.swap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) j--; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left]) i++; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.ts
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nmedianThree(nums: number[], left: number, mid: number, right: number): number {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif (Number(nums[left] < nums[mid]) ^ Number(nums[left] < nums[right])) {\nreturn left;\n} else if (Number(nums[mid] < nums[left]) ^ Number(nums[mid] < nums[right])) {\nreturn mid;\n} else {\nreturn right;\n}\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\npartition(nums: number[], left: number, right: number): number {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nlet med = this.medianThree(nums, left, Math.floor((left + right) / 2), right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nthis.swap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nlet i = left, j = right;\nwhile (i < j) {\nwhile (i < j && nums[j] >= nums[left]) {\nj--; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nwhile (i < j && nums[i] <= nums[left]) {\ni++; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\n}\nthis.swap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nthis.swap(nums, i, left); // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i; // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.c
    [class]{quickSortMedian}-[func]{medianThree}\n[class]{quickSortMedian}-[func]{partition}\n
    quick_sort.cs
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nint medianThree(int[] nums, int left, int mid, int right)\n{\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) ^ (nums[left] < nums[right]))\nreturn left;\nelse if ((nums[mid] < nums[left]) ^ (nums[mid] < nums[right]))\nreturn mid;\nelse\nreturn right;\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nint partition(int[] nums, int left, int right)\n{\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nint med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nint i = left, j = right;\nwhile (i < j)\n{\nwhile (i < j && nums[j] >= nums[left])\nj--;          // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j && nums[i] <= nums[left])\ni++;          // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j); // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);  // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;             // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    quick_sort.swift
    /* \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570 */\nfunc medianThree(nums: [Int], left: Int, mid: Int, right: Int) -> Int {\nif (nums[left] < nums[mid]) != (nums[left] < nums[right]) {\nreturn left\n} else if (nums[mid] < nums[left]) != (nums[mid] < nums[right]) {\nreturn mid\n} else {\nreturn right\n}\n}\n/* \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09 */\nfunc partitionMedian(nums: inout [Int], left: Int, right: Int) -> Int {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nlet med = medianThree(nums: nums, left: left, mid: (left + right) / 2, right: right)\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums: &nums, i: left, j: med)\nreturn partition(nums: &nums, left: left, right: right)\n}\n
    quick_sort.zig
    // \u9009\u53d6\u4e09\u4e2a\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nfn medianThree(nums: []i32, left: usize, mid: usize, right: usize) usize {\n// \u6b64\u5904\u4f7f\u7528\u5f02\u6216\u8fd0\u7b97\u6765\u7b80\u5316\u4ee3\u7801\n// \u5f02\u6216\u89c4\u5219\u4e3a 0 ^ 0 = 1 ^ 1 = 0, 0 ^ 1 = 1 ^ 0 = 1\nif ((nums[left] < nums[mid]) != (nums[left] < nums[right])) {\nreturn left;\n} else if ((nums[mid] < nums[left]) != (nums[mid] < nums[right])) {\nreturn mid;\n} else {\nreturn right;\n}\n}\n// \u54e8\u5175\u5212\u5206\uff08\u4e09\u6570\u53d6\u4e2d\u503c\uff09\nfn partition(nums: []i32, left: usize, right: usize) usize {\n// \u9009\u53d6\u4e09\u4e2a\u5019\u9009\u5143\u7d20\u7684\u4e2d\u4f4d\u6570\nvar med = medianThree(nums, left, (left + right) / 2, right);\n// \u5c06\u4e2d\u4f4d\u6570\u4ea4\u6362\u81f3\u6570\u7ec4\u6700\u5de6\u7aef\nswap(nums, left, med);\n// \u4ee5 nums[left] \u4f5c\u4e3a\u57fa\u51c6\u6570\nvar i = left;\nvar j = right;\nwhile (i < j) {\nwhile (i < j and nums[j] >= nums[left]) j -= 1; // \u4ece\u53f3\u5411\u5de6\u627e\u9996\u4e2a\u5c0f\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nwhile (i < j and nums[i] <= nums[left]) i += 1; // \u4ece\u5de6\u5411\u53f3\u627e\u9996\u4e2a\u5927\u4e8e\u57fa\u51c6\u6570\u7684\u5143\u7d20\nswap(nums, i, j);   // \u4ea4\u6362\u8fd9\u4e24\u4e2a\u5143\u7d20\n}\nswap(nums, i, left);    // \u5c06\u57fa\u51c6\u6570\u4ea4\u6362\u81f3\u4e24\u5b50\u6570\u7ec4\u7684\u5206\u754c\u7ebf\nreturn i;               // \u8fd4\u56de\u57fa\u51c6\u6570\u7684\u7d22\u5f15\n}\n
    "},{"location":"chapter_sorting/quick_sort/#1145","title":"11.4.5. \u00a0 \u5c3e\u9012\u5f52\u4f18\u5316","text":"

    \u666e\u901a\u5feb\u901f\u6392\u5e8f\u5728\u67d0\u4e9b\u8f93\u5165\u4e0b\u7684\u7a7a\u95f4\u6548\u7387\u53d8\u5dee\u3002\u4ecd\u7136\u4ee5\u5b8c\u5168\u5012\u5e8f\u7684\u8f93\u5165\u6570\u7ec4\u4e3a\u4f8b\uff0c\u7531\u4e8e\u6bcf\u8f6e\u54e8\u5175\u5212\u5206\u540e\u53f3\u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 0 \uff0c\u90a3\u4e48\u5c06\u5f62\u6210\u4e00\u4e2a\u9ad8\u5ea6\u4e3a \\(n - 1\\) \u7684\u9012\u5f52\u6811\uff0c\u6b64\u65f6\u4f7f\u7528\u7684\u6808\u5e27\u7a7a\u95f4\u5927\u5c0f\u52a3\u5316\u81f3 \\(O(n)\\) \u3002

    \u4e3a\u4e86\u907f\u514d\u6808\u5e27\u7a7a\u95f4\u7684\u7d2f\u79ef\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u6bcf\u8f6e\u54e8\u5175\u6392\u5e8f\u5b8c\u6210\u540e\uff0c\u5224\u65ad\u4e24\u4e2a\u5b50\u6570\u7ec4\u7684\u957f\u5ea6\u5927\u5c0f\uff0c\u4ec5\u9012\u5f52\u6392\u5e8f\u8f83\u77ed\u7684\u5b50\u6570\u7ec4\u3002\u7531\u4e8e\u8f83\u77ed\u7684\u5b50\u6570\u7ec4\u957f\u5ea6\u4e0d\u4f1a\u8d85\u8fc7 \\(\\frac{n}{2}\\) \uff0c\u56e0\u6b64\u8fd9\u6837\u505a\u80fd\u4fdd\u8bc1\u9012\u5f52\u6df1\u5ea6\u4e0d\u8d85\u8fc7 \\(\\log n\\) \uff0c\u5373\u6700\u5dee\u7a7a\u95f4\u590d\u6742\u5ea6\u88ab\u4f18\u5316\u81f3 \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig quick_sort.java
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nvoid quickSort(int[] nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nint pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nquickSort(nums, left, pivot - 1);  // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.cpp
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nvoid quickSort(vector<int>& nums, int left, int right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nint pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nquickSort(nums, left, pivot - 1);  // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.py
    def quick_sort(self, nums: List[int], left: int, right: int) -> None:\n\"\"\" \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 \"\"\"\n# \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile left < right:\n# \u54e8\u5175\u5212\u5206\u64cd\u4f5c\npivot: int = self.partition(nums, left, right)\n# \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif pivot - left < right - pivot:\nself.quick_sort(nums, left, pivot - 1)  # \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1     # \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\nelse:\nself.quick_sort(nums, pivot + 1, right)  # \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1    # \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n
    quick_sort.go
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09*/\nfunc (q *quickSortTailCall) quickSort(nums []int, left, right int) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nfor left < right {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\npivot := q.partition(nums, left, right)\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif pivot-left < right-pivot {\nq.quickSort(nums, left, pivot-1) // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1                 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nq.quickSort(nums, pivot+1, right) // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1                 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.js
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nquickSort(nums, left, right) {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nlet pivot = this.partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nthis.quickSort(nums, left, pivot - 1); // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nthis.quickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.ts
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nquickSort(nums: number[], left: number, right: number): void {\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nlet pivot = this.partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nthis.quickSort(nums, left, pivot - 1); // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nthis.quickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.c
    [class]{quickSortTailCall}-[func]{quickSort}\n
    quick_sort.cs
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nvoid quickSort(int[] nums, int left, int right)\n{\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile (left < right)\n{\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nint pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot)\n{\nquickSort(nums, left, pivot - 1);  // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n}\nelse\n{\nquickSort(nums, pivot + 1, right); // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1; // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.swift
    /* \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09 */\nfunc quickSortTailCall(nums: inout [Int], left: Int, right: Int) {\nvar left = left\nvar right = right\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\nwhile left < right {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nlet pivot = partition(nums: &nums, left: left, right: right)\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left) < (right - pivot) {\nquickSortTailCall(nums: &nums, left: left, right: pivot - 1) // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSortTailCall(nums: &nums, left: pivot + 1, right: right) // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1 // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    quick_sort.zig
    // \u5feb\u901f\u6392\u5e8f\uff08\u5c3e\u9012\u5f52\u4f18\u5316\uff09\nfn quickSort(nums: []i32, left_: usize, right_: usize) void {\nvar left = left_;\nvar right = right_;\n// \u5b50\u6570\u7ec4\u957f\u5ea6\u4e3a 1 \u65f6\u7ec8\u6b62\u9012\u5f52\nwhile (left < right) {\n// \u54e8\u5175\u5212\u5206\u64cd\u4f5c\nvar pivot = partition(nums, left, right);\n// \u5bf9\u4e24\u4e2a\u5b50\u6570\u7ec4\u4e2d\u8f83\u77ed\u7684\u90a3\u4e2a\u6267\u884c\u5feb\u6392\nif (pivot - left < right - pivot) {\nquickSort(nums, left, pivot - 1);   // \u9012\u5f52\u6392\u5e8f\u5de6\u5b50\u6570\u7ec4\nleft = pivot + 1;                   // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [pivot + 1, right]\n} else {\nquickSort(nums, pivot + 1, right);  // \u9012\u5f52\u6392\u5e8f\u53f3\u5b50\u6570\u7ec4\nright = pivot - 1;                  // \u5269\u4f59\u5f85\u6392\u5e8f\u533a\u95f4\u4e3a [left, pivot - 1]\n}\n}\n}\n
    "},{"location":"chapter_sorting/summary/","title":"11.6. \u00a0 \u5c0f\u7ed3","text":"
    • \u5192\u6ce1\u6392\u5e8f\u901a\u8fc7\u4ea4\u6362\u76f8\u90bb\u5143\u7d20\u6765\u5b9e\u73b0\u6392\u5e8f\u3002\u901a\u8fc7\u589e\u52a0\u6807\u5fd7\u4f4d\u5b9e\u73b0\u63d0\u524d\u8fd4\u56de\uff0c\u6211\u4eec\u53ef\u5c06\u5192\u6ce1\u6392\u5e8f\u7684\u6700\u4f73\u65f6\u95f4\u590d\u6742\u5ea6\u4f18\u5316\u81f3 \\(O(N)\\) \u3002
    • \u63d2\u5165\u6392\u5e8f\u6bcf\u8f6e\u5c06\u5f85\u6392\u5e8f\u533a\u95f4\u5185\u5143\u7d20\u63d2\u5165\u81f3\u5df2\u6392\u5e8f\u533a\u95f4\u7684\u6b63\u786e\u4f4d\u7f6e\uff0c\u4ece\u800c\u5b9e\u73b0\u6392\u5e8f\u3002\u63d2\u5165\u6392\u5e8f\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u867d\u4e3a \\(O(N^2)\\) \uff0c\u4f46\u56e0\u4e3a\u603b\u4f53\u64cd\u4f5c\u5c11\u800c\u5f88\u53d7\u6b22\u8fce\uff0c\u4e00\u822c\u7528\u4e8e\u5c0f\u6570\u636e\u91cf\u7684\u6392\u5e8f\u5de5\u4f5c\u3002
    • \u5feb\u901f\u6392\u5e8f\u57fa\u4e8e\u54e8\u5175\u5212\u5206\u64cd\u4f5c\u5b9e\u73b0\u6392\u5e8f\u3002\u5728\u54e8\u5175\u5212\u5206\u4e2d\uff0c\u6709\u53ef\u80fd\u6bcf\u6b21\u90fd\u9009\u53d6\u5230\u6700\u5dee\u7684\u57fa\u51c6\u6570\uff0c\u4ece\u800c\u5bfc\u81f4\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(N^2)\\) \uff0c\u901a\u8fc7\u5f15\u5165\u4e2d\u4f4d\u6570\u57fa\u51c6\u6570\u6216\u968f\u673a\u57fa\u51c6\u6570\u53ef\u5927\u5927\u964d\u4f4e\u52a3\u5316\u6982\u7387\u3002\u5c3e\u9012\u5f52\u65b9\u6cd5\u53ef\u4ee5\u6709\u6548\u51cf\u5c0f\u9012\u5f52\u6df1\u5ea6\uff0c\u5c06\u7a7a\u95f4\u590d\u6742\u5ea6\u4f18\u5316\u81f3 \\(O(\\log N)\\) \u3002
    • \u5f52\u5e76\u6392\u5e8f\u5305\u542b\u5212\u5206\u548c\u5408\u5e76\u4e24\u4e2a\u9636\u6bb5\uff0c\u662f\u5206\u800c\u6cbb\u4e4b\u7684\u6807\u51c6\u4f53\u73b0\u3002\u5bf9\u4e8e\u5f52\u5e76\u6392\u5e8f\uff0c\u6392\u5e8f\u6570\u7ec4\u9700\u8981\u501f\u52a9\u8f85\u52a9\u6570\u7ec4\uff0c\u7a7a\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(N)\\) \uff1b\u800c\u6392\u5e8f\u94fe\u8868\u7684\u7a7a\u95f4\u590d\u6742\u5ea6\u53ef\u4ee5\u88ab\u4f18\u5316\u81f3 \\(O(1)\\) \u3002
    • \u4e0b\u56fe\u603b\u7ed3\u5bf9\u6bd4\u4e86\u5404\u4e2a\u6392\u5e8f\u7b97\u6cd5\u7684\u8fd0\u884c\u6548\u7387\u4e0e\u7279\u6027\u3002\u5176\u4e2d\uff0c\u6876\u6392\u5e8f\u4e2d \\(k\\) \u4e3a\u6876\u7684\u6570\u91cf\uff1b\u57fa\u6570\u6392\u5e8f\u4ec5\u9002\u7528\u4e8e\u6b63\u6574\u6570\u3001\u5b57\u7b26\u4e32\u3001\u7279\u5b9a\u683c\u5f0f\u7684\u6d6e\u70b9\u6570\uff0c\\(k\\) \u4e3a\u6700\u5927\u6570\u5b57\u7684\u4f4d\u6570\u3002

    Fig. \u6392\u5e8f\u7b97\u6cd5\u5bf9\u6bd4

    • \u603b\u4f53\u6765\u770b\uff0c\u6211\u4eec\u8ffd\u6c42\u8fd0\u884c\u5feb\u3001\u7a33\u5b9a\u3001\u539f\u5730\u3001\u6b63\u5411\u81ea\u9002\u5e94\u6027\u7684\u6392\u5e8f\u3002\u663e\u7136\uff0c\u5982\u540c\u5176\u5b83\u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5\u4e00\u6837\uff0c\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e9b\u6761\u4ef6\u7684\u6392\u5e8f\u7b97\u6cd5\u5e76\u4e0d\u5b58\u5728\uff0c\u6211\u4eec\u9700\u8981\u6839\u636e\u95ee\u9898\u7279\u70b9\u6765\u9009\u62e9\u6392\u5e8f\u7b97\u6cd5\u3002
    "},{"location":"chapter_stack_and_queue/deque/","title":"5.3. \u00a0 \u53cc\u5411\u961f\u5217","text":"

    \u5bf9\u4e8e\u961f\u5217\uff0c\u6211\u4eec\u53ea\u80fd\u5728\u5934\u90e8\u5220\u9664\u6216\u5728\u5c3e\u90e8\u6dfb\u52a0\u5143\u7d20\uff0c\u800c\u300c\u53cc\u5411\u961f\u5217 Deque\u300d\u66f4\u52a0\u7075\u6d3b\uff0c\u5728\u5176\u5934\u90e8\u548c\u5c3e\u90e8\u90fd\u80fd\u6267\u884c\u5143\u7d20\u6dfb\u52a0\u6216\u5220\u9664\u64cd\u4f5c\u3002

    Fig. \u53cc\u5411\u961f\u5217\u7684\u64cd\u4f5c

    "},{"location":"chapter_stack_and_queue/deque/#531","title":"5.3.1. \u00a0 \u53cc\u5411\u961f\u5217\u5e38\u7528\u64cd\u4f5c","text":"

    \u53cc\u5411\u961f\u5217\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\uff0c\u65b9\u6cd5\u540d\u9700\u6839\u636e\u8bed\u8a00\u6765\u786e\u5b9a\u3002

    \u65b9\u6cd5\u540d \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 pushFirst() \u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u961f\u9996 \\(O(1)\\) pushLast() \u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u961f\u5c3e \\(O(1)\\) popFirst() \u5220\u9664\u961f\u9996\u5143\u7d20 \\(O(1)\\) popLast() \u5220\u9664\u961f\u5c3e\u5143\u7d20 \\(O(1)\\) peekFirst() \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \\(O(1)\\) peekLast() \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 \\(O(1)\\)

    \u76f8\u540c\u5730\uff0c\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u597d\u7684\u53cc\u5411\u961f\u5217\u7c7b\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig deque.java
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\nDeque<Integer> deque = new LinkedList<>();\n/* \u5143\u7d20\u5165\u961f */\ndeque.offerLast(2);   // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.offerLast(5);\ndeque.offerLast(4);\ndeque.offerFirst(3);  // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.offerFirst(1);\n/* \u8bbf\u95ee\u5143\u7d20 */\nint peekFirst = deque.peekFirst();  // \u961f\u9996\u5143\u7d20\nint peekLast = deque.peekLast();    // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\nint popFirst = deque.pollFirst();  // \u961f\u9996\u5143\u7d20\u51fa\u961f\nint popLast = deque.pollLast();    // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size = deque.size();\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = deque.isEmpty();\n
    deque.cpp
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\ndeque<int> deque;\n/* \u5143\u7d20\u5165\u961f */\ndeque.push_back(2);   // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.push_back(5);\ndeque.push_back(4);\ndeque.push_front(3);  // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.push_front(1);\n/* \u8bbf\u95ee\u5143\u7d20 */\nint front = deque.front(); // \u961f\u9996\u5143\u7d20\nint back = deque.back();   // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\ndeque.pop_front();  // \u961f\u9996\u5143\u7d20\u51fa\u961f\ndeque.pop_back();   // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size = deque.size();\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty = deque.empty();\n
    deque.py
    \"\"\" \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 \"\"\"\ndeque: Deque[int] = collections.deque()\n\"\"\" \u5143\u7d20\u5165\u961f \"\"\"\ndeque.append(2)      # \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.append(5)\ndeque.append(4)\ndeque.appendleft(3)  # \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.appendleft(1)\n\"\"\" \u8bbf\u95ee\u5143\u7d20 \"\"\"\nfront: int = deque[0]  # \u961f\u9996\u5143\u7d20\nrear: int = deque[-1]  # \u961f\u5c3e\u5143\u7d20\n\"\"\" \u5143\u7d20\u51fa\u961f \"\"\"\npop_front: int = deque.popleft()  # \u961f\u9996\u5143\u7d20\u51fa\u961f\npop_rear: int = deque.pop()       # \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nsize: int = len(deque)\n\"\"\" \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = len(deque) == 0\n
    deque_test.go
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// \u5728 Go \u4e2d\uff0c\u5c06 list \u4f5c\u4e3a\u53cc\u5411\u961f\u5217\u4f7f\u7528\ndeque := list.New()\n/* \u5143\u7d20\u5165\u961f */\ndeque.PushBack(2)      // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.PushBack(5)\ndeque.PushBack(4)\ndeque.PushFront(3)     // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.PushFront(1)\n/* \u8bbf\u95ee\u5143\u7d20 */\nfront := deque.Front() // \u961f\u9996\u5143\u7d20\nrear := deque.Back()   // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\ndeque.Remove(front)    // \u961f\u9996\u5143\u7d20\u51fa\u961f\ndeque.Remove(rear)     // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize := deque.Len()\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty := deque.Len() == 0\n
    deque.js
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// JavaScript \u6ca1\u6709\u5185\u7f6e\u7684\u53cc\u7aef\u961f\u5217\uff0c\u53ea\u80fd\u628a Array \u5f53\u4f5c\u53cc\u7aef\u961f\u5217\u6765\u4f7f\u7528\nconst deque = [];\n/* \u5143\u7d20\u5165\u961f */\ndeque.push(2);\ndeque.push(5);\ndeque.push(4);\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cunshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\ndeque.unshift(3);\ndeque.unshift(1);\nconsole.log(\"\u53cc\u5411\u961f\u5217 deque = \", deque);\n/* \u8bbf\u95ee\u5143\u7d20 */\nconst peekFirst = deque[0];\nconsole.log(\"\u961f\u9996\u5143\u7d20 peekFirst = \" + peekFirst);\nconst peekLast = deque[deque.length - 1];\nconsole.log(\"\u961f\u5c3e\u5143\u7d20 peekLast = \" + peekLast);\n/* \u5143\u7d20\u51fa\u961f */\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst popFront = deque.shift();\nconsole.log(\"\u961f\u9996\u51fa\u961f\u5143\u7d20 popFront = \" + popFront + \"\uff0c\u961f\u9996\u51fa\u961f\u540e deque = \" + deque);\nconst popBack = deque.pop();\nconsole.log(\"\u961f\u5c3e\u51fa\u961f\u5143\u7d20 popBack = \" + popBack + \"\uff0c\u961f\u5c3e\u51fa\u961f\u540e deque = \" + deque);\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nconst size = deque.length;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u957f\u5ea6 size = \" + size);\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst isEmpty = size === 0;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a = \" + isEmpty);\n
    deque.ts
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// TypeScript \u6ca1\u6709\u5185\u7f6e\u7684\u53cc\u7aef\u961f\u5217\uff0c\u53ea\u80fd\u628a Array \u5f53\u4f5c\u53cc\u7aef\u961f\u5217\u6765\u4f7f\u7528\nconst deque: number[] = [];\n/* \u5143\u7d20\u5165\u961f */\ndeque.push(2);\ndeque.push(5);\ndeque.push(4);\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cunshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\ndeque.unshift(3);\ndeque.unshift(1);\nconsole.log(\"\u53cc\u5411\u961f\u5217 deque = \", deque);\n/* \u8bbf\u95ee\u5143\u7d20 */\nconst peekFirst: number = deque[0];\nconsole.log(\"\u961f\u9996\u5143\u7d20 peekFirst = \" + peekFirst);\nconst peekLast: number = deque[deque.length - 1];\nconsole.log(\"\u961f\u5c3e\u5143\u7d20 peekLast = \" + peekLast);\n/* \u5143\u7d20\u51fa\u961f */\n// \u8bf7\u6ce8\u610f\uff0c\u7531\u4e8e\u662f\u6570\u7ec4\uff0cshift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst popFront: number = deque.shift() as number;\nconsole.log(\"\u961f\u9996\u51fa\u961f\u5143\u7d20 popFront = \" + popFront + \"\uff0c\u961f\u9996\u51fa\u961f\u540e deque = \" + deque);\nconst popBack: number = deque.pop() as number;\nconsole.log(\"\u961f\u5c3e\u51fa\u961f\u5143\u7d20 popBack = \" + popBack + \"\uff0c\u961f\u5c3e\u51fa\u961f\u540e deque = \" + deque);\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nconst size: number = deque.length;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u957f\u5ea6 size = \" + size);\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst isEmpty: boolean = size === 0;\nconsole.log(\"\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a = \" + isEmpty);\n
    deque.c
    \n
    deque.cs
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// \u5728 C# \u4e2d\uff0c\u5c06\u94fe\u8868 LinkedList \u770b\u4f5c\u53cc\u5411\u961f\u5217\u6765\u4f7f\u7528\nLinkedList<int> deque = new LinkedList<int>();\n/* \u5143\u7d20\u5165\u961f */\ndeque.AddLast(2);   // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.AddLast(5);\ndeque.AddLast(4);\ndeque.AddFirst(3);  // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.AddFirst(1);\n/* \u8bbf\u95ee\u5143\u7d20 */\nint peekFirst = deque.First.Value;  // \u961f\u9996\u5143\u7d20\nint peekLast = deque.Last.Value;    // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\ndeque.RemoveFirst();  // \u961f\u9996\u5143\u7d20\u51fa\u961f\ndeque.RemoveLast();   // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size = deque.Count;\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = deque.Count == 0;\n
    deque.swift
    /* \u521d\u59cb\u5316\u53cc\u5411\u961f\u5217 */\n// Swift \u6ca1\u6709\u5185\u7f6e\u7684\u53cc\u5411\u961f\u5217\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u53cc\u5411\u961f\u5217\u6765\u4f7f\u7528\nvar deque: [Int] = []\n/* \u5143\u7d20\u5165\u961f */\ndeque.append(2) // \u6dfb\u52a0\u81f3\u961f\u5c3e\ndeque.append(5)\ndeque.append(4)\ndeque.insert(3, at: 0) // \u6dfb\u52a0\u81f3\u961f\u9996\ndeque.insert(1, at: 0)\n/* \u8bbf\u95ee\u5143\u7d20 */\nlet peekFirst = deque.first! // \u961f\u9996\u5143\u7d20\nlet peekLast = deque.last! // \u961f\u5c3e\u5143\u7d20\n/* \u5143\u7d20\u51fa\u961f */\n// \u4f7f\u7528 Array \u6a21\u62df\u65f6 popFirst \u7684\u590d\u6742\u5ea6\u4e3a O(n)\nlet popFirst = deque.removeFirst() // \u961f\u9996\u5143\u7d20\u51fa\u961f\nlet popLast = deque.removeLast() // \u961f\u5c3e\u5143\u7d20\u51fa\u961f\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nlet size = deque.count\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nlet isEmpty = deque.isEmpty\n
    deque.zig
    \n
    "},{"location":"chapter_stack_and_queue/deque/#532","title":"5.3.2. \u00a0 \u53cc\u5411\u961f\u5217\u5b9e\u73b0 *","text":"

    \u4e0e\u961f\u5217\u7c7b\u4f3c\uff0c\u53cc\u5411\u961f\u5217\u540c\u6837\u53ef\u4ee5\u4f7f\u7528\u94fe\u8868\u6216\u6570\u7ec4\u6765\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/deque/#_1","title":"\u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u7684\u5b9e\u73b0","text":"

    \u56de\u5fc6\u4e0a\u8282\u5185\u5bb9\uff0c\u7531\u4e8e\u53ef\u4ee5\u65b9\u4fbf\u5730\u5220\u9664\u94fe\u8868\u5934\u7ed3\u70b9\uff08\u5bf9\u5e94\u51fa\u961f\u64cd\u4f5c\uff09\uff0c\u4ee5\u53ca\u5728\u94fe\u8868\u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0\u65b0\u7ed3\u70b9\uff08\u5bf9\u5e94\u5165\u961f\u64cd\u4f5c\uff09\uff0c\u56e0\u6b64\u6211\u4eec\u4f7f\u7528\u666e\u901a\u5355\u5411\u94fe\u8868\u6765\u5b9e\u73b0\u961f\u5217\u3002

    \u800c\u53cc\u5411\u961f\u5217\u7684\u5934\u90e8\u548c\u5c3e\u90e8\u90fd\u53ef\u4ee5\u6267\u884c\u5165\u961f\u4e0e\u51fa\u961f\u64cd\u4f5c\uff0c\u6362\u8a00\u4e4b\uff0c\u53cc\u5411\u961f\u5217\u7684\u64cd\u4f5c\u662f\u201c\u9996\u5c3e\u5bf9\u79f0\u201d\u7684\uff0c\u4e5f\u9700\u8981\u5b9e\u73b0\u53e6\u4e00\u4e2a\u5bf9\u79f0\u65b9\u5411\u7684\u64cd\u4f5c\u3002\u56e0\u6b64\uff0c\u53cc\u5411\u961f\u5217\u9700\u8981\u4f7f\u7528\u300c\u53cc\u5411\u94fe\u8868\u300d\u6765\u5b9e\u73b0\u3002

    \u6211\u4eec\u5c06\u53cc\u5411\u94fe\u8868\u7684\u5934\u7ed3\u70b9\u548c\u5c3e\u7ed3\u70b9\u5206\u522b\u770b\u4f5c\u53cc\u5411\u961f\u5217\u7684\u961f\u9996\u548c\u961f\u5c3e\uff0c\u5e76\u4e14\u5b9e\u73b0\u5728\u4e24\u7aef\u90fd\u80fd\u6dfb\u52a0\u4e0e\u5220\u9664\u7ed3\u70b9\u3002

    LinkedListDequepushLast()pushFirst()popLast()popFirst()

    \u4ee5\u4e0b\u662f\u5177\u4f53\u5b9e\u73b0\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linkedlist_deque.java
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nint val;       // \u7ed3\u70b9\u503c\nListNode next; // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nListNode prev; // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nListNode(int val) {\nthis.val = val;\nprev = next = null;\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate ListNode front, rear; // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear\nprivate int queSize = 0;      // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\npublic LinkedListDeque() {\nfront = rear = null;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u961f\u64cd\u4f5c */\nprivate void push(int num, boolean isFront) {\nListNode node = new ListNode(num);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (isEmpty())\nfront = rear = node;\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelse if (isFront) {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nfront.prev = node;\nnode.next = front;\nfront = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nrear.next = node;\nnode.prev = rear;\nrear = node;  // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize++; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n}\n/* \u961f\u9996\u5165\u961f */\npublic void pushFirst(int num) {\npush(num, true);\n}\n/* \u961f\u5c3e\u5165\u961f */\npublic void pushLast(int num) {\npush(num, false);\n}\n/* \u51fa\u961f\u64cd\u4f5c */\nprivate Integer pop(boolean isFront) {\n// \u82e5\u961f\u5217\u4e3a\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de null\nif (isEmpty())\nreturn null;\nint val;\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif (isFront) {\nval = front.val; // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nListNode fNext = front.next;\nif (fNext != null) {\nfNext.prev = null;\nfront.next = null;\n}\nfront = fNext;   // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\n} else {\nval = rear.val;  // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nListNode rPrev = rear.prev;\nif (rPrev != null) {\nrPrev.next = null;\nrear.prev = null;\n}\nrear = rPrev;    // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize--; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val;\n}\n/* \u961f\u9996\u51fa\u961f */\npublic Integer popFirst() {\nreturn pop(true);\n}\n/* \u961f\u5c3e\u51fa\u961f */\npublic Integer popLast() {\nreturn pop(false);\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic Integer peekFirst() {\nreturn isEmpty() ? null : front.val;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npublic Integer peekLast() {\nreturn isEmpty() ? null : rear.val;\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\npublic int[] toArray() {\nListNode node = front;\nint[] res = new int[size()];\nfor (int i = 0; i < res.length; i++) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_deque.cpp
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nstruct DoublyListNode {\nint val;               // \u7ed3\u70b9\u503c\nDoublyListNode *next;  // \u540e\u7ee7\u7ed3\u70b9\u6307\u9488\nDoublyListNode *prev;  // \u524d\u9a71\u7ed3\u70b9\u6307\u9488\nDoublyListNode(int val) : val(val), prev(nullptr), next(nullptr) {}\n};\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate:\nDoublyListNode *front, *rear; // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear\nint queSize = 0;              // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nLinkedListDeque() : front(nullptr), rear(nullptr) {}\n/* \u6790\u6784\u65b9\u6cd5 */\n~LinkedListDeque() {\n// \u91ca\u653e\u5185\u5b58\nDoublyListNode *pre, *cur = front;\nwhile (cur != nullptr) {\npre = cur;\ncur = cur->next;\ndelete pre;\n}\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u961f\u64cd\u4f5c */\nvoid push(int num, bool isFront) {\nDoublyListNode *node = new DoublyListNode(num);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (isEmpty())\nfront = rear = node;\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelse if (isFront) {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nfront->prev = node;\nnode->next = front;\nfront = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nrear->next = node;\nnode->prev = rear;\nrear = node;  // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize++; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n}\n/* \u961f\u9996\u5165\u961f */\nvoid pushFirst(int num) {\npush(num, true);\n}\n/* \u961f\u5c3e\u5165\u961f */\nvoid pushLast(int num) {\npush(num, false);\n}\n/* \u51fa\u961f\u64cd\u4f5c */\nint pop(bool isFront) {\n// \u82e5\u961f\u5217\u4e3a\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de -1\nif (isEmpty())\nreturn -1;\nint val;\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif (isFront) {\nval = front->val; // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nDoublyListNode *fNext = front->next;\nif (fNext != nullptr) {\nfNext->prev = nullptr;\nfront->next = nullptr;\n}\nfront = fNext;   // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\n} else {\nval = rear->val; // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nDoublyListNode *rPrev = rear->prev;\nif (rPrev != nullptr) {\nrPrev->next = nullptr;\nrear->prev = nullptr;\n}\nrear = rPrev;    // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize--; // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val;\n}\n/* \u961f\u9996\u51fa\u961f */\nint popFirst() {\nreturn pop(true);\n}\n/* \u961f\u5c3e\u51fa\u961f */\nint popLast() {\nreturn pop(false);\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peekFirst() {\nreturn isEmpty() ? -1 : front->val;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nint peekLast() {\nreturn isEmpty() ? -1 : rear->val;\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nvector<int> toVector() {\nDoublyListNode *node = front;\nvector<int> res(size());\nfor (int i = 0; i < res.size(); i++) {\nres[i] = node->val;\nnode = node->next;\n}\nreturn res;\n}\n};\n
    linkedlist_deque.py
    class ListNode:\n\"\"\" \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 \"\"\"\ndef __init__(self, val: int) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.val: int = val\nself.next: Optional[ListNode] = None  # \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nself.prev: Optional[ListNode] = None  # \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nclass LinkedListDeque:\n\"\"\" \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 \"\"\"\ndef __init__(self) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.front: Optional[ListNode] = None # \u5934\u7ed3\u70b9 front\nself.rear: Optional[ListNode] = None  # \u5c3e\u7ed3\u70b9 rear\nself.__size: int = 0        # \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.size() == 0\ndef push(self, num: int, is_front: bool) -> None:\n\"\"\" \u5165\u961f\u64cd\u4f5c \"\"\"\nnode = ListNode(num)\n# \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif self.is_empty():\nself.front = self.rear = node\n# \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelif is_front:\n# \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nself.front.prev = node\nnode.next = self.front\nself.front = node  # \u66f4\u65b0\u5934\u7ed3\u70b9\n# \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\nelse:\n# \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nself.rear.next = node\nnode.prev = self.rear\nself.rear = node  # \u66f4\u65b0\u5c3e\u7ed3\u70b9\nself.__size += 1  # \u66f4\u65b0\u961f\u5217\u957f\u5ea6\ndef push_first(self, num: int) -> None:\n\"\"\" \u961f\u9996\u5165\u961f \"\"\"\nself.push(num, True)\ndef push_last(self, num: int) -> None:\n\"\"\" \u961f\u5c3e\u5165\u961f \"\"\"\nself.push(num, False)\ndef pop(self, is_front: bool) -> int:\n\"\"\" \u51fa\u961f\u64cd\u4f5c \"\"\"\n# \u82e5\u961f\u5217\u4e3a\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de None\nif self.is_empty():\nreturn None\n# \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif is_front:\nval: int = self.front.val  # \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n# \u5220\u9664\u5934\u7ed3\u70b9\nfnext: Optional[ListNode] = self.front.next\nif fnext != None:\nfnext.prev = None\nself.front.next = None\nself.front = fnext  # \u66f4\u65b0\u5934\u7ed3\u70b9\n# \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\nelse:\nval: int = self.rear.val  # \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n# \u5220\u9664\u5c3e\u7ed3\u70b9\nrprev: Optional[ListNode] = self.rear.prev\nif rprev != None:\nrprev.next = None\nself.rear.prev = None\nself.rear = rprev  # \u66f4\u65b0\u5c3e\u7ed3\u70b9\nself.__size -= 1  # \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val\ndef pop_first(self) -> int:\n\"\"\" \u961f\u9996\u51fa\u961f \"\"\"\nreturn self.pop(True)\ndef pop_last(self) -> int:\n\"\"\" \u961f\u5c3e\u51fa\u961f \"\"\"\nreturn self.pop(False)\ndef peek_first(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nreturn None if self.is_empty() else self.front.val\ndef peek_last(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 \"\"\"\nreturn None if self.is_empty() else self.rear.val\ndef to_array(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 \"\"\"\nnode: Optional[ListNode] = self.front\nres: List[int] = [0] * self.size()\nfor i in range(self.size()):\nres[i] = node.val\nnode = node.next\nreturn res\n
    linkedlist_deque.go
    /* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\ntype linkedListDeque struct {\n// \u4f7f\u7528\u5185\u7f6e\u5305 list\ndata *list.List\n}\n/* \u521d\u59cb\u5316\u53cc\u7aef\u961f\u5217 */\nfunc newLinkedListDeque() *linkedListDeque {\nreturn &linkedListDeque{\ndata: list.New(),\n}\n}\n/* \u961f\u9996\u5143\u7d20\u5165\u961f */\nfunc (s *linkedListDeque) pushFirst(value any) {\ns.data.PushFront(value)\n}\n/* \u961f\u5c3e\u5143\u7d20\u5165\u961f */\nfunc (s *linkedListDeque) pushLast(value any) {\ns.data.PushBack(value)\n}\n/* \u961f\u9996\u5143\u7d20\u51fa\u961f */\nfunc (s *linkedListDeque) popFirst() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u961f\u5c3e\u5143\u7d20\u51fa\u961f */\nfunc (s *linkedListDeque) popLast() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc (s *linkedListDeque) peekFirst() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\nreturn e.Value\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nfunc (s *linkedListDeque) peekLast() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\nreturn e.Value\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc (s *linkedListDeque) size() int {\nreturn s.data.Len()\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc (s *linkedListDeque) isEmpty() bool {\nreturn s.data.Len() == 0\n}\n/* \u83b7\u53d6 List \u7528\u4e8e\u6253\u5370 */\nfunc (s *linkedListDeque) toList() *list.List {\nreturn s.data\n}\n
    linkedlist_deque.js
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nprev;   // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nnext;   // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nval;    // \u7ed3\u70b9\u503c\nconstructor(val) {\nthis.val = val;\nthis.next = null;\nthis.prev = null;\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\n#front;  // \u5934\u7ed3\u70b9 front\n#rear;   // \u5c3e\u7ed3\u70b9 rear\n#queSize;    // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\nconstructor() {\nthis.#front = null;\nthis.#rear = null;\nthis.#queSize = 0;\n}\n/* \u961f\u5c3e\u5165\u961f\u64cd\u4f5c */\npushLast(val) {\nconst node = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.#queSize === 0) {\nthis.#front = node;\nthis.#rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nthis.#rear.next = node;\nnode.prev = this.#rear;\nthis.#rear = node; // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nthis.#queSize++;\n}\n/* \u961f\u9996\u5165\u961f\u64cd\u4f5c */\npushFirst(val) {\nconst node = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.#queSize === 0) {\nthis.#front = node;\nthis.#rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nthis.#front.prev = node;\nnode.next = this.#front;\nthis.#front = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\nthis.#queSize++;\n}\n/* \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c */\npopLast() {\nif (this.#queSize === 0) {\nreturn null;\n}\nconst value = this.#rear.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nlet temp = this.#rear.prev;\nif (temp !== null) {\ntemp.next = null;\nthis.#rear.prev = null;\n}\nthis.#rear = temp;   // \u66f4\u65b0\u5c3e\u7ed3\u70b9\nthis.#queSize--;\nreturn value;\n}\n/* \u961f\u9996\u51fa\u961f\u64cd\u4f5c */\npopFirst() {\nif (this.#queSize === 0) {\nreturn null;\n}\nconst value = this.#front.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nlet temp = this.#front.next;\nif (temp !== null) {\ntemp.prev = null;\nthis.#front.next = null;\n}\nthis.#front = temp;   // \u66f4\u65b0\u5934\u7ed3\u70b9\nthis.#queSize--;\nreturn value;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast() {\nreturn this.#queSize === 0 ? null : this.#rear.val;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst() {\nreturn this.#queSize === 0 ? null : this.#front.val;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.#queSize === 0;\n}\n/* \u6253\u5370\u53cc\u5411\u961f\u5217 */\nprint() {\nconst arr = [];\nlet temp = this.#front;\nwhile (temp !== null) {\narr.push(temp.val);\ntemp = temp.next;\n}\nconsole.log(\"[\" + arr.join(\", \") + \"]\");\n}\n}\n
    linkedlist_deque.ts
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nprev: ListNode;     // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nnext: ListNode;     // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528 (\u6307\u9488)\nval: number;        // \u7ed3\u70b9\u503c\nconstructor(val: number) {\nthis.val = val;\nthis.next = null;\nthis.prev = null;\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate front: ListNode;    // \u5934\u7ed3\u70b9 front\nprivate rear: ListNode;     // \u5c3e\u7ed3\u70b9 rear\nprivate queSize: number;        // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\nconstructor() {\nthis.front = null;\nthis.rear = null;\nthis.queSize = 0;\n}\n/* \u961f\u5c3e\u5165\u961f\u64cd\u4f5c */\npushLast(val: number): void {\nconst node: ListNode = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.queSize === 0) {\nthis.front = node;\nthis.rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nthis.rear.next = node;\nnode.prev = this.rear;\nthis.rear = node; // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nthis.queSize++;\n}\n/* \u961f\u9996\u5165\u961f\u64cd\u4f5c */\npushFirst(val: number): void {\nconst node: ListNode = new ListNode(val);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (this.queSize === 0) {\nthis.front = node;\nthis.rear = node;\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nthis.front.prev = node;\nnode.next = this.front;\nthis.front = node; // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\nthis.queSize++;\n}\n/* \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c */\npopLast(): number {\nif (this.queSize === 0) {\nreturn null;\n}\nconst value: number = this.rear.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nlet temp: ListNode = this.rear.prev;\nif (temp !== null) {\ntemp.next = null;\nthis.rear.prev = null;\n}\nthis.rear = temp;   // \u66f4\u65b0\u5c3e\u7ed3\u70b9\nthis.queSize--;\nreturn value;\n}\n/* \u961f\u9996\u51fa\u961f\u64cd\u4f5c */\npopFirst(): number {\nif (this.queSize === 0) {\nreturn null;\n}\nconst value: number = this.front.val; // \u5b58\u50a8\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nlet temp: ListNode = this.front.next;\nif (temp !== null) {\ntemp.prev = null;\nthis.front.next = null;\n}\nthis.front = temp;   // \u66f4\u65b0\u5934\u7ed3\u70b9\nthis.queSize--;\nreturn value;\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast(): number {\nreturn this.queSize === 0 ? null : this.rear.val;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst(): number {\nreturn this.queSize === 0 ? null : this.front.val;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.queSize === 0;\n}\n/* \u6253\u5370\u53cc\u5411\u961f\u5217 */\nprint(): void {\nconst arr: number[] = [];\nlet temp: ListNode = this.front;\nwhile (temp !== null) {\narr.push(temp.val);\ntemp = temp.next;\n}\nconsole.log(\"[\" + arr.join(\", \") + \"]\");\n}\n}\n
    linkedlist_deque.c
    [class]{ListNode}-[func]{}\n[class]{LinkedListDeque}-[func]{}\n
    linkedlist_deque.cs
    [class]{ListNode}-[func]{}\n[class]{LinkedListDeque}-[func]{}\n
    linkedlist_deque.swift
    /* \u53cc\u5411\u94fe\u8868\u7ed3\u70b9 */\nclass ListNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar next: ListNode? // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nvar prev: ListNode? // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\ninit(val: Int) {\nself.val = val\n}\n}\n/* \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass LinkedListDeque {\nprivate var front: ListNode? // \u5934\u7ed3\u70b9 front\nprivate var rear: ListNode? // \u5c3e\u7ed3\u70b9 rear\nprivate var queSize: Int // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\ninit() {\nqueSize = 0\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nqueSize\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u5165\u961f\u64cd\u4f5c */\nprivate func push(num: Int, isFront: Bool) {\nlet node = ListNode(val: num)\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif isEmpty() {\nfront = node\nrear = node\n}\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\nelse if isFront {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nfront?.prev = node\nnode.next = front\nfront = node // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\nelse {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nrear?.next = node\nnode.prev = rear\nrear = node // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize += 1 // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n}\n/* \u961f\u9996\u5165\u961f */\nfunc pushFirst(num: Int) {\npush(num: num, isFront: true)\n}\n/* \u961f\u5c3e\u5165\u961f */\nfunc pushLast(num: Int) {\npush(num: num, isFront: false)\n}\n/* \u51fa\u961f\u64cd\u4f5c */\nprivate func pop(isFront: Bool) -> Int {\nif isEmpty() {\nfatalError(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\")\n}\nlet val: Int\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif isFront {\nval = front!.val // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nlet fNext = front?.next\nif fNext != nil {\nfNext?.prev = nil\nfront?.next = nil\n}\nfront = fNext // \u66f4\u65b0\u5934\u7ed3\u70b9\n}\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\nelse {\nval = rear!.val // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nlet rPrev = rear?.prev\nif rPrev != nil {\nrPrev?.next = nil\nrear?.prev = nil\n}\nrear = rPrev // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nqueSize -= 1 // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val\n}\n/* \u961f\u9996\u51fa\u961f */\nfunc popFirst() -> Int {\npop(isFront: true)\n}\n/* \u961f\u5c3e\u51fa\u961f */\nfunc popLast() -> Int {\npop(isFront: false)\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peekFirst() -> Int? {\nisEmpty() ? nil : front?.val\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nfunc peekLast() -> Int? {\nisEmpty() ? nil : rear?.val\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nfunc toArray() -> [Int] {\nvar node = front\nvar res = Array(repeating: 0, count: size())\nfor i in res.indices {\nres[i] = node!.val\nnode = node?.next\n}\nreturn res\n}\n}\n
    linkedlist_deque.zig
    // \u53cc\u5411\u94fe\u8868\u7ed3\u70b9\nfn ListNode(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nval: T = undefined,     // \u7ed3\u70b9\u503c\nnext: ?*Self = null,    // \u540e\u7ee7\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\nprev: ?*Self = null,    // \u524d\u9a71\u7ed3\u70b9\u5f15\u7528\uff08\u6307\u9488\uff09\n// Initialize a list node with specific value\npub fn init(self: *Self, x: i32) void {\nself.val = x;\nself.next = null;\nself.prev = null;\n}\n};\n}\n// \u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217\nfn LinkedListDeque(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nfront: ?*ListNode(T) = null,                    // \u5934\u7ed3\u70b9 front\nrear: ?*ListNode(T) = null,                     // \u5c3e\u7ed3\u70b9 rear\ndeqSize: usize = 0,                             // \u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u961f\u5217\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.front = null;\nself.rear = null;\nself.deqSize = 0;\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.deqSize;\n}\n// \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u5165\u961f\u64cd\u4f5c\npub fn push(self: *Self, num: T, isFront: bool) !void {\nvar node = try self.mem_allocator.create(ListNode(T));\nnode.init(num);\n// \u82e5\u94fe\u8868\u4e3a\u7a7a\uff0c\u5219\u4ee4 front, rear \u90fd\u6307\u5411 node\nif (self.isEmpty()) {\nself.front = node;\nself.rear = node;\n// \u961f\u9996\u5165\u961f\u64cd\u4f5c\n} else if (isFront) {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5934\u90e8\nself.front.?.prev = node;\nnode.next = self.front;\nself.front = node;  // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u5165\u961f\u64cd\u4f5c\n} else {\n// \u5c06 node \u6dfb\u52a0\u81f3\u94fe\u8868\u5c3e\u90e8\nself.rear.?.next = node;\nnode.prev = self.rear;\nself.rear = node;   // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nself.deqSize += 1;      // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\n} // \u961f\u9996\u5165\u961f\npub fn pushFirst(self: *Self, num: T) !void {\ntry self.push(num, true);\n} // \u961f\u5c3e\u5165\u961f\npub fn pushLast(self: *Self, num: T) !void {\ntry self.push(num, false);\n} // \u51fa\u961f\u64cd\u4f5c\npub fn pop(self: *Self, isFront: bool) T {\nif (self.isEmpty()) @panic(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nvar val: T = undefined;\n// \u961f\u9996\u51fa\u961f\u64cd\u4f5c\nif (isFront) {\nval = self.front.?.val;     // \u6682\u5b58\u5934\u7ed3\u70b9\u503c\n// \u5220\u9664\u5934\u7ed3\u70b9\nvar fNext = self.front.?.next;\nif (fNext != null) {\nfNext.?.prev = null;\nself.front.?.next = null;\n}\nself.front = fNext;         // \u66f4\u65b0\u5934\u7ed3\u70b9\n// \u961f\u5c3e\u51fa\u961f\u64cd\u4f5c\n} else {\nval = self.rear.?.val;      // \u6682\u5b58\u5c3e\u7ed3\u70b9\u503c\n// \u5220\u9664\u5c3e\u7ed3\u70b9\nvar rPrev = self.rear.?.prev;\nif (rPrev != null) {\nrPrev.?.next = null;\nself.rear.?.prev = null;\n}\nself.rear = rPrev;          // \u66f4\u65b0\u5c3e\u7ed3\u70b9\n}\nself.deqSize -= 1;              // \u66f4\u65b0\u961f\u5217\u957f\u5ea6\nreturn val;\n} // \u961f\u9996\u51fa\u961f\npub fn popFirst(self: *Self) T {\nreturn self.pop(true);\n} // \u961f\u5c3e\u51fa\u961f\npub fn popLast(self: *Self) T {\nreturn self.pop(false);\n} // \u8bbf\u95ee\u961f\u9996\u5143\u7d20\npub fn peekFirst(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nreturn self.front.?.val;\n}  // \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20\npub fn peekLast(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nreturn self.rear.?.val;\n}\n// \u5c06\u94fe\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\nvar node = self.front;\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nwhile (i < res.len) : (i += 1) {\nres[i] = node.?.val;\nnode = node.?.next;\n}\nreturn res;\n}\n// \u6253\u5370\u53cc\u5411\u961f\u5217\npub fn print(self: *Self) !void {\nvar nums = try self.toArray();\nstd.debug.print(\"[\", .{});\nif (nums.len > 0) {\nfor (nums) |num, j| {\nstd.debug.print(\"{}{s}\", .{num, if (j == nums.len - 1) \"]\" else \" <-> \" });\n}\n} else {\nstd.debug.print(\"]\", .{});\n}\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/deque/#_2","title":"\u57fa\u4e8e\u6570\u7ec4\u7684\u5b9e\u73b0","text":"

    \u4e0e\u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u961f\u5217\u7c7b\u4f3c\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528\u73af\u5f62\u6570\u7ec4\u6765\u5b9e\u73b0\u53cc\u5411\u961f\u5217\u3002\u5728\u5b9e\u73b0\u961f\u5217\u7684\u57fa\u7840\u4e0a\uff0c\u589e\u52a0\u5b9e\u73b0\u201c\u961f\u9996\u5165\u961f\u201d\u548c\u201c\u961f\u5c3e\u51fa\u961f\u201d\u65b9\u6cd5\u5373\u53ef\u3002

    ArrayDequepushLast()pushFirst()popLast()popFirst()

    \u4ee5\u4e0b\u662f\u5177\u4f53\u5b9e\u73b0\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_deque.java
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate int[] nums;  // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate int front;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate int queSize; // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\npublic ArrayDeque(int capacity) {\nthis.nums = new int[capacity];\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\npublic int capacity() {\nreturn nums.length;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn queSize == 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nprivate int index(int i) {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + capacity()) % capacity();\n}\n/* \u961f\u9996\u5165\u961f */\npublic void pushFirst(int num) {\nif (queSize == capacity()) {\nSystem.out.println(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nfront = index(front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nnums[front] = num;\nqueSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\npublic void pushLast(int num) {\nif (queSize == capacity()) {\nSystem.out.println(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nint rear = index(front + queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\npublic int popFirst() {\nint num = peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfront = index(front + 1);\nqueSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\npublic int popLast() {\nint num = peekLast();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peekFirst() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn nums[front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npublic int peekLast() {\nif (isEmpty())\nthrow new EmptyStackException();\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nint last = index(front + queSize - 1);\nreturn nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\npublic int[] toArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] res = new int[queSize];\nfor (int i = 0, j = front; i < queSize; i++, j++) {\nres[i] = nums[index(j)];\n}\nreturn res;\n}\n}\n
    array_deque.cpp
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate:\nvector<int> nums;  // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nint front;         // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nint queSize;       // \u53cc\u5411\u961f\u5217\u957f\u5ea6\npublic:\n/* \u6784\u9020\u65b9\u6cd5 */\nArrayDeque(int capacity) {\nnums.resize(capacity);\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\nint capacity() {\nreturn nums.size();\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty() {\nreturn queSize == 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nint index(int i) {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + capacity()) % capacity();\n}\n/* \u961f\u9996\u5165\u961f */\nvoid pushFirst(int num) {\nif (queSize == capacity()) {\ncout << \"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\" << endl;\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nfront = index(front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nnums[front] = num;\nqueSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\nvoid pushLast(int num) {\nif (queSize == capacity()) {\ncout << \"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\" << endl;\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nint rear = index(front + queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\nint popFirst() {\nint num = peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfront = index(front + 1);\nqueSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\nint popLast() {\nint num = peekLast();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peekFirst() {\nif (isEmpty())\nthrow out_of_range(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\nreturn nums[front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nint peekLast() {\nif (isEmpty())\nthrow out_of_range(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\");\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nint last = index(front + queSize - 1);\nreturn nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nvector<int> toVector() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvector<int> res(queSize);\nfor (int i = 0, j = front; i < queSize; i++, j++) {\nres[i] = nums[index(j)];\n}\nreturn res;\n}\n};\n
    array_deque.py
    class ArrayDeque:\n\"\"\" \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 \"\"\"\ndef __init__(self, capacity: int) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__nums: List[int] = [0] * capacity\nself.__front: int = 0\nself.__size: int = 0\ndef capacity(self) -> int:\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf \"\"\"\nreturn len(self.__nums)\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.__size == 0\ndef index(self, i: int) -> int:\n\"\"\" \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 \"\"\"\n# \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n# \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n# \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + self.capacity()) % self.capacity()\ndef push_first(self, num: int) -> None:\n\"\"\" \u961f\u9996\u5165\u961f \"\"\"\nif self.__size == self.capacity():\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n# \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n# \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nself.__front = self.index(self.__front - 1)\n# \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nself.__nums[self.__front] = num\nself.__size += 1\ndef push_last(self, num: int) -> None:\n\"\"\" \u961f\u5c3e\u5165\u961f \"\"\"\nif self.__size == self.capacity():\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n# \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nrear = self.index(self.__front + self.__size)\n# \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nself.__nums[rear] = num\nself.__size += 1\ndef pop_first(self) -> int:\n\"\"\" \u961f\u9996\u51fa\u961f \"\"\"\nnum = self.peek_first()\n# \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nself.__front = self.index(self.__front + 1)\nself.__size -= 1\nreturn num\ndef pop_last(self) -> int:\n\"\"\" \u961f\u5c3e\u51fa\u961f \"\"\"\nnum = self.peek_last()\nself.__size -= 1\nreturn num\ndef peek_first(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\"\nreturn self.__nums[self.__front]\ndef peek_last(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\"\n# \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nlast = self.index(self.__front + self.__size - 1)\nreturn self.__nums[last]\ndef to_array(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 \"\"\"\n# \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nres = []\nfor i in range(self.__size):\nres.append(self.__nums[self.index(self.__front + i)])\nreturn res\n
    array_deque.go
    [class]{ArrayDeque}-[func]{}\n
    array_deque.js
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\n#nums;       // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\n#front;      // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\n#queSize;    // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(capacity) {\nthis.#nums = new Array(capacity);\nthis.#front = 0;\nthis.#queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\ncapacity() {\nreturn this.#nums.length;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.#queSize === 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nindex(i) {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + this.capacity()) % this.capacity();\n}\n/* \u961f\u9996\u5165\u961f */\npushFirst(num) {\nif (this.#queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nthis.#front = this.index(this.#front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nthis.#nums[this.#front] = num;\nthis.#queSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\npushLast(num) {\nif (this.#queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nconst rear = this.index(this.#front + this.#queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.#nums[rear] = num;\nthis.#queSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\npopFirst() {\nconst num = this.peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nthis.#front = this.index(this.#front + 1);\nthis.#queSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\npopLast() {\nconst num = this.peekLast();\nthis.#queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst() {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\nreturn this.#nums[this.#front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast() {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nconst last = this.index(this.#front + this.#queSize - 1);\nreturn this.#nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\ntoArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst res = [];\nfor (let i = 0, j = this.#front; i < this.#queSize; i++, j++) {\nres[i] = this.#nums[this.index(j)];\n}\nreturn res;\n}\n}\n
    array_deque.ts
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate nums: number[];     // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate front: number;      // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate queSize: number;    // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\nconstructor(capacity: number) {\nthis.nums = new Array(capacity);\nthis.front = 0;\nthis.queSize = 0;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\ncapacity(): number {\nreturn this.nums.length;\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nsize(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.queSize === 0;\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nindex(i: number): number {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\nreturn (i + this.capacity()) % this.capacity();\n}\n/* \u961f\u9996\u5165\u961f */\npushFirst(num: number): void {\nif (this.queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nthis.front = this.index(this.front - 1);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nthis.nums[this.front] = num;\nthis.queSize++;\n}\n/* \u961f\u5c3e\u5165\u961f */\npushLast(num: number): void {\nif (this.queSize === this.capacity()) {\nconsole.log(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nconst rear: number = this.index(this.front + this.queSize);\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.nums[rear] = num;\nthis.queSize++;\n}\n/* \u961f\u9996\u51fa\u961f */\npopFirst(): number {\nconst num: number = this.peekFirst();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nthis.front = this.index(this.front + 1);\nthis.queSize--;\nreturn num;\n}\n/* \u961f\u5c3e\u51fa\u961f */\npopLast(): number {\nconst num: number = this.peekLast();\nthis.queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeekFirst(): number {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\nreturn this.nums[this.front];\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\npeekLast(): number {\nif (this.isEmpty())\nthrow new Error(\"The Deque Is Empty.\");\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nconst last = this.index(this.front + this.queSize - 1);\nreturn this.nums[last];\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\ntoArray(): number[] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst res: number[] = [];\nfor (let i = 0, j = this.front; i < this.queSize; i++, j++) {\nres[i] = this.nums[this.index(j)];\n}\nreturn res;\n}\n}\n
    array_deque.c
    [class]{ArrayDeque}-[func]{}\n
    array_deque.cs
    [class]{ArrayDeque}-[func]{}\n
    array_deque.swift
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u53cc\u5411\u961f\u5217 */\nclass ArrayDeque {\nprivate var nums: [Int] // \u7528\u4e8e\u5b58\u50a8\u53cc\u5411\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate var front: Int // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate var queSize: Int // \u53cc\u5411\u961f\u5217\u957f\u5ea6\n/* \u6784\u9020\u65b9\u6cd5 */\ninit(capacity: Int) {\nnums = Array(repeating: 0, count: capacity)\nfront = 0\nqueSize = 0\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u5bb9\u91cf */\nfunc capacity() -> Int {\nnums.count\n}\n/* \u83b7\u53d6\u53cc\u5411\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nqueSize\n}\n/* \u5224\u65ad\u53cc\u5411\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u8ba1\u7b97\u73af\u5f62\u6570\u7ec4\u7d22\u5f15 */\nprivate func index(i: Int) -> Int {\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\u5b9e\u73b0\u6570\u7ec4\u9996\u5c3e\u76f8\u8fde\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u56de\u5230\u5934\u90e8\n// \u5f53 i \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\uff0c\u56de\u5230\u5c3e\u90e8\n(i + capacity()) % capacity()\n}\n/* \u961f\u9996\u5165\u961f */\nfunc pushFirst(num: Int) {\nif size() == capacity() {\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n}\n// \u961f\u9996\u6307\u9488\u5411\u5de6\u79fb\u52a8\u4e00\u4f4d\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 front \u8d8a\u8fc7\u6570\u7ec4\u5934\u90e8\u540e\u56de\u5230\u5c3e\u90e8\nfront = index(i: front - 1)\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u9996\nnums[front] = num\nqueSize += 1\n}\n/* \u961f\u5c3e\u5165\u961f */\nfunc pushLast(num: Int) {\nif size() == capacity() {\nprint(\"\u53cc\u5411\u961f\u5217\u5df2\u6ee1\")\nreturn\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\nlet rear = index(i: front + size())\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num\nqueSize += 1\n}\n/* \u961f\u9996\u51fa\u961f */\nfunc popFirst() -> Int {\nlet num = peekFirst()\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\nfront = index(i: front + 1)\nqueSize -= 1\nreturn num\n}\n/* \u961f\u5c3e\u51fa\u961f */\nfunc popLast() -> Int {\nlet num = peekLast()\nqueSize -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peekFirst() -> Int {\nif isEmpty() {\nfatalError(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\")\n}\nreturn nums[front]\n}\n/* \u8bbf\u95ee\u961f\u5c3e\u5143\u7d20 */\nfunc peekLast() -> Int {\nif isEmpty() {\nfatalError(\"\u53cc\u5411\u961f\u5217\u4e3a\u7a7a\")\n}\n// \u8ba1\u7b97\u5c3e\u5143\u7d20\u7d22\u5f15\nlet last = index(i: front + size() - 1)\nreturn nums[last]\n}\n/* \u8fd4\u56de\u6570\u7ec4\u7528\u4e8e\u6253\u5370 */\nfunc toArray() -> [Int] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar res = Array(repeating: 0, count: size())\nfor (i, j) in sequence(first: (0, front), next: { $0 < self.size() - 1 ? ($0 + 1, $1 + 1) : nil }) {\nres[i] = nums[index(i: j)]\n}\nreturn res\n}\n}\n
    array_deque.zig
    [class]{ArrayDeque}-[func]{}\n
    "},{"location":"chapter_stack_and_queue/deque/#533","title":"5.3.3. \u00a0 \u53cc\u5411\u961f\u5217\u5e94\u7528","text":"

    \u53cc\u5411\u961f\u5217\u540c\u65f6\u8868\u73b0\u51fa\u6808\u4e0e\u961f\u5217\u7684\u903b\u8f91\uff0c\u56e0\u6b64\u53ef\u4ee5\u5b9e\u73b0\u4e24\u8005\u7684\u6240\u6709\u5e94\u7528\uff0c\u5e76\u4e14\u63d0\u4f9b\u66f4\u9ad8\u7684\u81ea\u7531\u5ea6\u3002

    \u6211\u4eec\u77e5\u9053\uff0c\u8f6f\u4ef6\u7684\u201c\u64a4\u9500\u201d\u529f\u80fd\u9700\u8981\u4f7f\u7528\u6808\u6765\u5b9e\u73b0\uff1b\u7cfb\u7edf\u628a\u6bcf\u4e00\u6b21\u66f4\u6539\u64cd\u4f5c push \u5230\u6808\u4e2d\uff0c\u7136\u540e\u901a\u8fc7 pop \u5b9e\u73b0\u64a4\u9500\u3002\u7136\u800c\uff0c\u8003\u8651\u5230\u7cfb\u7edf\u8d44\u6e90\u6709\u9650\uff0c\u8f6f\u4ef6\u4e00\u822c\u4f1a\u9650\u5236\u64a4\u9500\u7684\u6b65\u6570\uff08\u4f8b\u5982\u4ec5\u5141\u8bb8\u4fdd\u5b58 \\(50\\) \u6b65\uff09\uff0c\u90a3\u4e48\u5f53\u6808\u7684\u957f\u5ea6 \\(> 50\\) \u65f6\uff0c\u8f6f\u4ef6\u5c31\u9700\u8981\u5728\u6808\u5e95\uff08\u5373\u961f\u9996\uff09\u6267\u884c\u5220\u9664\uff0c\u4f46\u6808\u65e0\u6cd5\u5b9e\u73b0\uff0c\u6b64\u65f6\u5c31\u9700\u8981\u4f7f\u7528\u53cc\u5411\u961f\u5217\u6765\u66ff\u4ee3\u6808\u3002\u6ce8\u610f\uff0c\u201c\u64a4\u9500\u201d\u7684\u6838\u5fc3\u903b\u8f91\u4ecd\u7136\u662f\u6808\u7684\u5148\u5165\u540e\u51fa\uff0c\u53ea\u662f\u53cc\u5411\u961f\u5217\u53ef\u4ee5\u66f4\u52a0\u7075\u6d3b\u5730\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/queue/","title":"5.2. \u00a0 \u961f\u5217","text":"

    \u300c\u961f\u5217 Queue\u300d\u662f\u4e00\u79cd\u9075\u5faa\u300c\u5148\u5165\u5148\u51fa first in, first out\u300d\u6570\u636e\u64cd\u4f5c\u89c4\u5219\u7684\u7ebf\u6027\u6570\u636e\u7ed3\u6784\u3002\u987e\u540d\u601d\u4e49\uff0c\u961f\u5217\u6a21\u62df\u7684\u662f\u6392\u961f\u73b0\u8c61\uff0c\u5373\u5916\u9762\u7684\u4eba\u4e0d\u65ad\u52a0\u5165\u961f\u5217\u5c3e\u90e8\uff0c\u800c\u5904\u4e8e\u961f\u5217\u5934\u90e8\u7684\u4eba\u4e0d\u65ad\u5730\u79bb\u5f00\u3002

    \u6211\u4eec\u5c06\u961f\u5217\u5934\u90e8\u79f0\u4e3a\u300c\u961f\u9996\u300d\uff0c\u961f\u5217\u5c3e\u90e8\u79f0\u4e3a\u300c\u961f\u5c3e\u300d\uff0c\u5c06\u628a\u5143\u7d20\u52a0\u5165\u961f\u5c3e\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u5165\u961f\u300d\uff0c\u5220\u9664\u961f\u9996\u5143\u7d20\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u51fa\u961f\u300d\u3002

    Fig. \u961f\u5217\u7684\u5148\u5165\u5148\u51fa\u89c4\u5219

    "},{"location":"chapter_stack_and_queue/queue/#521","title":"5.2.1. \u00a0 \u961f\u5217\u5e38\u7528\u64cd\u4f5c","text":"

    \u961f\u5217\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\u3002\u9700\u8981\u6ce8\u610f\uff0c\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u7684\u65b9\u6cd5\u540d\u662f\u4e0d\u540c\u7684\uff0c\u5728\u8fd9\u91cc\u6211\u4eec\u91c7\u7528\u4e0e\u6808\u76f8\u540c\u7684\u65b9\u6cd5\u547d\u540d\u3002

    \u65b9\u6cd5\u540d \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 push() \u5143\u7d20\u5165\u961f\uff0c\u5373\u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u961f\u5c3e \\(O(1)\\) pop() \u961f\u9996\u5143\u7d20\u51fa\u961f \\(O(1)\\) peek() \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \\(O(1)\\)

    \u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u597d\u7684\u961f\u5217\u7c7b\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig queue.java
    /* \u521d\u59cb\u5316\u961f\u5217 */\nQueue<Integer> queue = new LinkedList<>();\n/* \u5143\u7d20\u5165\u961f */\nqueue.offer(1);\nqueue.offer(3);\nqueue.offer(2);\nqueue.offer(5);\nqueue.offer(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek = queue.peek();\n/* \u5143\u7d20\u51fa\u961f */\nint pop = queue.poll();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size = queue.size();\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = queue.isEmpty();\n
    queue.cpp
    /* \u521d\u59cb\u5316\u961f\u5217 */\nqueue<int> queue;\n/* \u5143\u7d20\u5165\u961f */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint front = queue.front();\n/* \u5143\u7d20\u51fa\u961f */\nqueue.pop();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size = queue.size();\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty = queue.empty();\n
    queue.py
    \"\"\" \u521d\u59cb\u5316\u961f\u5217 \"\"\"\n# \u5728 Python \u4e2d\uff0c\u6211\u4eec\u4e00\u822c\u5c06\u53cc\u5411\u961f\u5217\u7c7b deque \u770b\u4f5c\u961f\u5217\u4f7f\u7528\n# \u867d\u7136 queue.Queue() \u662f\u7eaf\u6b63\u7684\u961f\u5217\u7c7b\uff0c\u4f46\u4e0d\u592a\u597d\u7528\uff0c\u56e0\u6b64\u4e0d\u5efa\u8bae\nque: Deque[int] = collections.deque()\n\"\"\" \u5143\u7d20\u5165\u961f \"\"\"\nque.append(1)\nque.append(3)\nque.append(2)\nque.append(5)\nque.append(4)\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nfront: int = que[0];\n\"\"\" \u5143\u7d20\u51fa\u961f \"\"\"\npop: int = que.popleft()\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nsize: int = len(que)\n\"\"\" \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = len(que) == 0\n
    queue_test.go
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// \u5728 Go \u4e2d\uff0c\u5c06 list \u4f5c\u4e3a\u961f\u5217\u6765\u4f7f\u7528\nqueue := list.New()\n/* \u5143\u7d20\u5165\u961f */\nqueue.PushBack(1)\nqueue.PushBack(3)\nqueue.PushBack(2)\nqueue.PushBack(5)\nqueue.PushBack(4)\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek := queue.Front()\n/* \u5143\u7d20\u51fa\u961f */\npop := queue.Front()\nqueue.Remove(pop)\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nsize := queue.Len()\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty := queue.Len() == 0\n
    queue.js
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// JavaScript \u6ca1\u6709\u5185\u7f6e\u7684\u961f\u5217\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u961f\u5217\u6765\u4f7f\u7528\nconst queue = [];\n/* \u5143\u7d20\u5165\u961f */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nconst peek = queue[0];\n/* \u5143\u7d20\u51fa\u961f */\n// \u5e95\u5c42\u662f\u6570\u7ec4\uff0c\u56e0\u6b64 shift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst pop = queue.shift();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nconst size = queue.length;\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst empty = queue.length === 0;\n
    queue.ts
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// TypeScript \u6ca1\u6709\u5185\u7f6e\u7684\u961f\u5217\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u961f\u5217\u6765\u4f7f\u7528 \nconst queue: number[] = [];\n/* \u5143\u7d20\u5165\u961f */\nqueue.push(1);\nqueue.push(3);\nqueue.push(2);\nqueue.push(5);\nqueue.push(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nconst peek = queue[0];\n/* \u5143\u7d20\u51fa\u961f */\n// \u5e95\u5c42\u662f\u6570\u7ec4\uff0c\u56e0\u6b64 shift() \u65b9\u6cd5\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a O(n)\nconst pop = queue.shift();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nconst size = queue.length;\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nconst empty = queue.length === 0;\n
    queue.c
    \n
    queue.cs
    /* \u521d\u59cb\u5316\u961f\u5217 */\nQueue<int> queue = new();\n/* \u5143\u7d20\u5165\u961f */\nqueue.Enqueue(1);\nqueue.Enqueue(3);\nqueue.Enqueue(2);\nqueue.Enqueue(5);\nqueue.Enqueue(4);\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek = queue.Peek();\n/* \u5143\u7d20\u51fa\u961f */\nint pop = queue.Dequeue();\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size = queue.Count();\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = queue.Count() == 0;\n
    queue.swift
    /* \u521d\u59cb\u5316\u961f\u5217 */\n// Swift \u6ca1\u6709\u5185\u7f6e\u7684\u961f\u5217\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u961f\u5217\u6765\u4f7f\u7528\nvar queue: [Int] = []\n/* \u5143\u7d20\u5165\u961f */\nqueue.append(1)\nqueue.append(3)\nqueue.append(2)\nqueue.append(5)\nqueue.append(4)\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nlet peek = queue.first!\n/* \u5143\u7d20\u51fa\u961f */\n// \u7531\u4e8e\u662f\u6570\u7ec4\uff0c\u56e0\u6b64 removeFirst \u7684\u590d\u6742\u5ea6\u4e3a O(n)\nlet pool = queue.removeFirst()\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nlet size = queue.count\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nlet isEmpty = queue.isEmpty\n
    queue.zig
    \n
    "},{"location":"chapter_stack_and_queue/queue/#522","title":"5.2.2. \u00a0 \u961f\u5217\u5b9e\u73b0","text":"

    \u961f\u5217\u9700\u8981\u4e00\u79cd\u53ef\u4ee5\u5728\u4e00\u7aef\u6dfb\u52a0\uff0c\u5e76\u5728\u53e6\u4e00\u7aef\u5220\u9664\u7684\u6570\u636e\u7ed3\u6784\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u94fe\u8868\u6216\u6570\u7ec4\u6765\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/queue/#_1","title":"\u57fa\u4e8e\u94fe\u8868\u7684\u5b9e\u73b0","text":"

    \u6211\u4eec\u5c06\u94fe\u8868\u7684\u300c\u5934\u7ed3\u70b9\u300d\u548c\u300c\u5c3e\u7ed3\u70b9\u300d\u5206\u522b\u770b\u4f5c\u662f\u961f\u9996\u548c\u961f\u5c3e\uff0c\u5e76\u89c4\u5b9a\u961f\u5c3e\u53ea\u53ef\u6dfb\u52a0\u7ed3\u70b9\uff0c\u961f\u9996\u53ea\u53ef\u5220\u9664\u7ed3\u70b9\u3002

    LinkedListQueuepush()pop()

    \u4ee5\u4e0b\u662f\u4f7f\u7528\u94fe\u8868\u5b9e\u73b0\u961f\u5217\u7684\u793a\u4f8b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linkedlist_queue.java
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate ListNode front, rear;  // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear \nprivate int queSize = 0;\npublic LinkedListQueue() {\nfront = null;\nrear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u961f */\npublic void push(int num) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nListNode node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (front == null) {\nfront = node;\nrear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nrear.next = node;\nrear = node;\n}\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int pop() {\nint num = peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nfront = front.next;\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek() {\nif (size() == 0)\nthrow new EmptyStackException();\nreturn front.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray() {\nListNode node = front;\nint[] res = new int[size()];\nfor (int i = 0; i < res.length; i++) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.cpp
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate:\nListNode *front, *rear;  // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear \nint queSize;\npublic:\nLinkedListQueue() {\nfront = nullptr;\nrear = nullptr;\nqueSize = 0;\n}\n~LinkedListQueue() {\ndelete front;\ndelete rear;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn queSize == 0;\n}\n/* \u5165\u961f */\nvoid push(int num) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nListNode* node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (front == nullptr) {\nfront = node;\nrear = node;\n}\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\nelse {\nrear->next = node;\nrear = node;\n}\nqueSize++;\n}\n/* \u51fa\u961f */\nvoid pop() {\nint num = peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nListNode *tmp = front;\nfront = front->next;\n// \u91ca\u653e\u5185\u5b58\ndelete tmp; queSize--;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek() {\nif (size() == 0)\nthrow out_of_range(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn front->val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Vector \u5e76\u8fd4\u56de */\nvector<int> toVector() {\nListNode* node = front;\nvector<int> res(size());\nfor (int i = 0; i < res.size(); i++) {\nres[i] = node->val;\nnode = node->next;\n}\nreturn res;\n}\n};\n
    linkedlist_queue.py
    class LinkedListQueue:\n\"\"\" \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__front: Optional[ListNode] = None  # \u5934\u7ed3\u70b9 front\nself.__rear: Optional[ListNode] = None   # \u5c3e\u7ed3\u70b9 rear\nself.__size: int = 0\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn not self.__front\ndef push(self, num: int) -> None:\n\"\"\" \u5165\u961f \"\"\"\n# \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nnode = ListNode(num)\n# \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif self.__front is None:\nself.__front = node\nself.__rear = node\n# \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\nelse:\nself.__rear.next = node\nself.__rear = node\nself.__size += 1\ndef pop(self) -> int:\n\"\"\" \u51fa\u961f \"\"\"\nnum = self.peek()\n# \u5220\u9664\u5934\u7ed3\u70b9\nself.__front = self.__front.next\nself.__size -= 1\nreturn num\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nif self.size() == 0:\nprint(\"\u961f\u5217\u4e3a\u7a7a\")\nreturn False\nreturn self.__front.val\ndef to_list(self) -> List[int]:\n\"\"\" \u8f6c\u5316\u4e3a\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\nqueue = []\ntemp = self.__front\nwhile temp:\nqueue.append(temp.val)\ntemp = temp.next\nreturn queue\n
    linkedlist_queue.go
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\ntype linkedListQueue struct {\n// \u4f7f\u7528\u5185\u7f6e\u5305 list \u6765\u5b9e\u73b0\u961f\u5217\ndata *list.List\n}\n/* \u521d\u59cb\u5316\u961f\u5217 */\nfunc newLinkedListQueue() *linkedListQueue {\nreturn &linkedListQueue{\ndata: list.New(),\n}\n}\n/* \u5165\u961f */\nfunc (s *linkedListQueue) push(value any) {\ns.data.PushBack(value)\n}\n/* \u51fa\u961f */\nfunc (s *linkedListQueue) pop() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc (s *linkedListQueue) peek() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Front()\nreturn e.Value\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc (s *linkedListQueue) size() int {\nreturn s.data.Len()\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc (s *linkedListQueue) isEmpty() bool {\nreturn s.data.Len() == 0\n}\n/* \u83b7\u53d6 List \u7528\u4e8e\u6253\u5370 */\nfunc (s *linkedListQueue) toList() *list.List {\nreturn s.data\n}\n
    linkedlist_queue.js
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\n#front;  // \u5934\u7ed3\u70b9 #front\n#rear;   // \u5c3e\u7ed3\u70b9 #rear\n#queSize = 0;\nconstructor() {\nthis.#front = null;\nthis.#rear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.size === 0;\n}\n/* \u5165\u961f */\npush(num) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nconst node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (!this.#front) {\nthis.#front = node;\nthis.#rear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nthis.#rear.next = node;\nthis.#rear = node;\n}\nthis.#queSize++;\n}\n/* \u51fa\u961f */\npop() {\nconst num = this.peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nthis.#front = this.#front.next;\nthis.#queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek() {\nif (this.size === 0)\nthrow new Error(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn this.#front.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray() {\nlet node = this.#front;\nconst res = new Array(this.size);\nfor (let i = 0; i < res.length; i++) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.ts
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate front: ListNode | null; // \u5934\u7ed3\u70b9 front\nprivate rear: ListNode | null; // \u5c3e\u7ed3\u70b9 rear\nprivate queSize: number = 0;\nconstructor() {\nthis.front = null;\nthis.rear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.size === 0;\n}\n/* \u5165\u961f */\npush(num: number): void {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nconst node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (!this.front) {\nthis.front = node;\nthis.rear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nthis.rear!.next = node;\nthis.rear = node;\n}\nthis.queSize++;\n}\n/* \u51fa\u961f */\npop(): number {\nconst num = this.peek();\nif (!this.front) throw new Error('\u961f\u5217\u4e3a\u7a7a');\n// \u5220\u9664\u5934\u7ed3\u70b9\nthis.front = this.front.next;\nthis.queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek(): number {\nif (this.size === 0) throw new Error('\u961f\u5217\u4e3a\u7a7a');\nreturn this.front!.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray(): number[] {\nlet node = this.front;\nconst res = new Array<number>(this.size);\nfor (let i = 0; i < res.length; i++) {\nres[i] = node!.val;\nnode = node!.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.c
    [class]{linkedListQueue}-[func]{}\n
    linkedlist_queue.cs
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue\n{\nprivate ListNode? front, rear;  // \u5934\u7ed3\u70b9 front \uff0c\u5c3e\u7ed3\u70b9 rear \nprivate int queSize = 0;\npublic LinkedListQueue()\n{\nfront = null;\nrear = null;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn size() == 0;\n}\n/* \u5165\u961f */\npublic void push(int num)\n{\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nListNode node = new ListNode(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (front == null)\n{\nfront = node;\nrear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n}\nelse if (rear != null)\n{\nrear.next = node;\nrear = node;\n}\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int pop()\n{\nint num = peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nfront = front?.next;\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek()\n{\nif (size() == 0 || front == null)\nthrow new Exception();\nreturn front.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray()\n{\nif (front == null)\nreturn Array.Empty<int>();\nListNode node = front;\nint[] res = new int[size()];\nfor (int i = 0; i < res.Length; i++)\n{\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_queue.swift
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217 */\nclass LinkedListQueue {\nprivate var front: ListNode? // \u5934\u7ed3\u70b9\nprivate var rear: ListNode? // \u5c3e\u7ed3\u70b9\nprivate var _size = 0\ninit() {}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\n_size\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u5165\u961f */\nfunc push(num: Int) {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nlet node = ListNode(x: num)\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif front == nil {\nfront = node\nrear = node\n}\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\nelse {\nrear?.next = node\nrear = node\n}\n_size += 1\n}\n/* \u51fa\u961f */\n@discardableResult\nfunc pop() -> Int {\nlet num = peek()\n// \u5220\u9664\u5934\u7ed3\u70b9\nfront = front?.next\n_size -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u961f\u5217\u4e3a\u7a7a\")\n}\nreturn front!.val\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nfunc toArray() -> [Int] {\nvar node = front\nvar res = Array(repeating: 0, count: size())\nfor i in res.indices {\nres[i] = node!.val\nnode = node?.next\n}\nreturn res\n}\n}\n
    linkedlist_queue.zig
    // \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u961f\u5217\nfn LinkedListQueue(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nfront: ?*inc.ListNode(T) = null,                // \u5934\u7ed3\u70b9 front\nrear: ?*inc.ListNode(T) = null,                 // \u5c3e\u7ed3\u70b9 rear\nqueSize: usize = 0,                             // \u961f\u5217\u7684\u957f\u5ea6\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u961f\u5217\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.front = null;\nself.rear = null;\nself.queSize = 0;\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.queSize;\n}\n// \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u8bbf\u95ee\u961f\u9996\u5143\u7d20\npub fn peek(self: *Self) T {\nif (self.size() == 0) @panic(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn self.front.?.val;\n}  // \u5165\u961f\npub fn push(self: *Self, num: T) !void {\n// \u5c3e\u7ed3\u70b9\u540e\u6dfb\u52a0 num\nvar node = try self.mem_allocator.create(inc.ListNode(T));\nnode.init(num);\n// \u5982\u679c\u961f\u5217\u4e3a\u7a7a\uff0c\u5219\u4ee4\u5934\u3001\u5c3e\u7ed3\u70b9\u90fd\u6307\u5411\u8be5\u7ed3\u70b9\nif (self.front == null) {\nself.front = node;\nself.rear = node;\n// \u5982\u679c\u961f\u5217\u4e0d\u4e3a\u7a7a\uff0c\u5219\u5c06\u8be5\u7ed3\u70b9\u6dfb\u52a0\u5230\u5c3e\u7ed3\u70b9\u540e\n} else {\nself.rear.?.next = node;\nself.rear = node;\n}\nself.queSize += 1;\n} // \u51fa\u961f\npub fn pop(self: *Self) T {\nvar num = self.peek();\n// \u5220\u9664\u5934\u7ed3\u70b9\nself.front = self.front.?.next;\nself.queSize -= 1;\nreturn num;\n} // \u5c06\u94fe\u8868\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\nvar node = self.front;\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nwhile (i < res.len) : (i += 1) {\nres[i] = node.?.val;\nnode = node.?.next;\n}\nreturn res;\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/queue/#_2","title":"\u57fa\u4e8e\u6570\u7ec4\u7684\u5b9e\u73b0","text":"

    \u6570\u7ec4\u7684\u5220\u9664\u9996\u5143\u7d20\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \uff0c\u8fd9\u4f1a\u5bfc\u81f4\u51fa\u961f\u64cd\u4f5c\u6548\u7387\u4f4e\u4e0b\u3002\u7136\u800c\uff0c\u6211\u4eec\u53ef\u4ee5\u91c7\u53d6\u4e0b\u8ff0\u7684\u5de7\u5999\u65b9\u6cd5\u6765\u907f\u514d\u8fd9\u4e2a\u95ee\u9898\u3002

    \u8003\u8651\u501f\u52a9\u4e00\u4e2a\u53d8\u91cf front \u6765\u6307\u5411\u961f\u9996\u5143\u7d20\u7684\u7d22\u5f15\uff0c\u5e76\u7ef4\u62a4\u53d8\u91cf queSize \u6765\u8bb0\u5f55\u961f\u5217\u957f\u5ea6\u3002\u6211\u4eec\u5b9a\u4e49 rear = front + queSize \uff0c\u8be5\u516c\u5f0f\u8ba1\u7b97\u51fa\u6765\u7684 rear \u6307\u5411\u201c\u961f\u5c3e\u5143\u7d20\u7d22\u5f15 \\(+1\\) \u201d\u7684\u4f4d\u7f6e\u3002

    \u5728\u8be5\u8bbe\u8ba1\u4e0b\uff0c\u6570\u7ec4\u4e2d\u5305\u542b\u5143\u7d20\u7684\u6709\u6548\u533a\u95f4\u4e3a [front, rear - 1] \uff0c\u8fdb\u800c

    • \u5bf9\u4e8e\u5165\u961f\u64cd\u4f5c\uff0c\u5c06\u8f93\u5165\u5143\u7d20\u8d4b\u503c\u7ed9 rear \u7d22\u5f15\u5904\uff0c\u5e76\u5c06 queSize \u81ea\u589e \\(1\\) \u5373\u53ef\uff1b
    • \u5bf9\u4e8e\u51fa\u961f\u64cd\u4f5c\uff0c\u4ec5\u9700\u5c06 front \u81ea\u589e \\(1\\) \uff0c\u5e76\u5c06 queSize \u81ea\u51cf \\(1\\) \u5373\u53ef\uff1b

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u5165\u961f\u4e0e\u51fa\u961f\u64cd\u4f5c\u90fd\u4ec5\u9700\u5355\u6b21\u64cd\u4f5c\u5373\u53ef\u5b8c\u6210\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u4e3a \\(O(1)\\) \u3002

    ArrayQueuepush()pop()

    \u7ec6\u5fc3\u7684\u540c\u5b66\u53ef\u80fd\u4f1a\u53d1\u73b0\u4e00\u4e2a\u95ee\u9898\uff1a\u5728\u4e0d\u65ad\u5165\u961f\u4e0e\u51fa\u961f\u7684\u8fc7\u7a0b\u4e2d\uff0cfront \u548c rear \u90fd\u5728\u5411\u53f3\u79fb\u52a8\uff0c\u5728\u5230\u8fbe\u6570\u7ec4\u5c3e\u90e8\u540e\u5c31\u65e0\u6cd5\u7ee7\u7eed\u79fb\u52a8\u4e86\u3002\u4e3a\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u6211\u4eec\u8003\u8651\u5c06\u6570\u7ec4\u770b\u4f5c\u662f\u9996\u5c3e\u76f8\u63a5\u7684\uff0c\u8fd9\u6837\u7684\u6570\u7ec4\u88ab\u79f0\u4e3a\u300c\u73af\u5f62\u6570\u7ec4\u300d\u3002

    \u5bf9\u4e8e\u73af\u5f62\u6570\u7ec4\uff0c\u6211\u4eec\u9700\u8981\u4ee4 front \u6216 rear \u5728\u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\uff0c\u76f4\u63a5\u7ed5\u56de\u5230\u6570\u7ec4\u5934\u90e8\u63a5\u7eed\u904d\u5386\u3002\u8fd9\u79cd\u5468\u671f\u6027\u89c4\u5f8b\u53ef\u4ee5\u901a\u8fc7\u300c\u53d6\u4f59\u64cd\u4f5c\u300d\u6765\u5b9e\u73b0\uff0c\u8be6\u60c5\u8bf7\u89c1\u4ee5\u4e0b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_queue.java
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate int[] nums;  // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate int front;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate int queSize; // \u961f\u5217\u957f\u5ea6\npublic ArrayQueue(int capacity) {\nnums = new int[capacity];\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\npublic int capacity() {\nreturn nums.length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn queSize == 0;\n}\n/* \u5165\u961f */\npublic void push(int num) {\nif (queSize == capacity()) {\nSystem.out.println(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nint rear = (front + queSize) % capacity();\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int pop() {\nint num = peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % capacity();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn nums[front];\n}\n/* \u8fd4\u56de\u6570\u7ec4 */\npublic int[] toArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] res = new int[queSize];\nfor (int i = 0, j = front; i < queSize; i++, j++) {\nres[i] = nums[j % capacity()];\n}\nreturn res;\n}\n}\n
    array_queue.cpp
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate:\nint *nums;       // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nint front;       // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nint queSize;     // \u961f\u5217\u957f\u5ea6\nint queCapacity; // \u961f\u5217\u5bb9\u91cf\npublic:\nArrayQueue(int capacity) {\n// \u521d\u59cb\u5316\u6570\u7ec4\nnums = new int[capacity];\nqueCapacity = capacity;\nfront = queSize = 0;\n}\n~ArrayQueue() {\ndelete[] nums;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nint capacity() {\nreturn queCapacity;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nint size() {\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn size() == 0;\n}\n/* \u5165\u961f */\nvoid push(int num) {\nif (queSize == queCapacity) {\ncout << \"\u961f\u5217\u5df2\u6ee1\" << endl;\nreturn;\n}\n// \u8ba1\u7b97\u961f\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nint rear = (front + queSize) % queCapacity;\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u51fa\u961f */\nvoid pop() {\nint num = peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % queCapacity;\nqueSize--;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nint peek() {\nif (empty())\nthrow out_of_range(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn nums[front];\n}\n/* \u5c06\u6570\u7ec4\u8f6c\u5316\u4e3a Vector \u5e76\u8fd4\u56de */\nvector<int> toVector() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvector<int> arr(queSize);\nfor (int i = 0, j = front; i < queSize; i++, j++) {\narr[i] = nums[j % queCapacity];\n}\nreturn arr;\n}\n};\n
    array_queue.py
    class ArrayQueue:\n\"\"\" \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 \"\"\"\ndef __init__(self, size: int) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__nums: List[int] = [0] * size  # \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nself.__front: int = 0          # \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nself.__size: int = 0           # \u961f\u5217\u957f\u5ea6\ndef capacity(self) -> int:\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf \"\"\"\nreturn len(self.__nums)\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.__size == 0\ndef push(self, num: int) -> None:\n\"\"\" \u5165\u961f \"\"\"\nassert self.__size < self.capacity(), \"\u961f\u5217\u5df2\u6ee1\"\n# \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n# \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nrear: int = (self.__front + self.__size) % self.capacity()\n# \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nself.__nums[rear] = num\nself.__size += 1\ndef pop(self) -> int:\n\"\"\" \u51fa\u961f \"\"\"\nnum: int = self.peek()\n# \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nself.__front = (self.__front + 1) % self.capacity()\nself.__size -= 1\nreturn num\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u961f\u9996\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u961f\u5217\u4e3a\u7a7a\"\nreturn self.__nums[self.__front]\ndef to_list(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\nres: List[int] = [0] * self.size()\nj: int = self.__front\nfor i in range(self.size()):\nres[i] = self.__nums[(j % self.capacity())]\nj += 1\nreturn res\n
    array_queue.go
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\ntype arrayQueue struct {\nnums        []int // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nfront       int   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nqueSize     int   // \u961f\u5217\u957f\u5ea6\nqueCapacity int   // \u961f\u5217\u5bb9\u91cf\uff08\u5373\u6700\u5927\u5bb9\u7eb3\u5143\u7d20\u6570\u91cf\uff09\n}\n/* \u521d\u59cb\u5316\u961f\u5217 */\nfunc newArrayQueue(queCapacity int) *arrayQueue {\nreturn &arrayQueue{\nnums:        make([]int, queCapacity),\nqueCapacity: queCapacity,\nfront:       0,\nqueSize:     0,\n}\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc (q *arrayQueue) size() int {\nreturn q.queSize\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc (q *arrayQueue) isEmpty() bool {\nreturn q.queSize == 0\n}\n/* \u5165\u961f */\nfunc (q *arrayQueue) push(num int) {\n// \u5f53 rear == queCapacity \u8868\u793a\u961f\u5217\u5df2\u6ee1\nif q.queSize == q.queCapacity {\nreturn\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nrear := (q.front + q.queSize) % q.queCapacity\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nq.nums[rear] = num\nq.queSize++\n}\n/* \u51fa\u961f */\nfunc (q *arrayQueue) pop() any {\nnum := q.peek()\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nq.front = (q.front + 1) % q.queCapacity\nq.queSize--\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc (q *arrayQueue) peek() any {\nif q.isEmpty() {\nreturn nil\n}\nreturn q.nums[q.front]\n}\n/* \u83b7\u53d6 Slice \u7528\u4e8e\u6253\u5370 */\nfunc (q *arrayQueue) toSlice() []int {\nrear := (q.front + q.queSize)\nif rear >= q.queCapacity {\nrear %= q.queCapacity\nreturn append(q.nums[q.front:], q.nums[:rear]...)\n}\nreturn q.nums[q.front:rear]\n}\n
    array_queue.js
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\n#nums;         // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\n#front = 0;    // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\n#queSize = 0;  // \u961f\u5217\u957f\u5ea6\nconstructor(capacity) {\nthis.#nums = new Array(capacity);\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nget capacity() {\nreturn this.#nums.length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nempty() {\nreturn this.#queSize == 0;\n}\n/* \u5165\u961f */\npush(num) {\nif (this.size == this.capacity) {\nconsole.log(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nconst rear = (this.#front + this.size) % this.capacity;\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.#nums[rear] = num;\nthis.#queSize++;\n}\n/* \u51fa\u961f */\npop() {\nconst num = this.peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nthis.#front = (this.#front + 1) % this.capacity;\nthis.#queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek() {\nif (this.empty())\nthrow new Error(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn this.#nums[this.#front];\n}\n/* \u8fd4\u56de Array */\ntoArray() {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst arr = new Array(this.size);\nfor (let i = 0, j = this.#front; i < this.size; i++, j++) {\narr[i] = this.#nums[j % this.capacity];\n}\nreturn arr;\n}\n}\n
    array_queue.ts
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate nums: number[];  // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate front: number;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate queSize: number; // \u961f\u5217\u957f\u5ea6\nconstructor(capacity: number) {\nthis.nums = new Array(capacity);\nthis.front = this.queSize = 0;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nget capacity(): number {\nreturn this.nums.length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nempty(): boolean {\nreturn this.queSize == 0;\n}\n/* \u5165\u961f */\npush(num: number): void {\nif (this.size == this.capacity) {\nconsole.log(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nconst rear = (this.front + this.queSize) % this.capacity;\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nthis.nums[rear] = num;\nthis.queSize++;\n}\n/* \u51fa\u961f */\npop(): number {\nconst num = this.peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nthis.front = (this.front + 1) % this.capacity;\nthis.queSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npeek(): number {\nif (this.empty())\nthrow new Error(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn this.nums[this.front];\n}\n/* \u8fd4\u56de Array */\ntoArray(): number[] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nconst arr = new Array(this.size);\nfor (let i = 0, j = this.front; i < this.size; i++, j++) {\narr[i] = this.nums[j % this.capacity];\n}\nreturn arr;\n}\n}\n
    array_queue.c
    [class]{arrayQueue}-[func]{}\n
    array_queue.cs
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue\n{\nprivate int[] nums;  // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate int front;   // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate int queSize; // \u961f\u5217\u957f\u5ea6\npublic ArrayQueue(int capacity)\n{\nnums = new int[capacity];\nfront = queSize = 0;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\npublic int capacity()\n{\nreturn nums.Length;\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn queSize;\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn queSize == 0;\n}\n/* \u5165\u961f */\npublic void push(int num)\n{\nif (queSize == capacity())\n{\nConsole.WriteLine(\"\u961f\u5217\u5df2\u6ee1\");\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nint rear = (front + queSize) % capacity();\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num;\nqueSize++;\n}\n/* \u51fa\u961f */\npublic int pop()\n{\nint num = peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % capacity();\nqueSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\npublic int peek()\n{\nif (isEmpty())\nthrow new Exception();\nreturn nums[front];\n}\n/* \u8fd4\u56de\u6570\u7ec4 */\npublic int[] toArray()\n{\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nint[] res = new int[queSize];\nfor (int i = 0, j = front; i < queSize; i++, j++)\n{\nres[i] = nums[j % this.capacity()];\n}\nreturn res;\n}\n}\n
    array_queue.swift
    /* \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217 */\nclass ArrayQueue {\nprivate var nums: [Int] // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4\nprivate var front = 0 // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nprivate var queSize = 0 // \u961f\u5217\u957f\u5ea6\ninit(capacity: Int) {\n// \u521d\u59cb\u5316\u6570\u7ec4\nnums = Array(repeating: 0, count: capacity)\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf */\nfunc capacity() -> Int {\nnums.count\n}\n/* \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nqueSize\n}\n/* \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nqueSize == 0\n}\n/* \u5165\u961f */\nfunc push(num: Int) {\nif size() == capacity() {\nprint(\"\u961f\u5217\u5df2\u6ee1\")\nreturn\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nlet rear = (front + queSize) % capacity()\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nnums[rear] = num\nqueSize += 1\n}\n/* \u51fa\u961f */\n@discardableResult\nfunc pop() -> Int {\nlet num = peek()\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nfront = (front + 1) % capacity()\nqueSize -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u961f\u9996\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u961f\u5217\u4e3a\u7a7a\")\n}\nreturn nums[front]\n}\n/* \u8fd4\u56de\u6570\u7ec4 */\nfunc toArray() -> [Int] {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar res = Array(repeating: 0, count: queSize)\nfor (i, j) in sequence(first: (0, front), next: { $0 < self.queSize - 1 ? ($0 + 1, $1 + 1) : nil }) {\nres[i] = nums[j % capacity()]\n}\nreturn res\n}\n}\n
    array_queue.zig
    // \u57fa\u4e8e\u73af\u5f62\u6570\u7ec4\u5b9e\u73b0\u7684\u961f\u5217\nfn ArrayQueue(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nnums: []T = undefined,                          // \u7528\u4e8e\u5b58\u50a8\u961f\u5217\u5143\u7d20\u7684\u6570\u7ec4     \ncap: usize = 0,                                 // \u961f\u5217\u5bb9\u91cf\nfront: usize = 0,                               // \u961f\u9996\u6307\u9488\uff0c\u6307\u5411\u961f\u9996\u5143\u7d20\nqueSize: usize = 0,                             // \u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e + 1\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u6570\u7ec4\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator, cap: usize) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.cap = cap;\nself.nums = try self.mem_allocator.alloc(T, self.cap);\nstd.mem.set(T, self.nums, @as(T, 0));\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u961f\u5217\u7684\u5bb9\u91cf\npub fn capacity(self: *Self) usize {\nreturn self.cap;\n}\n// \u83b7\u53d6\u961f\u5217\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.queSize;\n}\n// \u5224\u65ad\u961f\u5217\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.queSize == 0;\n}\n// \u5165\u961f\npub fn push(self: *Self, num: T) !void {\nif (self.size() == self.capacity()) {\nstd.debug.print(\"\u961f\u5217\u5df2\u6ee1\\n\", .{});\nreturn;\n}\n// \u8ba1\u7b97\u5c3e\u6307\u9488\uff0c\u6307\u5411\u961f\u5c3e\u7d22\u5f15 + 1\n// \u901a\u8fc7\u53d6\u4f59\u64cd\u4f5c\uff0c\u5b9e\u73b0 rear \u8d8a\u8fc7\u6570\u7ec4\u5c3e\u90e8\u540e\u56de\u5230\u5934\u90e8\nvar rear = (self.front + self.queSize) % self.capacity();\n// \u5c06 num \u6dfb\u52a0\u81f3\u961f\u5c3e\nself.nums[rear] = num;\nself.queSize += 1;\n} // \u51fa\u961f\npub fn pop(self: *Self) T {\nvar num = self.peek();\n// \u961f\u9996\u6307\u9488\u5411\u540e\u79fb\u52a8\u4e00\u4f4d\uff0c\u82e5\u8d8a\u8fc7\u5c3e\u90e8\u5219\u8fd4\u56de\u5230\u6570\u7ec4\u5934\u90e8\nself.front = (self.front + 1) % self.capacity();\nself.queSize -= 1;\nreturn num;\n} // \u8bbf\u95ee\u961f\u9996\u5143\u7d20\npub fn peek(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u961f\u5217\u4e3a\u7a7a\");\nreturn self.nums[self.front];\n} // \u8fd4\u56de\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\n// \u4ec5\u8f6c\u6362\u6709\u6548\u957f\u5ea6\u8303\u56f4\u5185\u7684\u5217\u8868\u5143\u7d20\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nvar j: usize = self.front;\nwhile (i < self.size()) : ({ i += 1; j += 1; }) {\nres[i] = self.nums[j % self.capacity()];\n}\nreturn res;\n}\n};\n}\n

    \u4ee5\u4e0a\u5b9e\u73b0\u7684\u961f\u5217\u4ecd\u5b58\u5728\u5c40\u9650\u6027\uff0c\u5373\u957f\u5ea6\u4e0d\u53ef\u53d8\u3002\u4e0d\u8fc7\u8fd9\u4e2a\u95ee\u9898\u5f88\u5bb9\u6613\u89e3\u51b3\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u6570\u7ec4\u66ff\u6362\u4e3a\u5217\u8868\uff08\u5373\u52a8\u6001\u6570\u7ec4\uff09\uff0c\u4ece\u800c\u5f15\u5165\u6269\u5bb9\u673a\u5236\u3002\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u5c1d\u8bd5\u81ea\u884c\u5b9e\u73b0\u3002

    "},{"location":"chapter_stack_and_queue/queue/#523","title":"5.2.3. \u00a0 \u4e24\u79cd\u5b9e\u73b0\u5bf9\u6bd4","text":"

    \u4e0e\u6808\u7684\u7ed3\u8bba\u4e00\u81f4\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_stack_and_queue/queue/#524","title":"5.2.4. \u00a0 \u961f\u5217\u5178\u578b\u5e94\u7528","text":"
    • \u6dd8\u5b9d\u8ba2\u5355\u3002\u8d2d\u7269\u8005\u4e0b\u5355\u540e\uff0c\u8ba2\u5355\u5c31\u88ab\u52a0\u5165\u5230\u961f\u5217\u4e4b\u4e2d\uff0c\u968f\u540e\u7cfb\u7edf\u518d\u6839\u636e\u987a\u5e8f\u4f9d\u6b21\u5904\u7406\u961f\u5217\u4e2d\u7684\u8ba2\u5355\u3002\u5728\u53cc\u5341\u4e00\u65f6\uff0c\u5728\u77ed\u65f6\u95f4\u5185\u4f1a\u4ea7\u751f\u6d77\u91cf\u7684\u8ba2\u5355\uff0c\u5982\u4f55\u5904\u7406\u300c\u9ad8\u5e76\u53d1\u300d\u5219\u662f\u5de5\u7a0b\u5e08\u4eec\u9700\u8981\u91cd\u70b9\u601d\u8003\u7684\u95ee\u9898\u3002
    • \u5404\u79cd\u5f85\u529e\u4e8b\u9879\u3002\u4efb\u4f55\u9700\u8981\u5b9e\u73b0\u201c\u5148\u6765\u540e\u5230\u201d\u7684\u529f\u80fd\uff0c\u4f8b\u5982\u6253\u5370\u673a\u7684\u4efb\u52a1\u961f\u5217\u3001\u9910\u5385\u7684\u51fa\u9910\u961f\u5217\u7b49\u7b49\u3002
    "},{"location":"chapter_stack_and_queue/stack/","title":"5.1. \u00a0 \u6808","text":"

    \u300c\u6808 Stack\u300d\u662f\u4e00\u79cd\u9075\u5faa\u300c\u5148\u5165\u540e\u51fa first in, last out\u300d\u6570\u636e\u64cd\u4f5c\u89c4\u5219\u7684\u7ebf\u6027\u6570\u636e\u7ed3\u6784\u3002\u6211\u4eec\u53ef\u4ee5\u5c06\u6808\u7c7b\u6bd4\u4e3a\u653e\u5728\u684c\u9762\u4e0a\u7684\u4e00\u645e\u76d8\u5b50\uff0c\u5982\u679c\u9700\u8981\u62ff\u51fa\u5e95\u90e8\u7684\u76d8\u5b50\uff0c\u5219\u9700\u8981\u5148\u5c06\u4e0a\u9762\u7684\u76d8\u5b50\u4f9d\u6b21\u53d6\u51fa\u3002

    \u201c\u76d8\u5b50\u201d\u662f\u4e00\u79cd\u5f62\u8c61\u6bd4\u55bb\uff0c\u6211\u4eec\u5c06\u76d8\u5b50\u66ff\u6362\u4e3a\u4efb\u610f\u4e00\u79cd\u5143\u7d20\uff08\u4f8b\u5982\u6574\u6570\u3001\u5b57\u7b26\u3001\u5bf9\u8c61\u7b49\uff09\uff0c\u5c31\u5f97\u5230\u4e86\u6808\u6570\u636e\u7ed3\u6784\u3002

    \u6211\u4eec\u5c06\u8fd9\u4e00\u645e\u5143\u7d20\u7684\u9876\u90e8\u79f0\u4e3a\u300c\u6808\u9876\u300d\uff0c\u5c06\u5e95\u90e8\u79f0\u4e3a\u300c\u6808\u5e95\u300d\uff0c\u5c06\u628a\u5143\u7d20\u6dfb\u52a0\u5230\u6808\u9876\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u5165\u6808\u300d\uff0c\u5c06\u5220\u9664\u6808\u9876\u5143\u7d20\u7684\u64cd\u4f5c\u79f0\u4e3a\u300c\u51fa\u6808\u300d\u3002

    Fig. \u6808\u7684\u5148\u5165\u540e\u51fa\u89c4\u5219

    "},{"location":"chapter_stack_and_queue/stack/#511","title":"5.1.1. \u00a0 \u6808\u5e38\u7528\u64cd\u4f5c","text":"

    \u6808\u7684\u5e38\u7528\u64cd\u4f5c\u89c1\u4e0b\u8868\uff0c\u65b9\u6cd5\u540d\u9700\u6839\u636e\u7f16\u7a0b\u8bed\u8a00\u6765\u786e\u5b9a\uff0c\u6b64\u5904\u6211\u4eec\u4ee5\u5e38\u89c1\u7684 push , pop , peek \u4e3a\u4f8b\u3002

    \u65b9\u6cd5 \u63cf\u8ff0 \u65f6\u95f4\u590d\u6742\u5ea6 push() \u5143\u7d20\u5165\u6808\uff08\u6dfb\u52a0\u81f3\u6808\u9876\uff09 \\(O(1)\\) pop() \u6808\u9876\u5143\u7d20\u51fa\u6808 \\(O(1)\\) peek() \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \\(O(1)\\)

    \u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u597d\u7684\u6808\u7c7b\u3002 \u67d0\u4e9b\u8bed\u8a00\u5e76\u672a\u4e13\u95e8\u63d0\u4f9b\u6808\u7c7b\uff0c\u4f46\u6211\u4eec\u53ef\u4ee5\u76f4\u63a5\u628a\u8be5\u8bed\u8a00\u7684\u300c\u6570\u7ec4\u300d\u6216\u300c\u94fe\u8868\u300d\u770b\u4f5c\u6808\u6765\u4f7f\u7528\uff0c\u5e76\u901a\u8fc7\u201c\u8111\u8865\u201d\u6765\u5c4f\u853d\u65e0\u5173\u64cd\u4f5c\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig stack.java
    /* \u521d\u59cb\u5316\u6808 */\nStack<Integer> stack = new Stack<>();\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint peek = stack.peek();\n/* \u5143\u7d20\u51fa\u6808 */\nint pop = stack.pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size = stack.size();\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nboolean isEmpty = stack.isEmpty();\n
    stack.cpp
    /* \u521d\u59cb\u5316\u6808 */\nstack<int> stack;\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint top = stack.top();\n/* \u5143\u7d20\u51fa\u6808 */\nstack.pop(); // \u65e0\u8fd4\u56de\u503c\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size = stack.size();\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nbool empty = stack.empty();\n
    stack.py
    \"\"\" \u521d\u59cb\u5316\u6808 \"\"\"\n# Python \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a List \u5f53\u4f5c\u6808\u6765\u4f7f\u7528 \nstack: List[int] = []\n\"\"\" \u5143\u7d20\u5165\u6808 \"\"\"\nstack.append(1)\nstack.append(3)\nstack.append(2)\nstack.append(5)\nstack.append(4)\n\"\"\" \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \"\"\"\npeek: int = stack[-1]\n\"\"\" \u5143\u7d20\u51fa\u6808 \"\"\"\npop: int = stack.pop()\n\"\"\" \u83b7\u53d6\u6808\u7684\u957f\u5ea6 \"\"\"\nsize: int = len(stack)\n\"\"\" \u5224\u65ad\u662f\u5426\u4e3a\u7a7a \"\"\"\nis_empty: bool = len(stack) == 0\n
    stack_test.go
    /* \u521d\u59cb\u5316\u6808 */\n// \u5728 Go \u4e2d\uff0c\u63a8\u8350\u5c06 Slice \u5f53\u4f5c\u6808\u6765\u4f7f\u7528\nvar stack []int\n/* \u5143\u7d20\u5165\u6808 */\nstack = append(stack, 1)\nstack = append(stack, 3)\nstack = append(stack, 2)\nstack = append(stack, 5)\nstack = append(stack, 4)\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npeek := stack[len(stack)-1]\n/* \u5143\u7d20\u51fa\u6808 */\npop := stack[len(stack)-1]\nstack = stack[:len(stack)-1]\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nsize := len(stack)\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nisEmpty := len(stack) == 0\n
    stack.js
    /* \u521d\u59cb\u5316\u6808 */\n// Javascript \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u6808\u6765\u4f7f\u7528 \nconst stack = [];\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nconst peek = stack[stack.length-1];\n/* \u5143\u7d20\u51fa\u6808 */\nconst pop = stack.pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nconst size = stack.length;\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nconst is_empty = stack.length === 0;\n
    stack.ts
    /* \u521d\u59cb\u5316\u6808 */\n// Typescript \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u6808\u6765\u4f7f\u7528 \nconst stack: number[] = [];\n/* \u5143\u7d20\u5165\u6808 */\nstack.push(1);\nstack.push(3);\nstack.push(2);\nstack.push(5);\nstack.push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nconst peek = stack[stack.length - 1];\n/* \u5143\u7d20\u51fa\u6808 */\nconst pop = stack.pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nconst size = stack.length;\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nconst is_empty = stack.length === 0;\n
    stack.c
    \n
    stack.cs
    /* \u521d\u59cb\u5316\u6808 */\nStack<int> stack = new ();\n/* \u5143\u7d20\u5165\u6808 */\nstack.Push(1);\nstack.Push(3);\nstack.Push(2);\nstack.Push(5);\nstack.Push(4);\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint peek = stack.Peek();\n/* \u5143\u7d20\u51fa\u6808 */\nint pop = stack.Pop();\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size = stack.Count();\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nbool isEmpty = stack.Count()==0;\n
    stack.swift
    /* \u521d\u59cb\u5316\u6808 */\n// Swift \u6ca1\u6709\u5185\u7f6e\u7684\u6808\u7c7b\uff0c\u53ef\u4ee5\u628a Array \u5f53\u4f5c\u6808\u6765\u4f7f\u7528\nvar stack: [Int] = []\n/* \u5143\u7d20\u5165\u6808 */\nstack.append(1)\nstack.append(3)\nstack.append(2)\nstack.append(5)\nstack.append(4)\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nlet peek = stack.last!\n/* \u5143\u7d20\u51fa\u6808 */\nlet pop = stack.removeLast()\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nlet size = stack.count\n/* \u5224\u65ad\u662f\u5426\u4e3a\u7a7a */\nlet isEmpty = stack.isEmpty\n
    stack.zig
    \n
    "},{"location":"chapter_stack_and_queue/stack/#512","title":"5.1.2. \u00a0 \u6808\u7684\u5b9e\u73b0","text":"

    \u4e3a\u4e86\u66f4\u52a0\u6e05\u6670\u5730\u4e86\u89e3\u6808\u7684\u8fd0\u884c\u673a\u5236\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u81ea\u5df1\u52a8\u624b\u5b9e\u73b0\u4e00\u4e2a\u6808\u7c7b\u3002

    \u6808\u89c4\u5b9a\u5143\u7d20\u662f\u5148\u5165\u540e\u51fa\u7684\uff0c\u56e0\u6b64\u6211\u4eec\u53ea\u80fd\u5728\u6808\u9876\u6dfb\u52a0\u6216\u5220\u9664\u5143\u7d20\u3002\u7136\u800c\uff0c\u6570\u7ec4\u6216\u94fe\u8868\u90fd\u53ef\u4ee5\u5728\u4efb\u610f\u4f4d\u7f6e\u6dfb\u52a0\u5220\u9664\u5143\u7d20\uff0c\u56e0\u6b64 \u6808\u53ef\u88ab\u770b\u4f5c\u662f\u4e00\u79cd\u53d7\u7ea6\u675f\u7684\u6570\u7ec4\u6216\u94fe\u8868\u3002\u6362\u8a00\u4e4b\uff0c\u6211\u4eec\u53ef\u4ee5\u201c\u5c4f\u853d\u201d\u6570\u7ec4\u6216\u94fe\u8868\u7684\u90e8\u5206\u65e0\u5173\u64cd\u4f5c\uff0c\u4f7f\u4e4b\u5bf9\u5916\u7684\u8868\u73b0\u903b\u8f91\u7b26\u5408\u6808\u7684\u89c4\u5b9a\u5373\u53ef\u3002

    "},{"location":"chapter_stack_and_queue/stack/#_1","title":"\u57fa\u4e8e\u94fe\u8868\u7684\u5b9e\u73b0","text":"

    \u4f7f\u7528\u300c\u94fe\u8868\u300d\u5b9e\u73b0\u6808\u65f6\uff0c\u5c06\u94fe\u8868\u7684\u5934\u7ed3\u70b9\u770b\u4f5c\u6808\u9876\uff0c\u5c06\u5c3e\u7ed3\u70b9\u770b\u4f5c\u6808\u5e95\u3002

    \u5bf9\u4e8e\u5165\u6808\u64cd\u4f5c\uff0c\u5c06\u5143\u7d20\u63d2\u5165\u5230\u94fe\u8868\u5934\u90e8\u5373\u53ef\uff0c\u8fd9\u79cd\u7ed3\u70b9\u6dfb\u52a0\u65b9\u5f0f\u88ab\u79f0\u4e3a\u201c\u5934\u63d2\u6cd5\u201d\u3002\u800c\u5bf9\u4e8e\u51fa\u6808\u64cd\u4f5c\uff0c\u5219\u5c06\u5934\u7ed3\u70b9\u4ece\u94fe\u8868\u4e2d\u5220\u9664\u5373\u53ef\u3002

    LinkedListStackpush()pop()

    \u4ee5\u4e0b\u662f\u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u6808\u7684\u793a\u4f8b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig linkedlist_stack.java
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate ListNode stackPeek;  // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate int stkSize = 0;   // \u6808\u7684\u957f\u5ea6\npublic LinkedListStack() {\nstackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size() {\nreturn stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num) {\nListNode node = new ListNode(num);\nnode.next = stackPeek;\nstackPeek = node;\nstkSize++;\n}\n/* \u51fa\u6808 */\npublic int pop() {\nint num = peek();\nstackPeek = stackPeek.next;\nstkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek() {\nif (size() == 0)\nthrow new EmptyStackException();\nreturn stackPeek.val;\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray() {\nListNode node = stackPeek;\nint[] res = new int[size()];\nfor (int i = res.length - 1; i >= 0; i--) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.cpp
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate:\nListNode* stackTop; // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nint stkSize;        // \u6808\u7684\u957f\u5ea6\npublic:\nLinkedListStack() {\nstackTop = nullptr;\nstkSize = 0;\n}\n~LinkedListStack() {\nfreeMemoryLinkedList(stackTop);\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size() {\nreturn stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn size() == 0;\n}\n/* \u5165\u6808 */\nvoid push(int num) {\nListNode* node = new ListNode(num);\nnode->next = stackTop;\nstackTop = node;\nstkSize++;\n}\n/* \u51fa\u6808 */\nvoid pop() {\nint num = top();\nListNode *tmp = stackTop;\nstackTop = stackTop->next;\n// \u91ca\u653e\u5185\u5b58\ndelete tmp;\nstkSize--;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint top() {\nif (size() == 0)\nthrow out_of_range(\"\u6808\u4e3a\u7a7a\");\nreturn stackTop->val;\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nvector<int> toVector() {\nListNode* node = stackTop;\nvector<int> res(size());\nfor (int i = res.size() - 1; i >= 0; i--) {\nres[i] = node->val;\nnode = node->next;\n}\nreturn res;\n}\n};\n
    linkedlist_stack.py
    class LinkedListStack:\n\"\"\" \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 \"\"\"\ndef __init__(self):\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__peek: Optional[ListNode] = None\nself.__size: int = 0\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u6808\u7684\u957f\u5ea6 \"\"\"\nreturn self.__size\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn not self.__peek\ndef push(self, val: int) -> None:\n\"\"\" \u5165\u6808 \"\"\"\nnode = ListNode(val)\nnode.next = self.__peek\nself.__peek = node\nself.__size += 1\ndef pop(self) -> int:\n\"\"\" \u51fa\u6808 \"\"\"\nnum: int = self.peek()\nself.__peek = self.__peek.next\nself.__size -= 1\nreturn num\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \"\"\"\n# \u5224\u7a7a\u5904\u7406\nif not self.__peek: return None\nreturn self.__peek.val\ndef to_list(self) -> List[int]:\n\"\"\" \u8f6c\u5316\u4e3a\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\narr: List[int] = []\nnode = self.__peek\nwhile node:\narr.append(node.val)\nnode = node.next\narr.reverse()\nreturn arr\n
    linkedlist_stack.go
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\ntype linkedListStack struct {\n// \u4f7f\u7528\u5185\u7f6e\u5305 list \u6765\u5b9e\u73b0\u6808\ndata *list.List\n}\n/* \u521d\u59cb\u5316\u6808 */\nfunc newLinkedListStack() *linkedListStack {\nreturn &linkedListStack{\ndata: list.New(),\n}\n}\n/* \u5165\u6808 */\nfunc (s *linkedListStack) push(value int) {\ns.data.PushBack(value)\n}\n/* \u51fa\u6808 */\nfunc (s *linkedListStack) pop() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\ns.data.Remove(e)\nreturn e.Value\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nfunc (s *linkedListStack) peek() any {\nif s.isEmpty() {\nreturn nil\n}\ne := s.data.Back()\nreturn e.Value\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nfunc (s *linkedListStack) size() int {\nreturn s.data.Len()\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nfunc (s *linkedListStack) isEmpty() bool {\nreturn s.data.Len() == 0\n}\n/* \u83b7\u53d6 List \u7528\u4e8e\u6253\u5370 */\nfunc (s *linkedListStack) toList() *list.List {\nreturn s.data\n}\n
    linkedlist_stack.js
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\n#stackPeek;     // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\n#stkSize = 0;   // \u6808\u7684\u957f\u5ea6\nconstructor() {\nthis.#stackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nisEmpty() {\nreturn this.size == 0;\n}\n/* \u5165\u6808 */\npush(num) {\nconst node = new ListNode(num);\nnode.next = this.#stackPeek;\nthis.#stackPeek = node;\nthis.#stkSize++;\n}\n/* \u51fa\u6808 */\npop() {\nconst num = this.peek();\nthis.#stackPeek = this.#stackPeek.next;\nthis.#stkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npeek() {\nif (!this.#stackPeek)\nthrow new Error(\"\u6808\u4e3a\u7a7a\");\nreturn this.#stackPeek.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray() {\nlet node = this.#stackPeek;\nconst res = new Array(this.size);\nfor (let i = res.length - 1; i >= 0; i--) {\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.ts
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate stackPeek: ListNode | null; // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate stkSize: number = 0; // \u6808\u7684\u957f\u5ea6\nconstructor() {\nthis.stackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nisEmpty(): boolean {\nreturn this.size == 0;\n}\n/* \u5165\u6808 */\npush(num: number): void {\nconst node = new ListNode(num);\nnode.next = this.stackPeek;\nthis.stackPeek = node;\nthis.stkSize++;\n}\n/* \u51fa\u6808 */\npop(): number {\nconst num = this.peek();\nif (!this.stackPeek) throw new Error('\u6808\u4e3a\u7a7a');\nthis.stackPeek = this.stackPeek.next;\nthis.stkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npeek(): number {\nif (!this.stackPeek) throw new Error('\u6808\u4e3a\u7a7a');\nreturn this.stackPeek.val;\n}\n/* \u5c06\u94fe\u8868\u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\ntoArray(): number[] {\nlet node = this.stackPeek;\nconst res = new Array<number>(this.size);\nfor (let i = res.length - 1; i >= 0; i--) {\nres[i] = node!.val;\nnode = node!.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.c
    [class]{linkedListStack}-[func]{}\n
    linkedlist_stack.cs
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack\n{\nprivate ListNode? stackPeek;  // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate int stkSize = 0;   // \u6808\u7684\u957f\u5ea6\npublic LinkedListStack()\n{\nstackPeek = null;\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn stkSize;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num)\n{\nListNode node = new ListNode(num);\nnode.next = stackPeek;\nstackPeek = node;\nstkSize++;\n}\n/* \u51fa\u6808 */\npublic int pop()\n{\nif (stackPeek == null)\nthrow new Exception();\nint num = peek();\nstackPeek = stackPeek.next;\nstkSize--;\nreturn num;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek()\n{\nif (size() == 0 || stackPeek == null)\nthrow new Exception();\nreturn stackPeek.val;\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray()\n{\nif (stackPeek == null)\nreturn Array.Empty<int>();\nListNode node = stackPeek;\nint[] res = new int[size()];\nfor (int i = res.Length - 1; i >= 0; i--)\n{\nres[i] = node.val;\nnode = node.next;\n}\nreturn res;\n}\n}\n
    linkedlist_stack.swift
    /* \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808 */\nclass LinkedListStack {\nprivate var _peek: ListNode? // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nprivate var _size = 0 // \u6808\u7684\u957f\u5ea6\ninit() {}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nfunc size() -> Int {\n_size\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nsize() == 0\n}\n/* \u5165\u6808 */\nfunc push(num: Int) {\nlet node = ListNode(x: num)\nnode.next = _peek\n_peek = node\n_size += 1\n}\n/* \u51fa\u6808 */\n@discardableResult\nfunc pop() -> Int {\nlet num = peek()\n_peek = _peek?.next\n_size -= 1\nreturn num\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u6808\u4e3a\u7a7a\")\n}\nreturn _peek!.val\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nfunc toArray() -> [Int] {\nvar node = _peek\nvar res = Array(repeating: 0, count: _size)\nfor i in sequence(first: res.count - 1, next: { $0 >= 0 + 1 ? $0 - 1 : nil }) {\nres[i] = node!.val\nnode = node?.next\n}\nreturn res\n}\n}\n
    linkedlist_stack.zig
    // \u57fa\u4e8e\u94fe\u8868\u5b9e\u73b0\u7684\u6808\nfn LinkedListStack(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nstackTop: ?*inc.ListNode(T) = null,             // \u5c06\u5934\u7ed3\u70b9\u4f5c\u4e3a\u6808\u9876\nstkSize: usize = 0,                             // \u6808\u7684\u957f\u5ea6\nmem_arena: ?std.heap.ArenaAllocator = null,\nmem_allocator: std.mem.Allocator = undefined,   // \u5185\u5b58\u5206\u914d\u5668\n// \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u6808\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) !void {\nif (self.mem_arena == null) {\nself.mem_arena = std.heap.ArenaAllocator.init(allocator);\nself.mem_allocator = self.mem_arena.?.allocator();\n}\nself.stackTop = null;\nself.stkSize = 0;\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.mem_arena == null) return;\nself.mem_arena.?.deinit();\n}\n// \u83b7\u53d6\u6808\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.stkSize;\n}\n// \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u8bbf\u95ee\u6808\u9876\u5143\u7d20\npub fn top(self: *Self) T {\nif (self.size() == 0) @panic(\"\u6808\u4e3a\u7a7a\");\nreturn self.stackTop.?.val;\n}  // \u5165\u6808\npub fn push(self: *Self, num: T) !void {\nvar node = try self.mem_allocator.create(inc.ListNode(T));\nnode.init(num);\nnode.next = self.stackTop;\nself.stackTop = node;\nself.stkSize += 1;\n} // \u51fa\u6808\npub fn pop(self: *Self) T {\nvar num = self.top();\nself.stackTop = self.stackTop.?.next;\nself.stkSize -= 1;\nreturn num;\n} // \u5c06\u6808\u8f6c\u6362\u4e3a\u6570\u7ec4\npub fn toArray(self: *Self) ![]T {\nvar node = self.stackTop;\nvar res = try self.mem_allocator.alloc(T, self.size());\nstd.mem.set(T, res, @as(T, 0));\nvar i: usize = 0;\nwhile (i < res.len) : (i += 1) {\nres[res.len - i - 1] = node.?.val;\nnode = node.?.next;\n}\nreturn res;\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/stack/#_2","title":"\u57fa\u4e8e\u6570\u7ec4\u7684\u5b9e\u73b0","text":"

    \u4f7f\u7528\u300c\u6570\u7ec4\u300d\u5b9e\u73b0\u6808\u65f6\uff0c\u8003\u8651\u5c06\u6570\u7ec4\u7684\u5c3e\u90e8\u5f53\u4f5c\u6808\u9876\u3002\u8fd9\u6837\u8bbe\u8ba1\u4e0b\uff0c\u300c\u5165\u6808\u300d\u4e0e\u300c\u51fa\u6808\u300d\u64cd\u4f5c\u5c31\u5bf9\u5e94\u5728\u6570\u7ec4\u5c3e\u90e8\u300c\u6dfb\u52a0\u5143\u7d20\u300d\u4e0e\u300c\u5220\u9664\u5143\u7d20\u300d\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4e3a \\(O(1)\\) \u3002

    ArrayStackpush()pop()

    \u7531\u4e8e\u5165\u6808\u7684\u5143\u7d20\u53ef\u80fd\u662f\u6e90\u6e90\u4e0d\u65ad\u7684\uff0c\u56e0\u6b64\u53ef\u4ee5\u4f7f\u7528\u652f\u6301\u52a8\u6001\u6269\u5bb9\u7684\u300c\u5217\u8868\u300d\uff0c\u8fd9\u6837\u5c31\u65e0\u9700\u81ea\u884c\u5b9e\u73b0\u6570\u7ec4\u6269\u5bb9\u4e86\u3002\u4ee5\u4e0b\u662f\u793a\u4f8b\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig array_stack.java
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate ArrayList<Integer> stack;\npublic ArrayStack() {\n// \u521d\u59cb\u5316\u5217\u8868\uff08\u52a8\u6001\u6570\u7ec4\uff09\nstack = new ArrayList<>();\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size() {\nreturn stack.size();\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic boolean isEmpty() {\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num) {\nstack.add(num);\n}\n/* \u51fa\u6808 */\npublic int pop() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn stack.remove(size() - 1);\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek() {\nif (isEmpty())\nthrow new EmptyStackException();\nreturn stack.get(size() - 1);\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic Object[] toArray() {\nreturn stack.toArray();\n}\n}\n
    array_stack.cpp
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate:\nvector<int> stack;\npublic:\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nint size() {\nreturn stack.size();\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nbool empty() {\nreturn stack.empty();\n}\n/* \u5165\u6808 */\nvoid push(int num) {\nstack.push_back(num);\n}\n/* \u51fa\u6808 */\nvoid pop() {\nint oldTop = top();\nstack.pop_back();\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nint top() {\nif(empty())\nthrow out_of_range(\"\u6808\u4e3a\u7a7a\");\nreturn stack.back();\n}\n/* \u8fd4\u56de Vector */\nvector<int> toVector() {\nreturn stack;\n}\n};\n
    array_stack.py
    class ArrayStack:\n\"\"\" \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 \"\"\"\ndef __init__(self) -> None:\n\"\"\" \u6784\u9020\u65b9\u6cd5 \"\"\"\nself.__stack: List[int] = []\ndef size(self) -> int:\n\"\"\" \u83b7\u53d6\u6808\u7684\u957f\u5ea6 \"\"\"\nreturn len(self.__stack)\ndef is_empty(self) -> bool:\n\"\"\" \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a \"\"\"\nreturn self.__stack == []\ndef push(self, item: int) -> None:\n\"\"\" \u5165\u6808 \"\"\"\nself.__stack.append(item)\ndef pop(self) -> int:\n\"\"\" \u51fa\u6808 \"\"\"\nassert not self.is_empty(), \"\u6808\u4e3a\u7a7a\"\nreturn self.__stack.pop()\ndef peek(self) -> int:\n\"\"\" \u8bbf\u95ee\u6808\u9876\u5143\u7d20 \"\"\"\nassert not self.is_empty(), \"\u6808\u4e3a\u7a7a\"\nreturn self.__stack[-1]\ndef to_list(self) -> List[int]:\n\"\"\" \u8fd4\u56de\u5217\u8868\u7528\u4e8e\u6253\u5370 \"\"\"\nreturn self.__stack\n
    array_stack.go
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\ntype arrayStack struct {\ndata []int // \u6570\u636e\n}\n/* \u521d\u59cb\u5316\u6808 */\nfunc newArrayStack() *arrayStack {\nreturn &arrayStack{\n// \u8bbe\u7f6e\u6808\u7684\u957f\u5ea6\u4e3a 0\uff0c\u5bb9\u91cf\u4e3a 16\ndata: make([]int, 0, 16),\n}\n}\n/* \u6808\u7684\u957f\u5ea6 */\nfunc (s *arrayStack) size() int {\nreturn len(s.data)\n}\n/* \u6808\u662f\u5426\u4e3a\u7a7a */\nfunc (s *arrayStack) isEmpty() bool {\nreturn s.size() == 0\n}\n/* \u5165\u6808 */\nfunc (s *arrayStack) push(v int) {\n// \u5207\u7247\u4f1a\u81ea\u52a8\u6269\u5bb9\ns.data = append(s.data, v)\n}\n/* \u51fa\u6808 */\nfunc (s *arrayStack) pop() any {\nval := s.peek()\ns.data = s.data[:len(s.data)-1]\nreturn val\n}\n/* \u83b7\u53d6\u6808\u9876\u5143\u7d20 */\nfunc (s *arrayStack) peek() any {\nif s.isEmpty() {\nreturn nil\n}\nval := s.data[len(s.data)-1]\nreturn val\n}\n/* \u83b7\u53d6 Slice \u7528\u4e8e\u6253\u5370 */\nfunc (s *arrayStack) toSlice() []int {\nreturn s.data\n}\n
    array_stack.js
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\n#stack;\nconstructor() {\nthis.#stack = [];\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size() {\nreturn this.#stack.length;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nempty() {\nreturn this.#stack.length === 0;\n}\n/* \u5165\u6808 */\npush(num) {\nthis.#stack.push(num);\n}\n/* \u51fa\u6808 */\npop() {\nif (this.empty())\nthrow new Error(\"\u6808\u4e3a\u7a7a\");\nreturn this.#stack.pop();\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\ntop() {\nif (this.empty())\nthrow new Error(\"\u6808\u4e3a\u7a7a\");\nreturn this.#stack[this.#stack.length - 1];\n}\n/* \u8fd4\u56de Array */\ntoArray() {\nreturn this.#stack;\n}\n};\n
    array_stack.ts
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate stack: number[];\nconstructor() {\nthis.stack = [];\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nget size(): number {\nreturn this.stack.length;\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nempty(): boolean {\nreturn this.stack.length === 0;\n}\n/* \u5165\u6808 */\npush(num: number): void {\nthis.stack.push(num);\n}\n/* \u51fa\u6808 */\npop(): number | undefined {\nif (this.empty())\nthrow new Error('\u6808\u4e3a\u7a7a');\nreturn this.stack.pop();\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\ntop(): number | undefined {\nif (this.empty())\nthrow new Error('\u6808\u4e3a\u7a7a');\nreturn this.stack[this.stack.length - 1];\n}\n/* \u8fd4\u56de Array */\ntoArray() {\nreturn this.stack;\n}\n};\n
    array_stack.c
    [class]{arrayStack}-[func]{}\n
    array_stack.cs
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack\n{\nprivate List<int> stack;\npublic ArrayStack()\n{\n// \u521d\u59cb\u5316\u5217\u8868\uff08\u52a8\u6001\u6570\u7ec4\uff09\nstack = new();\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\npublic int size()\n{\nreturn stack.Count();\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\npublic bool isEmpty()\n{\nreturn size() == 0;\n}\n/* \u5165\u6808 */\npublic void push(int num)\n{\nstack.Add(num);\n}\n/* \u51fa\u6808 */\npublic int pop()\n{\nif (isEmpty())\nthrow new Exception();\nvar val = peek();\nstack.RemoveAt(size() - 1);\nreturn val;\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\npublic int peek()\n{\nif (isEmpty())\nthrow new Exception();\nreturn stack[size() - 1];\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\npublic int[] toArray()\n{\nreturn stack.ToArray();\n}\n}\n
    array_stack.swift
    /* \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808 */\nclass ArrayStack {\nprivate var stack: [Int]\ninit() {\n// \u521d\u59cb\u5316\u5217\u8868\uff08\u52a8\u6001\u6570\u7ec4\uff09\nstack = []\n}\n/* \u83b7\u53d6\u6808\u7684\u957f\u5ea6 */\nfunc size() -> Int {\nstack.count\n}\n/* \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a */\nfunc isEmpty() -> Bool {\nstack.isEmpty\n}\n/* \u5165\u6808 */\nfunc push(num: Int) {\nstack.append(num)\n}\n/* \u51fa\u6808 */\n@discardableResult\nfunc pop() -> Int {\nif isEmpty() {\nfatalError(\"\u6808\u4e3a\u7a7a\")\n}\nreturn stack.removeLast()\n}\n/* \u8bbf\u95ee\u6808\u9876\u5143\u7d20 */\nfunc peek() -> Int {\nif isEmpty() {\nfatalError(\"\u6808\u4e3a\u7a7a\")\n}\nreturn stack.last!\n}\n/* \u5c06 List \u8f6c\u5316\u4e3a Array \u5e76\u8fd4\u56de */\nfunc toArray() -> [Int] {\nstack\n}\n}\n
    array_stack.zig
    // \u57fa\u4e8e\u6570\u7ec4\u5b9e\u73b0\u7684\u6808\nfn ArrayStack(comptime T: type) type {\nreturn struct {\nconst Self = @This();\nstack: ?std.ArrayList(T) = null,     // \u6784\u9020\u65b9\u6cd5\uff08\u5206\u914d\u5185\u5b58+\u521d\u59cb\u5316\u6808\uff09\npub fn init(self: *Self, allocator: std.mem.Allocator) void {\nif (self.stack == null) {\nself.stack = std.ArrayList(T).init(allocator);\n}\n}\n// \u6790\u6784\u65b9\u6cd5\uff08\u91ca\u653e\u5185\u5b58\uff09\npub fn deinit(self: *Self) void {\nif (self.stack == null) return;\nself.stack.?.deinit();\n}\n// \u83b7\u53d6\u6808\u7684\u957f\u5ea6\npub fn size(self: *Self) usize {\nreturn self.stack.?.items.len;\n}\n// \u5224\u65ad\u6808\u662f\u5426\u4e3a\u7a7a\npub fn isEmpty(self: *Self) bool {\nreturn self.size() == 0;\n}\n// \u8bbf\u95ee\u6808\u9876\u5143\u7d20\npub fn peek(self: *Self) T {\nif (self.isEmpty()) @panic(\"\u6808\u4e3a\u7a7a\");\nreturn self.stack.?.items[self.size() - 1];\n}  // \u5165\u6808\npub fn push(self: *Self, num: T) !void {\ntry self.stack.?.append(num);\n} // \u51fa\u6808\npub fn pop(self: *Self) T {\nvar num = self.stack.?.pop();\nreturn num;\n} // \u8fd4\u56de ArrayList\npub fn toList(self: *Self) std.ArrayList(T) {\nreturn self.stack.?;\n}\n};\n}\n
    "},{"location":"chapter_stack_and_queue/stack/#513","title":"5.1.3. \u00a0 \u4e24\u79cd\u5b9e\u73b0\u5bf9\u6bd4","text":""},{"location":"chapter_stack_and_queue/stack/#_3","title":"\u652f\u6301\u64cd\u4f5c","text":"

    \u4e24\u79cd\u5b9e\u73b0\u90fd\u652f\u6301\u6808\u5b9a\u4e49\u4e2d\u7684\u5404\u9879\u64cd\u4f5c\uff0c\u6570\u7ec4\u5b9e\u73b0\u989d\u5916\u652f\u6301\u968f\u673a\u8bbf\u95ee\uff0c\u4f46\u8fd9\u5df2\u7ecf\u8d85\u51fa\u6808\u7684\u5b9a\u4e49\u8303\u7574\uff0c\u4e00\u822c\u4e0d\u4f1a\u7528\u5230\u3002

    "},{"location":"chapter_stack_and_queue/stack/#_4","title":"\u65f6\u95f4\u6548\u7387","text":"

    \u5728\u6570\u7ec4\uff08\u5217\u8868\uff09\u5b9e\u73b0\u4e2d\uff0c\u5165\u6808\u4e0e\u51fa\u6808\u64cd\u4f5c\u90fd\u662f\u5728\u9884\u5148\u5206\u914d\u597d\u7684\u8fde\u7eed\u5185\u5b58\u4e2d\u64cd\u4f5c\uff0c\u5177\u6709\u5f88\u597d\u7684\u7f13\u5b58\u672c\u5730\u6027\uff0c\u6548\u7387\u5f88\u597d\u3002\u7136\u800c\uff0c\u5982\u679c\u5165\u6808\u65f6\u8d85\u51fa\u6570\u7ec4\u5bb9\u91cf\uff0c\u5219\u4f1a\u89e6\u53d1\u6269\u5bb9\u673a\u5236\uff0c\u90a3\u4e48\u8be5\u6b21\u5165\u6808\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e3a \\(O(n)\\) \u3002

    \u5728\u94fe\u8868\u5b9e\u73b0\u4e2d\uff0c\u94fe\u8868\u7684\u6269\u5bb9\u975e\u5e38\u7075\u6d3b\uff0c\u4e0d\u5b58\u5728\u4e0a\u8ff0\u6570\u7ec4\u6269\u5bb9\u65f6\u53d8\u6162\u7684\u95ee\u9898\u3002\u7136\u800c\uff0c\u5165\u6808\u64cd\u4f5c\u9700\u8981\u521d\u59cb\u5316\u7ed3\u70b9\u5bf9\u8c61\u5e76\u4fee\u6539\u6307\u9488\uff0c\u56e0\u800c\u6548\u7387\u4e0d\u5982\u6570\u7ec4\u3002\u8fdb\u4e00\u6b65\u5730\u601d\u8003\uff0c\u5982\u679c\u5165\u6808\u5143\u7d20\u4e0d\u662f int \u800c\u662f\u7ed3\u70b9\u5bf9\u8c61\uff0c\u90a3\u4e48\u5c31\u53ef\u4ee5\u7701\u53bb\u521d\u59cb\u5316\u6b65\u9aa4\uff0c\u4ece\u800c\u63d0\u5347\u6548\u7387\u3002

    \u7efc\u4e0a\u6240\u8ff0\uff0c\u5f53\u5165\u6808\u4e0e\u51fa\u6808\u64cd\u4f5c\u7684\u5143\u7d20\u662f\u57fa\u672c\u6570\u636e\u7c7b\u578b\uff08\u4f8b\u5982 int , double \uff09\u65f6\uff0c\u5219\u7ed3\u8bba\u5982\u4e0b\uff1a

    • \u6570\u7ec4\u5b9e\u73b0\u7684\u6808\u5728\u89e6\u53d1\u6269\u5bb9\u65f6\u4f1a\u53d8\u6162\uff0c\u4f46\u7531\u4e8e\u6269\u5bb9\u662f\u4f4e\u9891\u64cd\u4f5c\uff0c\u56e0\u6b64 \u603b\u4f53\u6548\u7387\u66f4\u9ad8\uff1b
    • \u94fe\u8868\u5b9e\u73b0\u7684\u6808\u53ef\u4ee5\u63d0\u4f9b \u66f4\u52a0\u7a33\u5b9a\u7684\u6548\u7387\u8868\u73b0\uff1b
    "},{"location":"chapter_stack_and_queue/stack/#_5","title":"\u7a7a\u95f4\u6548\u7387","text":"

    \u5728\u521d\u59cb\u5316\u5217\u8868\u65f6\uff0c\u7cfb\u7edf\u4f1a\u7ed9\u5217\u8868\u5206\u914d\u201c\u521d\u59cb\u5bb9\u91cf\u201d\uff0c\u8be5\u5bb9\u91cf\u53ef\u80fd\u8d85\u8fc7\u6211\u4eec\u7684\u9700\u6c42\u3002\u5e76\u4e14\u6269\u5bb9\u673a\u5236\u4e00\u822c\u662f\u6309\u7167\u7279\u5b9a\u500d\u7387\uff08\u6bd4\u5982 2 \u500d\uff09\u8fdb\u884c\u6269\u5bb9\uff0c\u6269\u5bb9\u540e\u7684\u5bb9\u91cf\u4e5f\u53ef\u80fd\u8d85\u51fa\u6211\u4eec\u7684\u9700\u6c42\u3002\u56e0\u6b64\uff0c\u6570\u7ec4\u5b9e\u73b0\u6808\u4f1a\u9020\u6210\u4e00\u5b9a\u7684\u7a7a\u95f4\u6d6a\u8d39\u3002

    \u5f53\u7136\uff0c\u7531\u4e8e\u7ed3\u70b9\u9700\u8981\u989d\u5916\u5b58\u50a8\u6307\u9488\uff0c\u56e0\u6b64 \u94fe\u8868\u7ed3\u70b9\u6bd4\u6570\u7ec4\u5143\u7d20\u5360\u7528\u66f4\u5927\u3002

    \u7efc\u4e0a\uff0c\u6211\u4eec\u4e0d\u80fd\u7b80\u5355\u5730\u786e\u5b9a\u54ea\u79cd\u5b9e\u73b0\u66f4\u52a0\u7701\u5185\u5b58\uff0c\u9700\u8981 case-by-case \u5730\u5206\u6790\u3002

    "},{"location":"chapter_stack_and_queue/stack/#514","title":"5.1.4. \u00a0 \u6808\u5178\u578b\u5e94\u7528","text":"
    • \u6d4f\u89c8\u5668\u4e2d\u7684\u540e\u9000\u4e0e\u524d\u8fdb\u3001\u8f6f\u4ef6\u4e2d\u7684\u64a4\u9500\u4e0e\u53cd\u64a4\u9500\u3002\u6bcf\u5f53\u6211\u4eec\u6253\u5f00\u65b0\u7684\u7f51\u9875\uff0c\u6d4f\u89c8\u5668\u5c31\u5c06\u4e0a\u4e00\u4e2a\u7f51\u9875\u6267\u884c\u5165\u6808\uff0c\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u901a\u8fc7\u300c\u540e\u9000\u300d\u64cd\u4f5c\u6765\u56de\u5230\u4e0a\u4e00\u9875\u9762\uff0c\u540e\u9000\u64cd\u4f5c\u5b9e\u9645\u4e0a\u662f\u5728\u6267\u884c\u51fa\u6808\u3002\u5982\u679c\u8981\u540c\u65f6\u652f\u6301\u540e\u9000\u548c\u524d\u8fdb\uff0c\u90a3\u4e48\u5219\u9700\u8981\u4e24\u4e2a\u6808\u6765\u914d\u5408\u5b9e\u73b0\u3002
    • \u7a0b\u5e8f\u5185\u5b58\u7ba1\u7406\u3002\u6bcf\u5f53\u8c03\u7528\u51fd\u6570\u65f6\uff0c\u7cfb\u7edf\u5c31\u4f1a\u5728\u6808\u9876\u6dfb\u52a0\u4e00\u4e2a\u6808\u5e27\uff0c\u7528\u6765\u8bb0\u5f55\u51fd\u6570\u7684\u4e0a\u4e0b\u6587\u4fe1\u606f\u3002\u5728\u9012\u5f52\u51fd\u6570\u4e2d\uff0c\u5411\u4e0b\u9012\u63a8\u4f1a\u4e0d\u65ad\u6267\u884c\u5165\u6808\uff0c\u5411\u4e0a\u56de\u6eaf\u9636\u6bb5\u65f6\u51fa\u6808\u3002
    "},{"location":"chapter_stack_and_queue/summary/","title":"5.4. \u00a0 \u5c0f\u7ed3","text":"
    • \u6808\u662f\u4e00\u79cd\u9075\u5faa\u5148\u5165\u540e\u51fa\u7684\u6570\u636e\u7ed3\u6784\uff0c\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u94fe\u8868\u5b9e\u73b0\u3002
    • \u5728\u65f6\u95f4\u6548\u7387\u65b9\u9762\uff0c\u6808\u7684\u6570\u7ec4\u5b9e\u73b0\u5177\u6709\u66f4\u597d\u7684\u5e73\u5747\u6548\u7387\uff0c\u4f46\u6269\u5bb9\u65f6\u4f1a\u5bfc\u81f4\u5355\u6b21\u5165\u6808\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n)\\) \u3002\u76f8\u5bf9\u5730\uff0c\u6808\u7684\u94fe\u8868\u5b9e\u73b0\u5177\u6709\u66f4\u52a0\u7a33\u5b9a\u7684\u6548\u7387\u8868\u73b0\u3002
    • \u5728\u7a7a\u95f4\u6548\u7387\u65b9\u9762\uff0c\u6808\u7684\u6570\u7ec4\u5b9e\u73b0\u4f1a\u9020\u6210\u4e00\u5b9a\u7a7a\u95f4\u6d6a\u8d39\uff0c\u7136\u800c\u94fe\u8868\u7ed3\u70b9\u6bd4\u6570\u7ec4\u5143\u7d20\u5360\u7528\u5185\u5b58\u66f4\u5927\u3002
    • \u961f\u5217\u662f\u4e00\u79cd\u9075\u5faa\u5148\u5165\u5148\u51fa\u7684\u6570\u636e\u7ed3\u6784\uff0c\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u6216\u94fe\u8868\u5b9e\u73b0\u3002\u5bf9\u4e8e\u4e24\u79cd\u5b9e\u73b0\u7684\u65f6\u95f4\u6548\u7387\u4e0e\u7a7a\u95f4\u6548\u7387\u5bf9\u6bd4\uff0c\u4e0e\u4e0a\u8ff0\u6808\u7684\u7ed3\u8bba\u76f8\u540c\u3002
    • \u53cc\u5411\u961f\u5217\u7684\u4e24\u7aef\u90fd\u53ef\u4ee5\u6dfb\u52a0\u4e0e\u5220\u9664\u5143\u7d20\u3002
    "},{"location":"chapter_tree/avl_tree/","title":"7.4. \u00a0 AVL \u6811 *","text":"

    \u5728\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u7ae0\u8282\u4e2d\u63d0\u5230\uff0c\u5728\u8fdb\u884c\u591a\u6b21\u63d2\u5165\u4e0e\u5220\u9664\u64cd\u4f5c\u540e\uff0c\u4e8c\u53c9\u641c\u7d22\u6811\u53ef\u80fd\u4f1a\u9000\u5316\u4e3a\u94fe\u8868\u3002\u6b64\u65f6\u6240\u6709\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u4f1a\u7531 \\(O(\\log n)\\) \u52a3\u5316\u81f3 \\(O(n)\\) \u3002

    \u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6267\u884c\u4e24\u6b65\u5220\u9664\u7ed3\u70b9\u540e\uff0c\u8be5\u4e8c\u53c9\u641c\u7d22\u6811\u5c31\u4f1a\u9000\u5316\u4e3a\u94fe\u8868\u3002

    Fig. AVL \u6811\u5728\u5220\u9664\u7ed3\u70b9\u540e\u53d1\u751f\u9000\u5316

    \u518d\u6bd4\u5982\uff0c\u5728\u4ee5\u4e0b\u5b8c\u7f8e\u4e8c\u53c9\u6811\u4e2d\u63d2\u5165\u4e24\u4e2a\u7ed3\u70b9\u540e\uff0c\u6811\u4e25\u91cd\u5411\u5de6\u504f\u659c\uff0c\u67e5\u627e\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u968f\u4e4b\u53d1\u751f\u52a3\u5316\u3002

    Fig. AVL \u6811\u5728\u63d2\u5165\u7ed3\u70b9\u540e\u53d1\u751f\u9000\u5316

    G. M. Adelson-Velsky \u548c E. M. Landis \u5728\u5176 1962 \u5e74\u53d1\u8868\u7684\u8bba\u6587 \"An algorithm for the organization of information\" \u4e2d\u63d0\u51fa\u4e86\u300cAVL \u6811\u300d\u3002\u8bba\u6587\u4e2d\u63cf\u8ff0\u4e86\u4e00\u7cfb\u5217\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5728\u4e0d\u65ad\u6dfb\u52a0\u4e0e\u5220\u9664\u7ed3\u70b9\u540e\uff0cAVL \u6811\u4ecd\u7136\u4e0d\u4f1a\u53d1\u751f\u9000\u5316\uff0c\u8fdb\u800c\u4f7f\u5f97\u5404\u79cd\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5747\u80fd\u4fdd\u6301\u5728 \\(O(\\log n)\\) \u7ea7\u522b\u3002

    \u6362\u8a00\u4e4b\uff0c\u5728\u9891\u7e41\u589e\u5220\u67e5\u6539\u7684\u4f7f\u7528\u573a\u666f\u4e2d\uff0cAVL \u6811\u53ef\u59cb\u7ec8\u4fdd\u6301\u5f88\u9ad8\u7684\u6570\u636e\u589e\u5220\u67e5\u6539\u6548\u7387\uff0c\u5177\u6709\u5f88\u597d\u7684\u5e94\u7528\u4ef7\u503c\u3002

    "},{"location":"chapter_tree/avl_tree/#741-avl","title":"7.4.1. \u00a0 AVL \u6811\u5e38\u89c1\u672f\u8bed","text":"

    \u300cAVL \u6811\u300d\u65e2\u662f\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u53c8\u662f\u300c\u5e73\u8861\u4e8c\u53c9\u6811\u300d\uff0c\u540c\u65f6\u6ee1\u8db3\u8fd9\u4e24\u79cd\u4e8c\u53c9\u6811\u7684\u6240\u6709\u6027\u8d28\uff0c\u56e0\u6b64\u53c8\u88ab\u79f0\u4e3a\u300c\u5e73\u8861\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u3002

    "},{"location":"chapter_tree/avl_tree/#_1","title":"\u7ed3\u70b9\u9ad8\u5ea6","text":"

    \u5728 AVL \u6811\u7684\u64cd\u4f5c\u4e2d\uff0c\u9700\u8981\u83b7\u53d6\u7ed3\u70b9\u300c\u9ad8\u5ea6 Height\u300d\uff0c\u6240\u4ee5\u7ed9 AVL \u6811\u7684\u7ed3\u70b9\u7c7b\u6dfb\u52a0 height \u53d8\u91cf\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\npublic int val;        // \u7ed3\u70b9\u503c\npublic int height;     // \u7ed3\u70b9\u9ad8\u5ea6\npublic TreeNode left;  // \u5de6\u5b50\u7ed3\u70b9\npublic TreeNode right; // \u53f3\u5b50\u7ed3\u70b9\npublic TreeNode(int x) { val = x; }\n}\n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nstruct TreeNode {\nint val{};          // \u7ed3\u70b9\u503c\nint height = 0;     // \u7ed3\u70b9\u9ad8\u5ea6\nTreeNode *left{};   // \u5de6\u5b50\u7ed3\u70b9\nTreeNode *right{};  // \u53f3\u5b50\u7ed3\u70b9\nTreeNode() = default;\nexplicit TreeNode(int x) : val(x){}\n};\n
    \"\"\" AVL \u6811\u7ed3\u70b9\u7c7b \"\"\"\nclass TreeNode:\ndef __init__(self, val: int):\nself.val: int = val                    # \u7ed3\u70b9\u503c\nself.height: int = 0                   # \u7ed3\u70b9\u9ad8\u5ea6\nself.left: Optional[TreeNode] = None   # \u5de6\u5b50\u7ed3\u70b9\u5f15\u7528\nself.right: Optional[TreeNode] = None  # \u53f3\u5b50\u7ed3\u70b9\u5f15\u7528\n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\ntype TreeNode struct {\nVal    int       // \u7ed3\u70b9\u503c\nHeight int       // \u7ed3\u70b9\u9ad8\u5ea6\nLeft   *TreeNode // \u5de6\u5b50\u7ed3\u70b9\u5f15\u7528\nRight  *TreeNode // \u53f3\u5b50\u7ed3\u70b9\u5f15\u7528\n}\n
    class TreeNode {\nval; // \u7ed3\u70b9\u503c\nheight; //\u7ed3\u70b9\u9ad8\u5ea6\nleft; // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nright; // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nconstructor(val, left, right, height) {\nthis.val = val === undefined ? 0 : val;\nthis.height = height === undefined ? 0 : height;\nthis.left = left === undefined ? null : left;\nthis.right = right === undefined ? null : right;\n}\n}\n
    class TreeNode {\nval: number;            // \u7ed3\u70b9\u503c\nheight: number;         // \u7ed3\u70b9\u9ad8\u5ea6\nleft: TreeNode | null;  // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nright: TreeNode | null; // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nconstructor(val?: number, height?: number, left?: TreeNode | null, right?: TreeNode | null) {\nthis.val = val === undefined ? 0 : val;\nthis.height = height === undefined ? 0 : height; this.left = left === undefined ? null : left; this.right = right === undefined ? null : right; }\n}\n
    \n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\npublic int val;          // \u7ed3\u70b9\u503c\npublic int height;       // \u7ed3\u70b9\u9ad8\u5ea6\npublic TreeNode? left;   // \u5de6\u5b50\u7ed3\u70b9\npublic TreeNode? right;  // \u53f3\u5b50\u7ed3\u70b9\npublic TreeNode(int x) { val = x; }\n}\n
    /* AVL \u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar height: Int // \u7ed3\u70b9\u9ad8\u5ea6\nvar left: TreeNode? // \u5de6\u5b50\u7ed3\u70b9\nvar right: TreeNode? // \u53f3\u5b50\u7ed3\u70b9\ninit(x: Int) {\nval = x\nheight = 0\n}\n}\n
    \n

    \u300c\u7ed3\u70b9\u9ad8\u5ea6\u300d\u662f\u6700\u8fdc\u53f6\u7ed3\u70b9\u5230\u8be5\u7ed3\u70b9\u7684\u8ddd\u79bb\uff0c\u5373\u8d70\u8fc7\u7684\u300c\u8fb9\u300d\u7684\u6570\u91cf\u3002\u9700\u8981\u7279\u522b\u6ce8\u610f\uff0c\u53f6\u7ed3\u70b9\u7684\u9ad8\u5ea6\u4e3a 0 \uff0c\u7a7a\u7ed3\u70b9\u7684\u9ad8\u5ea6\u4e3a -1\u3002\u6211\u4eec\u5c01\u88c5\u4e24\u4e2a\u5de5\u5177\u51fd\u6570\uff0c\u5206\u522b\u7528\u4e8e\u83b7\u53d6\u4e0e\u66f4\u65b0\u7ed3\u70b9\u7684\u9ad8\u5ea6\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nint height(TreeNode node) {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node == null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nvoid updateHeight(TreeNode node) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.max(height(node.left), height(node.right)) + 1;\n}\n
    avl_tree.cpp
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nint height(TreeNode* node) {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node == nullptr ? -1 : node->height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nvoid updateHeight(TreeNode* node) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode->height = max(height(node->left), height(node->right)) + 1;\n}\n
    avl_tree.py
    def height(self, node: Optional[TreeNode]) -> int:\n\"\"\" \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 \"\"\"\n# \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nif node is not None:\nreturn node.height\nreturn -1\ndef __update_height(self, node: Optional[TreeNode]):\n\"\"\" \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 \"\"\"\n# \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = max([self.height(node.left), self.height(node.right)]) + 1\n
    avl_tree.go
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc (t *aVLTree) height(node *TreeNode) int {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nif node != nil {\nreturn node.Height\n}\nreturn -1\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc (t *aVLTree) updateHeight(node *TreeNode) {\nlh := t.height(node.Left)\nrh := t.height(node.Right)\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nif lh > rh {\nnode.Height = lh + 1\n} else {\nnode.Height = rh + 1\n}\n}\n
    avl_tree.js
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nheight(node) {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node === null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\n#updateHeight(node) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.max(this.height(node.left), this.height(node.right)) + 1;\n}\n
    avl_tree.ts
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nheight(node: TreeNode): number {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node === null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nupdateHeight(node: TreeNode): void {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.max(this.height(node.left), this.height(node.right)) + 1;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{height}\n[class]{aVLTree}-[func]{updateHeight}\n
    avl_tree.cs
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nint height(TreeNode? node)\n{\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn node == null ? -1 : node.height;\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nvoid updateHeight(TreeNode node)\n{\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.height = Math.Max(height(node.left), height(node.right)) + 1;\n}\n
    avl_tree.swift
    /* \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc height(node: TreeNode?) -> Int {\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nnode == nil ? -1 : node!.height\n}\n/* \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6 */\nfunc updateHeight(node: TreeNode?) {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode?.height = max(height(node: node?.left), height(node: node?.right)) + 1\n}\n
    avl_tree.zig
    // \u83b7\u53d6\u7ed3\u70b9\u9ad8\u5ea6\nfn height(self: *Self, node: ?*inc.TreeNode(T)) i32 {\n_ = self;\n// \u7a7a\u7ed3\u70b9\u9ad8\u5ea6\u4e3a -1 \uff0c\u53f6\u7ed3\u70b9\u9ad8\u5ea6\u4e3a 0\nreturn if (node == null) -1 else node.?.height;\n}\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nfn updateHeight(self: *Self, node: ?*inc.TreeNode(T)) void {\n// \u7ed3\u70b9\u9ad8\u5ea6\u7b49\u4e8e\u6700\u9ad8\u5b50\u6811\u9ad8\u5ea6 + 1\nnode.?.height = std.math.max(self.height(node.?.left), self.height(node.?.right)) + 1;\n}\n
    "},{"location":"chapter_tree/avl_tree/#_2","title":"\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50","text":"

    \u7ed3\u70b9\u7684\u300c\u5e73\u8861\u56e0\u5b50 Balance Factor\u300d\u662f \u7ed3\u70b9\u7684\u5de6\u5b50\u6811\u9ad8\u5ea6\u51cf\u53bb\u53f3\u5b50\u6811\u9ad8\u5ea6\uff0c\u5e76\u5b9a\u4e49\u7a7a\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u4e3a 0 \u3002\u540c\u6837\u5730\uff0c\u6211\u4eec\u5c06\u83b7\u53d6\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u5c01\u88c5\u6210\u51fd\u6570\uff0c\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nint balanceFactor(TreeNode node) {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node.left) - height(node.right);\n}\n
    avl_tree.cpp
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nint balanceFactor(TreeNode* node) {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == nullptr) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node->left) - height(node->right);\n}\n
    avl_tree.py
    def balance_factor(self, node: Optional[TreeNode]) -> int:\n\"\"\" \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 \"\"\"\n# \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif node is None:\nreturn 0\n# \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn self.height(node.left) - self.height(node.right)\n
    avl_tree.go
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nfunc (t *aVLTree) balanceFactor(node *TreeNode) int {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif node == nil {\nreturn 0\n}\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn t.height(node.Left) - t.height(node.Right)\n}\n
    avl_tree.js
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nbalanceFactor(node) {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node === null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn this.height(node.left) - this.height(node.right);\n}\n
    avl_tree.ts
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nbalanceFactor(node: TreeNode): number {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node === null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn this.height(node.left) - this.height(node.right);\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{balanceFactor}\n
    avl_tree.cs
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nint balanceFactor(TreeNode? node)\n{\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node.left) - height(node.right);\n}\n
    avl_tree.swift
    /* \u83b7\u53d6\u5e73\u8861\u56e0\u5b50 */\nfunc balanceFactor(node: TreeNode?) -> Int {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nguard let node = node else { return 0 }\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn height(node: node.left) - height(node: node.right)\n}\n
    avl_tree.zig
    // \u83b7\u53d6\u5e73\u8861\u56e0\u5b50\nfn balanceFactor(self: *Self, node: ?*inc.TreeNode(T)) i32 {\n// \u7a7a\u7ed3\u70b9\u5e73\u8861\u56e0\u5b50\u4e3a 0\nif (node == null) return 0;\n// \u7ed3\u70b9\u5e73\u8861\u56e0\u5b50 = \u5de6\u5b50\u6811\u9ad8\u5ea6 - \u53f3\u5b50\u6811\u9ad8\u5ea6\nreturn self.height(node.?.left) - self.height(node.?.right);\n}\n

    Note

    \u8bbe\u5e73\u8861\u56e0\u5b50\u4e3a \\(f\\) \uff0c\u5219\u4e00\u68f5 AVL \u6811\u7684\u4efb\u610f\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u7686\u6ee1\u8db3 \\(-1 \\le f \\le 1\\) \u3002

    "},{"location":"chapter_tree/avl_tree/#742-avl","title":"7.4.2. \u00a0 AVL \u6811\u65cb\u8f6c","text":"

    AVL \u6811\u7684\u72ec\u7279\u4e4b\u5904\u5728\u4e8e\u300c\u65cb\u8f6c Rotation\u300d\u7684\u64cd\u4f5c\uff0c\u5176\u53ef \u5728\u4e0d\u5f71\u54cd\u4e8c\u53c9\u6811\u4e2d\u5e8f\u904d\u5386\u5e8f\u5217\u7684\u524d\u63d0\u4e0b\uff0c\u4f7f\u5931\u8861\u7ed3\u70b9\u91cd\u65b0\u6062\u590d\u5e73\u8861\u3002\u6362\u8a00\u4e4b\uff0c\u65cb\u8f6c\u64cd\u4f5c\u65e2\u53ef\u4ee5\u4f7f\u6811\u4fdd\u6301\u4e3a\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u6811\u91cd\u65b0\u6062\u590d\u4e3a\u300c\u5e73\u8861\u4e8c\u53c9\u6811\u300d\u3002

    \u6211\u4eec\u5c06\u5e73\u8861\u56e0\u5b50\u7684\u7edd\u5bf9\u503c \\(> 1\\) \u7684\u7ed3\u70b9\u79f0\u4e3a\u300c\u5931\u8861\u7ed3\u70b9\u300d\u3002\u6839\u636e\u7ed3\u70b9\u7684\u5931\u8861\u60c5\u51b5\uff0c\u65cb\u8f6c\u64cd\u4f5c\u5206\u4e3a \u53f3\u65cb\u3001\u5de6\u65cb\u3001\u5148\u53f3\u65cb\u540e\u5de6\u65cb\u3001\u5148\u5de6\u65cb\u540e\u53f3\u65cb\uff0c\u63a5\u4e0b\u6765\u6211\u4eec\u6765\u4e00\u8d77\u6765\u770b\u770b\u5b83\u4eec\u662f\u5982\u4f55\u64cd\u4f5c\u7684\u3002

    "},{"location":"chapter_tree/avl_tree/#case-1-","title":"Case 1 - \u53f3\u65cb","text":"

    \u5982\u4e0b\u56fe\u6240\u793a\uff08\u7ed3\u70b9\u4e0b\u65b9\u4e3a\u300c\u5e73\u8861\u56e0\u5b50\u300d\uff09\uff0c\u4ece\u5e95\u81f3\u9876\u770b\uff0c\u4e8c\u53c9\u6811\u4e2d\u9996\u4e2a\u5931\u8861\u7ed3\u70b9\u662f \u7ed3\u70b9 3\u3002\u6211\u4eec\u805a\u7126\u5728\u4ee5\u8be5\u5931\u8861\u7ed3\u70b9\u4e3a\u6839\u7ed3\u70b9\u7684\u5b50\u6811\u4e0a\uff0c\u5c06\u8be5\u7ed3\u70b9\u8bb0\u4e3a node \uff0c\u5c06\u5176\u5de6\u5b50\u7ed3\u70b9\u8bb0\u4e3a child \uff0c\u6267\u884c\u300c\u53f3\u65cb\u300d\u64cd\u4f5c\u3002\u5b8c\u6210\u53f3\u65cb\u540e\uff0c\u8be5\u5b50\u6811\u5df2\u7ecf\u6062\u590d\u5e73\u8861\uff0c\u5e76\u4e14\u4ecd\u7136\u4e3a\u4e8c\u53c9\u641c\u7d22\u6811\u3002

    <1><2><3><4>

    \u8fdb\u800c\uff0c\u5982\u679c\u7ed3\u70b9 child \u672c\u8eab\u6709\u53f3\u5b50\u7ed3\u70b9\uff08\u8bb0\u4e3a grandChild \uff09\uff0c\u5219\u9700\u8981\u5728\u300c\u53f3\u65cb\u300d\u4e2d\u6dfb\u52a0\u4e00\u6b65\uff1a\u5c06 grandChild \u4f5c\u4e3a node \u7684\u5de6\u5b50\u7ed3\u70b9\u3002

    Fig. \u6709 grandChild \u7684\u53f3\u65cb\u64cd\u4f5c

    \u201c\u5411\u53f3\u65cb\u8f6c\u201d\u662f\u4e00\u79cd\u5f62\u8c61\u5316\u7684\u8bf4\u6cd5\uff0c\u5b9e\u9645\u9700\u8981\u901a\u8fc7\u4fee\u6539\u7ed3\u70b9\u6307\u9488\u5b9e\u73b0\uff0c\u4ee3\u7801\u5982\u4e0b\u6240\u793a\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u53f3\u65cb\u64cd\u4f5c */\nTreeNode rightRotate(TreeNode node) {\nTreeNode child = node.left;\nTreeNode grandChild = child.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.cpp
    /* \u53f3\u65cb\u64cd\u4f5c */\nTreeNode* rightRotate(TreeNode* node) {\nTreeNode* child = node->left;\nTreeNode* grandChild = child->right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild->right = node;\nnode->left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.py
    def __right_rotate(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u53f3\u65cb\u64cd\u4f5c \"\"\"\nchild = node.left\ngrand_child = child.right\n# \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node\nnode.left = grand_child\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\nself.__update_height(child)\n# \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n
    avl_tree.go
    /* \u53f3\u65cb\u64cd\u4f5c */\nfunc (t *aVLTree) rightRotate(node *TreeNode) *TreeNode {\nchild := node.Left\ngrandChild := child.Right\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.Right = node\nnode.Left = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\nt.updateHeight(child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.js
    /* \u53f3\u65cb\u64cd\u4f5c */\n#rightRotate(node) {\nconst child = node.left;\nconst grandChild = child.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.#updateHeight(node);\nthis.#updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.ts
    /* \u53f3\u65cb\u64cd\u4f5c */\nrightRotate(node: TreeNode): TreeNode {\nconst child = node.left;\nconst grandChild = child.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.updateHeight(node);\nthis.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{rightRotate}\n
    avl_tree.cs
    /* \u53f3\u65cb\u64cd\u4f5c */\nTreeNode? rightRotate(TreeNode? node)\n{\nTreeNode? child = node.left;\nTreeNode? grandChild = child?.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.right = node;\nnode.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.swift
    /* \u53f3\u65cb\u64cd\u4f5c */\nfunc rightRotate(node: TreeNode?) -> TreeNode? {\nlet child = node?.left\nlet grandChild = child?.right\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild?.right = node\nnode?.left = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node: node)\nupdateHeight(node: child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.zig
    // \u53f3\u65cb\u64cd\u4f5c\nfn rightRotate(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\nvar child = node.?.left;\nvar grandChild = child.?.right;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u53f3\u65cb\u8f6c\nchild.?.right = node;\nnode.?.left = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.updateHeight(node);\nself.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    "},{"location":"chapter_tree/avl_tree/#case-2-","title":"Case 2 - \u5de6\u65cb","text":"

    \u7c7b\u4f3c\u5730\uff0c\u5982\u679c\u5c06\u53d6\u4e0a\u8ff0\u5931\u8861\u4e8c\u53c9\u6811\u7684\u201c\u955c\u50cf\u201d\uff0c\u90a3\u4e48\u5219\u9700\u8981\u300c\u5de6\u65cb\u300d\u64cd\u4f5c\u3002

    Fig. \u5de6\u65cb\u64cd\u4f5c

    \u540c\u7406\uff0c\u82e5\u7ed3\u70b9 child \u672c\u8eab\u6709\u5de6\u5b50\u7ed3\u70b9\uff08\u8bb0\u4e3a grandChild \uff09\uff0c\u5219\u9700\u8981\u5728\u300c\u5de6\u65cb\u300d\u4e2d\u6dfb\u52a0\u4e00\u6b65\uff1a\u5c06 grandChild \u4f5c\u4e3a node \u7684\u53f3\u5b50\u7ed3\u70b9\u3002

    Fig. \u6709 grandChild \u7684\u5de6\u65cb\u64cd\u4f5c

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u300c\u5de6\u65cb\u300d\u548c\u300c\u53f3\u65cb\u300d\u64cd\u4f5c\u662f\u955c\u50cf\u5bf9\u79f0\u7684\uff0c\u4e24\u8005\u5bf9\u5e94\u89e3\u51b3\u7684\u4e24\u79cd\u5931\u8861\u60c5\u51b5\u4e5f\u662f\u5bf9\u79f0\u7684\u3002\u6839\u636e\u5bf9\u79f0\u6027\uff0c\u6211\u4eec\u53ef\u4ee5\u5f88\u65b9\u4fbf\u5730\u4ece\u300c\u53f3\u65cb\u300d\u63a8\u5bfc\u51fa\u300c\u5de6\u65cb\u300d\u3002\u5177\u4f53\u5730\uff0c\u53ea\u9700\u5c06\u300c\u53f3\u65cb\u300d\u4ee3\u7801\u4e2d\u7684\u628a\u6240\u6709\u7684 left \u66ff\u6362\u4e3a right \u3001\u6240\u6709\u7684 right \u66ff\u6362\u4e3a left \uff0c\u5373\u53ef\u5f97\u5230\u300c\u5de6\u65cb\u300d\u4ee3\u7801\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u5de6\u65cb\u64cd\u4f5c */\nTreeNode leftRotate(TreeNode node) {\nTreeNode child = node.right;\nTreeNode grandChild = child.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.cpp
    /* \u5de6\u65cb\u64cd\u4f5c */\nTreeNode* leftRotate(TreeNode* node) {\nTreeNode* child = node->right;\nTreeNode* grandChild = child->left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild->left = node;\nnode->right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.py
    def __left_rotate(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u5de6\u65cb\u64cd\u4f5c \"\"\"\nchild = node.right\ngrand_child = child.left\n# \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node\nnode.right = grand_child\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\nself.__update_height(child)\n# \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n
    avl_tree.go
    /* \u5de6\u65cb\u64cd\u4f5c */\nfunc (t *aVLTree) leftRotate(node *TreeNode) *TreeNode {\nchild := node.Right\ngrandChild := child.Left\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.Left = node\nnode.Right = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\nt.updateHeight(child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.js
    /* \u5de6\u65cb\u64cd\u4f5c */\n#leftRotate(node) {\nconst child = node.right;\nconst grandChild = child.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.#updateHeight(node);\nthis.#updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.ts
    /* \u5de6\u65cb\u64cd\u4f5c */\nleftRotate(node: TreeNode): TreeNode {\nconst child = node.right;\nconst grandChild = child.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nthis.updateHeight(node);\nthis.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{leftRotate}\n
    avl_tree.cs
    /* \u5de6\u65cb\u64cd\u4f5c */\nTreeNode? leftRotate(TreeNode? node)\n{\nTreeNode? child = node.right;\nTreeNode? grandChild = child?.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.left = node;\nnode.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node);\nupdateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    avl_tree.swift
    /* \u5de6\u65cb\u64cd\u4f5c */\nfunc leftRotate(node: TreeNode?) -> TreeNode? {\nlet child = node?.right\nlet grandChild = child?.left\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild?.left = node\nnode?.right = grandChild\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nupdateHeight(node: node)\nupdateHeight(node: child)\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child\n}\n
    avl_tree.zig
    // \u5de6\u65cb\u64cd\u4f5c\nfn leftRotate(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\nvar child = node.?.right;\nvar grandChild = child.?.left;\n// \u4ee5 child \u4e3a\u539f\u70b9\uff0c\u5c06 node \u5411\u5de6\u65cb\u8f6c\nchild.?.left = node;\nnode.?.right = grandChild;\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.updateHeight(node);\nself.updateHeight(child);\n// \u8fd4\u56de\u65cb\u8f6c\u540e\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn child;\n}\n
    "},{"location":"chapter_tree/avl_tree/#case-3-","title":"Case 3 - \u5148\u5de6\u540e\u53f3","text":"

    \u5bf9\u4e8e\u4e0b\u56fe\u7684\u5931\u8861\u7ed3\u70b9 3 \uff0c\u5355\u4e00\u4f7f\u7528\u5de6\u65cb\u6216\u53f3\u65cb\u90fd\u65e0\u6cd5\u4f7f\u5b50\u6811\u6062\u590d\u5e73\u8861\uff0c\u6b64\u65f6\u9700\u8981\u300c\u5148\u5de6\u65cb\u540e\u53f3\u65cb\u300d\uff0c\u5373\u5148\u5bf9 child \u6267\u884c\u300c\u5de6\u65cb\u300d\uff0c\u518d\u5bf9 node \u6267\u884c\u300c\u53f3\u65cb\u300d\u3002

    Fig. \u5148\u5de6\u65cb\u540e\u53f3\u65cb

    "},{"location":"chapter_tree/avl_tree/#case-4-","title":"Case 4 - \u5148\u53f3\u540e\u5de6","text":"

    \u540c\u7406\uff0c\u53d6\u4ee5\u4e0a\u5931\u8861\u4e8c\u53c9\u6811\u7684\u955c\u50cf\uff0c\u5219\u9700\u8981\u300c\u5148\u53f3\u65cb\u540e\u5de6\u65cb\u300d\uff0c\u5373\u5148\u5bf9 child \u6267\u884c\u300c\u53f3\u65cb\u300d\uff0c\u7136\u540e\u5bf9 node \u6267\u884c\u300c\u5de6\u65cb\u300d\u3002

    Fig. \u5148\u53f3\u65cb\u540e\u5de6\u65cb

    "},{"location":"chapter_tree/avl_tree/#_3","title":"\u65cb\u8f6c\u7684\u9009\u62e9","text":"

    \u4e0b\u56fe\u63cf\u8ff0\u7684\u56db\u79cd\u5931\u8861\u60c5\u51b5\u4e0e\u4e0a\u8ff0 Cases \u9010\u4e2a\u5bf9\u5e94\uff0c\u5206\u522b\u9700\u91c7\u7528 \u53f3\u65cb\u3001\u5de6\u65cb\u3001\u5148\u53f3\u540e\u5de6\u3001\u5148\u5de6\u540e\u53f3 \u7684\u65cb\u8f6c\u64cd\u4f5c\u3002

    Fig. AVL \u6811\u7684\u56db\u79cd\u65cb\u8f6c\u60c5\u51b5

    \u5177\u4f53\u5730\uff0c\u5728\u4ee3\u7801\u4e2d\u4f7f\u7528 \u5931\u8861\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50\u3001\u8f83\u9ad8\u4e00\u4fa7\u5b50\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50 \u6765\u786e\u5b9a\u5931\u8861\u7ed3\u70b9\u5c5e\u4e8e\u4e0a\u56fe\u4e2d\u7684\u54ea\u79cd\u60c5\u51b5\u3002

    \u5931\u8861\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50 \u5b50\u7ed3\u70b9\u7684\u5e73\u8861\u56e0\u5b50 \u5e94\u91c7\u7528\u7684\u65cb\u8f6c\u65b9\u6cd5 \\(>0\\) \uff08\u5373\u5de6\u504f\u6811\uff09 \\(\\geq 0\\) \u53f3\u65cb \\(>0\\) \uff08\u5373\u5de6\u504f\u6811\uff09 \\(<0\\) \u5148\u5de6\u65cb\u540e\u53f3\u65cb \\(<0\\) \uff08\u5373\u53f3\u504f\u6811\uff09 \\(\\leq 0\\) \u5de6\u65cb \\(<0\\) \uff08\u5373\u53f3\u504f\u6811\uff09 \\(>0\\) \u5148\u53f3\u65cb\u540e\u5de6\u65cb

    \u4e3a\u65b9\u4fbf\u4f7f\u7528\uff0c\u6211\u4eec\u5c06\u65cb\u8f6c\u64cd\u4f5c\u5c01\u88c5\u6210\u4e00\u4e2a\u51fd\u6570\u3002\u81f3\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528\u6b64\u51fd\u6570\u6765\u65cb\u8f6c\u5404\u79cd\u5931\u8861\u60c5\u51b5\uff0c\u4f7f\u5931\u8861\u7ed3\u70b9\u91cd\u65b0\u6062\u590d\u5e73\u8861\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nTreeNode rotate(TreeNode node) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nint balanceFactor = balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactor > 1) {\nif (balanceFactor(node.left) >= 0) {\n// \u53f3\u65cb\nreturn rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = leftRotate(node.left);\nreturn rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactor < -1) {\nif (balanceFactor(node.right) <= 0) {\n// \u5de6\u65cb\nreturn leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = rightRotate(node.right);\nreturn leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.cpp
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nTreeNode* rotate(TreeNode* node) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nint _balanceFactor = balanceFactor(node);\n// \u5de6\u504f\u6811\nif (_balanceFactor > 1) {\nif (balanceFactor(node->left) >= 0) {\n// \u53f3\u65cb\nreturn rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode->left = leftRotate(node->left);\nreturn rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (_balanceFactor < -1) {\nif (balanceFactor(node->right) <= 0) {\n// \u5de6\u65cb\nreturn leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode->right = rightRotate(node->right);\nreturn leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.py
    def __rotate(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 \"\"\"\n# \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nbalance_factor = self.balance_factor(node)\n# \u5de6\u504f\u6811\nif balance_factor > 1:\nif self.balance_factor(node.left) >= 0:\n# \u53f3\u65cb\nreturn self.__right_rotate(node)\nelse:\n# \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = self.__left_rotate(node.left)\nreturn self.__right_rotate(node)\n# \u53f3\u504f\u6811\nelif balance_factor < -1:\nif self.balance_factor(node.right) <= 0:\n# \u5de6\u65cb\nreturn self.__left_rotate(node)\nelse:\n# \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = self.__right_rotate(node.right)\nreturn self.__left_rotate(node)\n# \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n
    avl_tree.go
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nfunc (t *aVLTree) rotate(node *TreeNode) *TreeNode {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\n// Go \u63a8\u8350\u77ed\u53d8\u91cf\uff0c\u8fd9\u91cc bf \u6307\u4ee3 t.balanceFactor\nbf := t.balanceFactor(node)\n// \u5de6\u504f\u6811\nif bf > 1 {\nif t.balanceFactor(node.Left) >= 0 {\n// \u53f3\u65cb\nreturn t.rightRotate(node)\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.Left = t.leftRotate(node.Left)\nreturn t.rightRotate(node)\n}\n}\n// \u53f3\u504f\u6811\nif bf < -1 {\nif t.balanceFactor(node.Right) <= 0 {\n// \u5de6\u65cb\nreturn t.leftRotate(node)\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.Right = t.rightRotate(node.Right)\nreturn t.leftRotate(node)\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n}\n
    avl_tree.js
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\n#rotate(node) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nconst balanceFactor = this.balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactor > 1) {\nif (this.balanceFactor(node.left) >= 0) {\n// \u53f3\u65cb\nreturn this.#rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = this.#leftRotate(node.left);\nreturn this.#rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactor < -1) {\nif (this.balanceFactor(node.right) <= 0) {\n// \u5de6\u65cb\nreturn this.#leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = this.#rightRotate(node.right);\nreturn this.#leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.ts
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nrotate(node: TreeNode): TreeNode {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nconst balanceFactor = this.balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactor > 1) {\nif (this.balanceFactor(node.left) >= 0) {\n// \u53f3\u65cb\nreturn this.rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = this.leftRotate(node.left);\nreturn this.rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactor < -1) {\nif (this.balanceFactor(node.right) <= 0) {\n// \u5de6\u65cb\nreturn this.leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = this.rightRotate(node.right);\nreturn this.leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{rotate}\n
    avl_tree.cs
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nTreeNode? rotate(TreeNode? node)\n{\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nint balanceFactorInt = balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balanceFactorInt > 1)\n{\nif (balanceFactor(node.left) >= 0)\n{\n// \u53f3\u65cb\nreturn rightRotate(node);\n}\nelse\n{\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.left = leftRotate(node?.left);\nreturn rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balanceFactorInt < -1)\n{\nif (balanceFactor(node.right) <= 0)\n{\n// \u5de6\u65cb\nreturn leftRotate(node);\n}\nelse\n{\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.right = rightRotate(node?.right);\nreturn leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    avl_tree.swift
    /* \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nfunc rotate(node: TreeNode?) -> TreeNode? {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nlet balanceFactor = balanceFactor(node: node)\n// \u5de6\u504f\u6811\nif balanceFactor > 1 {\nif self.balanceFactor(node: node?.left) >= 0 {\n// \u53f3\u65cb\nreturn rightRotate(node: node)\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode?.left = leftRotate(node: node?.left)\nreturn rightRotate(node: node)\n}\n}\n// \u53f3\u504f\u6811\nif balanceFactor < -1 {\nif self.balanceFactor(node: node?.right) <= 0 {\n// \u5de6\u65cb\nreturn leftRotate(node: node)\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode?.right = rightRotate(node: node?.right)\nreturn leftRotate(node: node)\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n}\n
    avl_tree.zig
    // \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nfn rotate(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\n// \u83b7\u53d6\u7ed3\u70b9 node \u7684\u5e73\u8861\u56e0\u5b50\nvar balance_factor = self.balanceFactor(node);\n// \u5de6\u504f\u6811\nif (balance_factor > 1) {\nif (self.balanceFactor(node.?.left) >= 0) {\n// \u53f3\u65cb\nreturn self.rightRotate(node);\n} else {\n// \u5148\u5de6\u65cb\u540e\u53f3\u65cb\nnode.?.left = self.leftRotate(node.?.left);\nreturn self.rightRotate(node);\n}\n}\n// \u53f3\u504f\u6811\nif (balance_factor < -1) {\nif (self.balanceFactor(node.?.right) <= 0) {\n// \u5de6\u65cb\nreturn self.leftRotate(node);\n} else {\n// \u5148\u53f3\u65cb\u540e\u5de6\u65cb\nnode.?.right = self.rightRotate(node.?.right);\nreturn self.leftRotate(node);\n}\n}\n// \u5e73\u8861\u6811\uff0c\u65e0\u9700\u65cb\u8f6c\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node;\n}\n
    "},{"location":"chapter_tree/avl_tree/#743-avl","title":"7.4.3. \u00a0 AVL \u6811\u5e38\u7528\u64cd\u4f5c","text":""},{"location":"chapter_tree/avl_tree/#_4","title":"\u63d2\u5165\u7ed3\u70b9","text":"

    \u300cAVL \u6811\u300d\u7684\u7ed3\u70b9\u63d2\u5165\u64cd\u4f5c\u4e0e\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u4e3b\u4f53\u7c7b\u4f3c\u3002\u4e0d\u540c\u7684\u662f\uff0c\u5728\u63d2\u5165\u7ed3\u70b9\u540e\uff0c\u4ece\u8be5\u7ed3\u70b9\u5230\u6839\u7ed3\u70b9\u7684\u8def\u5f84\u4e0a\u4f1a\u51fa\u73b0\u4e00\u7cfb\u5217\u300c\u5931\u8861\u7ed3\u70b9\u300d\u3002\u6240\u4ee5\uff0c\u6211\u4eec\u9700\u8981\u4ece\u8be5\u7ed3\u70b9\u5f00\u59cb\uff0c\u4ece\u5e95\u81f3\u9876\u5730\u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u6240\u6709\u5931\u8861\u7ed3\u70b9\u6062\u590d\u5e73\u8861\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode insert(int val) {\nroot = insertHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode insertHelper(TreeNode node, int val) {\nif (node == null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val)\nnode.left = insertHelper(node.left, val);\nelse if (val > node.val)\nnode.right = insertHelper(node.right, val);\nelse\nreturn node;     // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.cpp
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode* insert(int val) {\nroot = insertHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode* insertHelper(TreeNode* node, int val) {\nif (node == nullptr) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node->val)\nnode->left = insertHelper(node->left, val);\nelse if (val > node->val)\nnode->right = insertHelper(node->right, val);\nelse\nreturn node;     // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.py
    def insert(self, val) -> TreeNode:\n\"\"\" \u63d2\u5165\u7ed3\u70b9 \"\"\"\nself.__root = self.__insert_helper(self.__root, val)\nreturn self.__root\ndef __insert_helper(self, node: Optional[TreeNode], val: int) -> TreeNode:\n\"\"\" \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09\"\"\"\nif node is None:\nreturn TreeNode(val)\n# 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9\nif val < node.val:\nnode.left = self.__insert_helper(node.left, val)\nelif val > node.val:\nnode.right = self.__insert_helper(node.right, val)\nelse:\n# \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\n# 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nreturn self.__rotate(node)\n
    avl_tree.go
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunc (t *aVLTree) insert(val int) *TreeNode {\nt.root = t.insertHelper(t.root, val)\nreturn t.root\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc (t *aVLTree) insertHelper(node *TreeNode, val int) *TreeNode {\nif node == nil {\nreturn NewTreeNode(val)\n}\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif val < node.Val {\nnode.Left = t.insertHelper(node.Left, val)\n} else if val > node.Val {\nnode.Right = t.insertHelper(node.Right, val)\n} else {\n// \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nreturn node\n}\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = t.rotate(node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n
    avl_tree.js
    /* \u63d2\u5165\u7ed3\u70b9 */\ninsert(val) {\nthis.root = this.#insertHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\n#insertHelper(node, val) {\nif (node === null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val) node.left = this.#insertHelper(node.left, val);\nelse if (val > node.val) node.right = this.#insertHelper(node.right, val);\nelse return node; // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nthis.#updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.#rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.ts
    /* \u63d2\u5165\u7ed3\u70b9 */\ninsert(val: number): TreeNode {\nthis.root = this.insertHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\ninsertHelper(node: TreeNode, val: number): TreeNode {\nif (node === null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val) {\nnode.left = this.insertHelper(node.left, val);\n} else if (val > node.val) {\nnode.right = this.insertHelper(node.right, val);\n} else {\nreturn node; // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\n}\nthis.updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{insert}\n[class]{aVLTree}-[func]{insertHelper}\n
    avl_tree.cs
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode? insert(int val)\n{\nroot = insertHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode? insertHelper(TreeNode? node, int val)\n{\nif (node == null) return new TreeNode(val);\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif (val < node.val)\nnode.left = insertHelper(node.left, val);\nelse if (val > node.val)\nnode.right = insertHelper(node.right, val);\nelse\nreturn node;     // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    avl_tree.swift
    /* \u63d2\u5165\u7ed3\u70b9 */\n@discardableResult\nfunc insert(val: Int) -> TreeNode? {\nroot = insertHelper(node: root, val: val)\nreturn root\n}\n/* \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc insertHelper(node: TreeNode?, val: Int) -> TreeNode? {\nvar node = node\nif node == nil {\nreturn TreeNode(x: val)\n}\n/* 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9 */\nif val < node!.val {\nnode?.left = insertHelper(node: node?.left, val: val)\n} else if val > node!.val {\nnode?.right = insertHelper(node: node?.right, val: val)\n} else {\nreturn node // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\n}\nupdateHeight(node: node) // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node: node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n
    avl_tree.zig
    // \u63d2\u5165\u7ed3\u70b9\nfn insert(self: *Self, val: T) !?*inc.TreeNode(T) {\nself.root = try self.insertHelper(self.root, val);\nreturn self.root;\n}\n// \u9012\u5f52\u63d2\u5165\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09\nfn insertHelper(self: *Self, node_: ?*inc.TreeNode(T), val: T) !?*inc.TreeNode(T) {\nvar node = node_;\nif (node == null) {\nvar tmp_node = try self.mem_allocator.create(inc.TreeNode(T));\ntmp_node.init(val);\nreturn tmp_node;\n}\n// 1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u5e76\u63d2\u5165\u7ed3\u70b9\nif (val < node.?.val) {\nnode.?.left = try self.insertHelper(node.?.left, val);\n} else if (val > node.?.val) {\nnode.?.right = try self.insertHelper(node.?.right, val);\n} else {\nreturn node;            // \u91cd\u590d\u7ed3\u70b9\u4e0d\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\n}\nself.updateHeight(node);    // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n// 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nnode = self.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n
    "},{"location":"chapter_tree/avl_tree/#_5","title":"\u5220\u9664\u7ed3\u70b9","text":"

    \u300cAVL \u6811\u300d\u5220\u9664\u7ed3\u70b9\u64cd\u4f5c\u4e0e\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u5220\u9664\u7ed3\u70b9\u64cd\u4f5c\u603b\u4f53\u76f8\u540c\u3002\u7c7b\u4f3c\u5730\uff0c\u5728\u5220\u9664\u7ed3\u70b9\u540e\uff0c\u4e5f\u9700\u8981\u4ece\u5e95\u81f3\u9876\u5730\u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u6240\u6709\u5931\u8861\u7ed3\u70b9\u6062\u590d\u5e73\u8861\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig avl_tree.java
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode remove(int val) {\nroot = removeHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode removeHelper(TreeNode node, int val) {\nif (node == null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val)\nnode.left = removeHelper(node.left, val);\nelse if (val > node.val)\nnode.right = removeHelper(node.right, val);\nelse {\nif (node.left == null || node.right == null) {\nTreeNode child = node.left != null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == null)\nreturn null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse\nnode = child;\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nTreeNode temp = getInOrderNext(node.right);\nnode.right = removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode getInOrderNext(TreeNode node) {\nif (node == null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left != null) {\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.cpp
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode* remove(int val) {\nroot = removeHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode* removeHelper(TreeNode* node, int val) {\nif (node == nullptr) return nullptr;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node->val)\nnode->left = removeHelper(node->left, val);\nelse if (val > node->val)\nnode->right = removeHelper(node->right, val);\nelse {\nif (node->left == nullptr || node->right == nullptr) {\nTreeNode* child = node->left != nullptr ? node->left : node->right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == nullptr) {\ndelete node;\nreturn nullptr;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse {\ndelete node;\nnode = child;\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nTreeNode* temp = getInOrderNext(node->right);\nnode->right = removeHelper(node->right, temp->val);\nnode->val = temp->val;\n}\n}\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode* getInOrderNext(TreeNode* node) {\nif (node == nullptr) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node->left != nullptr) {\nnode = node->left;\n}\nreturn node;\n}\n
    avl_tree.py
    def remove(self, val: int) -> Optional[TreeNode]:\n\"\"\" \u5220\u9664\u7ed3\u70b9 \"\"\"\nself.__root = self.__remove_helper(self.__root, val)\nreturn self.__root \ndef __remove_helper(self, node: Optional[TreeNode], val: int) -> Optional[TreeNode]:\n\"\"\" \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 \"\"\"\nif node is None:\nreturn None\n# 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b\nif val < node.val:\nnode.left = self.__remove_helper(node.left, val)\nelif val > node.val:\nnode.right = self.__remove_helper(node.right, val)\nelse:\nif node.left is None or node.right is None:\nchild = node.left or node.right\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif child is None:\nreturn None\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse:\nnode = child\nelse:  # \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\ntemp = self.__get_inorder_next(node.right)\nnode.right = self.__remove_helper(node.right, temp.val)\nnode.val = temp.val\n# \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nself.__update_height(node)\n# 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nreturn self.__rotate(node)\ndef __get_inorder_next(self, node: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 \"\"\"\nif node is None:\nreturn None\n# \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile node.left is not None:\nnode = node.left\nreturn node\n
    avl_tree.go
    /* \u5220\u9664\u7ed3\u70b9 */\nfunc (t *aVLTree) remove(val int) *TreeNode {\nroot := t.removeHelper(t.root, val)\nreturn root\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc (t *aVLTree) removeHelper(node *TreeNode, val int) *TreeNode {\nif node == nil {\nreturn nil\n}\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif val < node.Val {\nnode.Left = t.removeHelper(node.Left, val)\n} else if val > node.Val {\nnode.Right = t.removeHelper(node.Right, val)\n} else {\nif node.Left == nil || node.Right == nil {\nchild := node.Left\nif node.Right != nil {\nchild = node.Right\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif child == nil {\nreturn nil\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nnode = child\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\ntemp := t.getInOrderNext(node.Right)\nnode.Right = t.removeHelper(node.Right, temp.Val)\nnode.Val = temp.Val\n}\n}\n// \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\nt.updateHeight(node)\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = t.rotate(node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc (t *aVLTree) getInOrderNext(node *TreeNode) *TreeNode {\nif node == nil {\nreturn node\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nfor node.Left != nil {\nnode = node.Left\n}\nreturn node\n}\n
    avl_tree.js
    /* \u5220\u9664\u7ed3\u70b9 */\nremove(val) {\nthis.root = this.#removeHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\n#removeHelper(node, val) {\nif (node === null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val) node.left = this.#removeHelper(node.left, val);\nelse if (val > node.val) node.right = this.#removeHelper(node.right, val);\nelse {\nif (node.left === null || node.right === null) {\nconst child = node.left !== null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child === null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse node = child;\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nconst temp = this.#getInOrderNext(node.right);\nnode.right = this.#removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nthis.#updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.#rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\n#getInOrderNext(node) {\nif (node === null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left !== null) {\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.ts
    /* \u5220\u9664\u7ed3\u70b9 */\nremove(val: number): TreeNode {\nthis.root = this.removeHelper(this.root, val);\nreturn this.root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nremoveHelper(node: TreeNode, val: number): TreeNode {\nif (node === null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val) {\nnode.left = this.removeHelper(node.left, val);\n} else if (val > node.val) {\nnode.right = this.removeHelper(node.right, val);\n} else {\nif (node.left === null || node.right === null) {\nconst child = node.left !== null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child === null) {\nreturn null;\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nnode = child;\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nconst temp = this.getInOrderNext(node.right);\nnode.right = this.removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nthis.updateHeight(node); // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = this.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\ngetInOrderNext(node: TreeNode): TreeNode {\nif (node === null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left !== null) {\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.c
    [class]{aVLTree}-[func]{remove}\n[class]{aVLTree}-[func]{removeHelper}\n[class]{aVLTree}-[func]{getInOrderNext}\n
    avl_tree.cs
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode? remove(int val)\n{\nroot = removeHelper(root, val);\nreturn root;\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nTreeNode? removeHelper(TreeNode? node, int val)\n{\nif (node == null) return null;\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif (val < node.val)\nnode.left = removeHelper(node.left, val);\nelse if (val > node.val)\nnode.right = removeHelper(node.right, val);\nelse\n{\nif (node.left == null || node.right == null)\n{\nTreeNode? child = node.left != null ? node.left : node.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == null)\nreturn null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse\nnode = child;\n}\nelse\n{\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nTreeNode? temp = getInOrderNext(node.right);\nnode.right = removeHelper(node.right, temp.val);\nnode.val = temp.val;\n}\n}\nupdateHeight(node);  // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode? getInOrderNext(TreeNode? node)\n{\nif (node == null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.left != null)\n{\nnode = node.left;\n}\nreturn node;\n}\n
    avl_tree.swift
    /* \u5220\u9664\u7ed3\u70b9 */\n@discardableResult\nfunc remove(val: Int) -> TreeNode? {\nroot = removeHelper(node: root, val: val)\nreturn root\n}\n/* \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09 */\nfunc removeHelper(node: TreeNode?, val: Int) -> TreeNode? {\nvar node = node\nif node == nil {\nreturn nil\n}\n/* 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b */\nif val < node!.val {\nnode?.left = removeHelper(node: node?.left, val: val)\n} else if val > node!.val {\nnode?.right = removeHelper(node: node?.right, val: val)\n} else {\nif node?.left == nil || node?.right == nil {\nlet child = node?.left != nil ? node?.left : node?.right\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif child == nil {\nreturn nil\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\nelse {\nnode = child\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nlet temp = getInOrderNext(node: node?.right)\nnode?.right = removeHelper(node: node?.right, val: temp!.val)\nnode?.val = temp!.val\n}\n}\nupdateHeight(node: node) // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n/* 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861 */\nnode = rotate(node: node)\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc getInOrderNext(node: TreeNode?) -> TreeNode? {\nvar node = node\nif node == nil {\nreturn node\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile node?.left != nil {\nnode = node?.left\n}\nreturn node\n}\n
    avl_tree.zig
    // \u5220\u9664\u7ed3\u70b9\nfn remove(self: *Self, val: T) ?*inc.TreeNode(T) {\nself.root = self.removeHelper(self.root, val);\nreturn self.root;\n}\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9\uff08\u8f85\u52a9\u65b9\u6cd5\uff09\nfn removeHelper(self: *Self, node_: ?*inc.TreeNode(T), val: T) ?*inc.TreeNode(T) {\nvar node = node_;\nif (node == null) return null;\n// 1. \u67e5\u627e\u7ed3\u70b9\uff0c\u5e76\u5220\u9664\u4e4b\nif (val < node.?.val) {\nnode.?.left = self.removeHelper(node.?.left, val);\n} else if (val > node.?.val) {\nnode.?.right = self.removeHelper(node.?.right, val);\n} else {\nif (node.?.left == null or node.?.right == null) {\nvar child = if (node.?.left != null) node.?.left else node.?.right;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 \uff0c\u76f4\u63a5\u5220\u9664 node \u5e76\u8fd4\u56de\nif (child == null) {\nreturn null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 1 \uff0c\u76f4\u63a5\u5220\u9664 node\n} else {\nnode = child;\n}\n} else {\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2 \uff0c\u5219\u5c06\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e2a\u7ed3\u70b9\u5220\u9664\uff0c\u5e76\u7528\u8be5\u7ed3\u70b9\u66ff\u6362\u5f53\u524d\u7ed3\u70b9\nvar temp = self.getInOrderNext(node.?.right);\nnode.?.right = self.removeHelper(node.?.right, temp.?.val);\nnode.?.val = temp.?.val;\n}\n}\nself.updateHeight(node);    // \u66f4\u65b0\u7ed3\u70b9\u9ad8\u5ea6\n// 2. \u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u8be5\u5b50\u6811\u91cd\u65b0\u6062\u590d\u5e73\u8861\nnode = self.rotate(node);\n// \u8fd4\u56de\u5b50\u6811\u7684\u6839\u7ed3\u70b9\nreturn node;\n}\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09\nfn getInOrderNext(self: *Self, node_: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\n_ = self;\nvar node = node_;\nif (node == null) return node;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node.?.left != null) {\nnode = node.?.left;\n}\nreturn node;\n}\n
    "},{"location":"chapter_tree/avl_tree/#_6","title":"\u67e5\u627e\u7ed3\u70b9","text":"

    \u300cAVL \u6811\u300d\u7684\u7ed3\u70b9\u67e5\u627e\u64cd\u4f5c\u4e0e\u300c\u4e8c\u53c9\u641c\u7d22\u6811\u300d\u4e00\u81f4\uff0c\u5728\u6b64\u4e0d\u518d\u8d58\u8ff0\u3002

    "},{"location":"chapter_tree/avl_tree/#744-avl","title":"7.4.4. \u00a0 AVL \u6811\u5178\u578b\u5e94\u7528","text":"
    • \u7ec4\u7ec7\u5b58\u50a8\u5927\u578b\u6570\u636e\uff0c\u9002\u7528\u4e8e\u9ad8\u9891\u67e5\u627e\u3001\u4f4e\u9891\u589e\u5220\u573a\u666f\uff1b
    • \u7528\u4e8e\u5efa\u7acb\u6570\u636e\u5e93\u4e2d\u7684\u7d22\u5f15\u7cfb\u7edf\uff1b

    \u4e3a\u4ec0\u4e48\u7ea2\u9ed1\u6811\u6bd4 AVL \u6811\u66f4\u53d7\u6b22\u8fce\uff1f

    \u7ea2\u9ed1\u6811\u7684\u5e73\u8861\u6761\u4ef6\u76f8\u5bf9\u5bbd\u677e\uff0c\u56e0\u6b64\u5728\u7ea2\u9ed1\u6811\u4e2d\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u6240\u9700\u7684\u65cb\u8f6c\u64cd\u4f5c\u76f8\u5bf9\u66f4\u5c11\uff0c\u7ed3\u70b9\u589e\u5220\u64cd\u4f5c\u76f8\u6bd4 AVL \u6811\u7684\u6548\u7387\u66f4\u9ad8\u3002

    "},{"location":"chapter_tree/binary_search_tree/","title":"7.3. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811","text":"

    \u300c\u4e8c\u53c9\u641c\u7d22\u6811 Binary Search Tree\u300d\u6ee1\u8db3\u4ee5\u4e0b\u6761\u4ef6\uff1a

    1. \u5bf9\u4e8e\u6839\u7ed3\u70b9\uff0c\u5de6\u5b50\u6811\u4e2d\u6240\u6709\u7ed3\u70b9\u7684\u503c \\(<\\) \u6839\u7ed3\u70b9\u7684\u503c \\(<\\) \u53f3\u5b50\u6811\u4e2d\u6240\u6709\u7ed3\u70b9\u7684\u503c\uff1b
    2. \u4efb\u610f\u7ed3\u70b9\u7684\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u4e5f\u662f\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5373\u4e5f\u6ee1\u8db3\u6761\u4ef6 1. \uff1b

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811

    "},{"location":"chapter_tree/binary_search_tree/#731","title":"7.3.1. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u64cd\u4f5c","text":""},{"location":"chapter_tree/binary_search_tree/#_1","title":"\u67e5\u627e\u7ed3\u70b9","text":"

    \u7ed9\u5b9a\u76ee\u6807\u7ed3\u70b9\u503c num \uff0c\u53ef\u4ee5\u6839\u636e\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6027\u8d28\u6765\u67e5\u627e\u3002\u6211\u4eec\u58f0\u660e\u4e00\u4e2a\u7ed3\u70b9 cur \uff0c\u4ece\u4e8c\u53c9\u6811\u7684\u6839\u7ed3\u70b9 root \u51fa\u53d1\uff0c\u5faa\u73af\u6bd4\u8f83\u7ed3\u70b9\u503c cur.val \u548c num \u4e4b\u95f4\u7684\u5927\u5c0f\u5173\u7cfb

    • \u82e5 cur.val < num \uff0c\u8bf4\u660e\u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\uff0c\u56e0\u6b64\u6267\u884c cur = cur.right \uff1b
    • \u82e5 cur.val > num \uff0c\u8bf4\u660e\u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\uff0c\u56e0\u6b64\u6267\u884c cur = cur.left \uff1b
    • \u82e5 cur.val = num \uff0c\u8bf4\u660e\u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\u5e76\u8fd4\u56de\u8be5\u7ed3\u70b9\u5373\u53ef\uff1b
    <1><2><3><4>

    \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u67e5\u627e\u64cd\u4f5c\u548c\u4e8c\u5206\u67e5\u627e\u7b97\u6cd5\u5982\u51fa\u4e00\u8f99\uff0c\u4e5f\u662f\u5728\u6bcf\u8f6e\u6392\u9664\u4e00\u534a\u60c5\u51b5\u3002\u5faa\u73af\u6b21\u6570\u6700\u591a\u4e3a\u4e8c\u53c9\u6811\u7684\u9ad8\u5ea6\uff0c\u5f53\u4e8c\u53c9\u6811\u5e73\u8861\u65f6\uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search_tree.java
    /* \u67e5\u627e\u7ed3\u70b9 */\nTreeNode search(int num) {\nTreeNode cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur.val > num) cur = cur.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.cpp
    /* \u67e5\u627e\u7ed3\u70b9 */\nTreeNode* search(int num) {\nTreeNode* cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != nullptr) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur->val < num) cur = cur->right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur->val > num) cur = cur->left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.py
    def search(self, num: int) -> Optional[TreeNode]:\n\"\"\" \u67e5\u627e\u7ed3\u70b9 \"\"\"\ncur: Optional[TreeNode] = self.__root\n# \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur is not None:\n# \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur.val < num:\ncur = cur.right\n# \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelif cur.val > num:\ncur = cur.left\n# \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse:\nbreak\nreturn cur\n
    binary_search_tree.go
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunc (bst *binarySearchTree) search(num int) *TreeNode {\nnode := bst.root\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nfor node != nil {\nif node.Val < num {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nnode = node.Right\n} else if node.Val > num {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nnode = node.Left\n} else {\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nbreak\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn node\n}\n
    binary_search_tree.js
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunction search(num) {\nlet cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur.val > num) cur = cur.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.ts
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunction search(num: number): TreeNode | null {\nlet cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\nif (cur.val < num) {\ncur = cur.right; // \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\n} else if (cur.val > num) {\ncur = cur.left; // \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else {\nbreak; // \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.c
    [class]{binarySearchTree}-[func]{search}\n
    binary_search_tree.cs
    /* \u67e5\u627e\u7ed3\u70b9 */\nTreeNode? search(int num)\n{\nTreeNode? cur = root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null)\n{\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if (cur.val > num) cur = cur.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse break;\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    binary_search_tree.swift
    /* \u67e5\u627e\u7ed3\u70b9 */\nfunc search(num: Int) -> TreeNode? {\nvar cur = root\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur != nil {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur!.val < num {\ncur = cur?.right\n}\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse if cur!.val > num {\ncur = cur?.left\n}\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nelse {\nbreak\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur\n}\n
    binary_search_tree.zig
    // \u67e5\u627e\u7ed3\u70b9\nfn search(self: *Self, num: T) ?*inc.TreeNode(T) {\nvar cur = self.root;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.?.val < num) {\ncur = cur.?.right;\n// \u76ee\u6807\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else if (cur.?.val > num) {\ncur = cur.?.left;\n// \u627e\u5230\u76ee\u6807\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\n} else {\nbreak;\n}\n}\n// \u8fd4\u56de\u76ee\u6807\u7ed3\u70b9\nreturn cur;\n}\n
    "},{"location":"chapter_tree/binary_search_tree/#_2","title":"\u63d2\u5165\u7ed3\u70b9","text":"

    \u7ed9\u5b9a\u4e00\u4e2a\u5f85\u63d2\u5165\u5143\u7d20 num \uff0c\u4e3a\u4e86\u4fdd\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u201c\u5de6\u5b50\u6811 < \u6839\u7ed3\u70b9 < \u53f3\u5b50\u6811\u201d\u7684\u6027\u8d28\uff0c\u63d2\u5165\u64cd\u4f5c\u5206\u4e3a\u4e24\u6b65\uff1a

    1. \u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff1a\u4e0e\u67e5\u627e\u64cd\u4f5c\u7c7b\u4f3c\uff0c\u6211\u4eec\u4ece\u6839\u7ed3\u70b9\u51fa\u53d1\uff0c\u6839\u636e\u5f53\u524d\u7ed3\u70b9\u503c\u548c num \u7684\u5927\u5c0f\u5173\u7cfb\u5faa\u73af\u5411\u4e0b\u641c\u7d22\uff0c\u76f4\u5230\u8d8a\u8fc7\u53f6\u7ed3\u70b9\uff08\u904d\u5386\u5230 \\(\\text{null}\\) \uff09\u65f6\u8df3\u51fa\u5faa\u73af\uff1b
    2. \u5728\u8be5\u4f4d\u7f6e\u63d2\u5165\u7ed3\u70b9\uff1a\u521d\u59cb\u5316\u7ed3\u70b9 num \uff0c\u5c06\u8be5\u7ed3\u70b9\u653e\u5230 \\(\\text{null}\\) \u7684\u4f4d\u7f6e \uff1b

    \u4e8c\u53c9\u641c\u7d22\u6811\u4e0d\u5141\u8bb8\u5b58\u5728\u91cd\u590d\u7ed3\u70b9\uff0c\u5426\u5219\u5c06\u4f1a\u8fdd\u80cc\u5176\u5b9a\u4e49\u3002\u56e0\u6b64\u82e5\u5f85\u63d2\u5165\u7ed3\u70b9\u5728\u6811\u4e2d\u5df2\u7ecf\u5b58\u5728\uff0c\u5219\u4e0d\u6267\u884c\u63d2\u5165\uff0c\u76f4\u63a5\u8fd4\u56de\u5373\u53ef\u3002

    Fig. \u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u63d2\u5165\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search_tree.java
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode insert(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.val == num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nTreeNode node = new TreeNode(num);\nif (pre.val < num) pre.right = node;\nelse pre.left = node;\nreturn node;\n}\n
    binary_search_tree.cpp
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode* insert(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == nullptr) return nullptr;\nTreeNode *cur = root, *pre = nullptr;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != nullptr) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur->val == num) return nullptr;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur->val < num) cur = cur->right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur->left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nTreeNode* node = new TreeNode(num);\nif (pre->val < num) pre->right = node;\nelse pre->left = node;\nreturn node;\n}\n
    binary_search_tree.py
    def insert(self, num: int) -> Optional[TreeNode]:\n\"\"\" \u63d2\u5165\u7ed3\u70b9 \"\"\"\n# \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif self.__root is None:\nreturn None\n# \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\ncur, pre = self.__root, None\nwhile cur is not None:\n# \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif cur.val == num:\nreturn None\npre = cur\n# \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur.val < num:\ncur = cur.right\n# \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse:\ncur = cur.left\n# \u63d2\u5165\u7ed3\u70b9 val\nnode = TreeNode(num)\nif pre.val < num:\npre.right = node\nelse:\npre.left = node\nreturn node\n
    binary_search_tree.go
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunc (bst *binarySearchTree) insert(num int) *TreeNode {\ncur := bst.root\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5f85\u63d2\u5165\u7ed3\u70b9\u4e4b\u524d\u7684\u7ed3\u70b9\u4f4d\u7f6e\nvar pre *TreeNode = nil\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nfor cur != nil {\nif cur.Val == num {\nreturn nil\n}\npre = cur\nif cur.Val < num {\ncur = cur.Right\n} else {\ncur = cur.Left\n}\n}\n// \u63d2\u5165\u7ed3\u70b9\nnode := NewTreeNode(num)\nif pre.Val < num {\npre.Right = node\n} else {\npre.Left = node\n}\nreturn cur\n}\n
    binary_search_tree.js
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunction insert(num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) return null;\nlet cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.val === num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nlet node = new TreeNode(num);\nif (pre.val < num) pre.right = node;\nelse pre.left = node;\nreturn node;\n}\n
    binary_search_tree.ts
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunction insert(num: number): TreeNode | null {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) {\nreturn null;\n}\nlet cur = root,\npre: TreeNode | null = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\nif (cur.val === num) {\nreturn null; // \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\n}\npre = cur;\nif (cur.val < num) {\ncur = cur.right as TreeNode; // \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\n} else {\ncur = cur.left as TreeNode; // \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n}\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nlet node = new TreeNode(num);\nif (pre!.val < num) {\npre!.right = node;\n} else {\npre!.left = node;\n}\nreturn node;\n}\n
    binary_search_tree.c
    [class]{binarySearchTree}-[func]{insert}\n
    binary_search_tree.cs
    /* \u63d2\u5165\u7ed3\u70b9 */\nTreeNode? insert(int num)\n{\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode? cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null)\n{\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.val == num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nTreeNode node = new TreeNode(num);\nif (pre != null)\n{\nif (pre.val < num) pre.right = node;\nelse pre.left = node;\n}\nreturn node;\n}\n
    binary_search_tree.swift
    /* \u63d2\u5165\u7ed3\u70b9 */\nfunc insert(num: Int) -> TreeNode? {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif root == nil {\nreturn nil\n}\nvar cur = root\nvar pre: TreeNode?\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur != nil {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif cur!.val == num {\nreturn nil\n}\npre = cur\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur!.val < num {\ncur = cur?.right\n}\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse {\ncur = cur?.left\n}\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nlet node = TreeNode(x: num)\nif pre!.val < num {\npre?.right = node\n} else {\npre?.left = node\n}\nreturn node\n}\n
    binary_search_tree.zig
    // \u63d2\u5165\u7ed3\u70b9\nfn insert(self: *Self, num: T) !?*inc.TreeNode(T) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (self.root == null) return null;\nvar cur = self.root;\nvar pre: ?*inc.TreeNode(T) = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u91cd\u590d\u7ed3\u70b9\uff0c\u76f4\u63a5\u8fd4\u56de\nif (cur.?.val == num) return null;\npre = cur;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.?.val < num) {\ncur = cur.?.right;\n// \u63d2\u5165\u4f4d\u7f6e\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else {\ncur = cur.?.left;\n}\n}\n// \u63d2\u5165\u7ed3\u70b9 val\nvar node = try self.mem_allocator.create(inc.TreeNode(T));\nnode.init(num);\nif (pre.?.val < num) {\npre.?.right = node;\n} else {\npre.?.left = node;\n}\nreturn node;\n}\n

    \u4e3a\u4e86\u63d2\u5165\u7ed3\u70b9\uff0c\u9700\u8981\u501f\u52a9 \u8f85\u52a9\u7ed3\u70b9 pre \u4fdd\u5b58\u4e0a\u4e00\u8f6e\u5faa\u73af\u7684\u7ed3\u70b9\uff0c\u8fd9\u6837\u5728\u904d\u5386\u5230 \\(\\text{null}\\) \u65f6\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u83b7\u53d6\u5230\u5176\u7236\u7ed3\u70b9\uff0c\u4ece\u800c\u5b8c\u6210\u7ed3\u70b9\u63d2\u5165\u64cd\u4f5c\u3002

    \u4e0e\u67e5\u627e\u7ed3\u70b9\u76f8\u540c\uff0c\u63d2\u5165\u7ed3\u70b9\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\u3002

    "},{"location":"chapter_tree/binary_search_tree/#_3","title":"\u5220\u9664\u7ed3\u70b9","text":"

    \u4e0e\u63d2\u5165\u7ed3\u70b9\u4e00\u6837\uff0c\u6211\u4eec\u9700\u8981\u5728\u5220\u9664\u64cd\u4f5c\u540e\u7ef4\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u201c\u5de6\u5b50\u6811 < \u6839\u7ed3\u70b9 < \u53f3\u5b50\u6811\u201d\u7684\u6027\u8d28\u3002\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u5728\u4e8c\u53c9\u6811\u4e2d\u6267\u884c\u67e5\u627e\u64cd\u4f5c\uff0c\u83b7\u53d6\u5f85\u5220\u9664\u7ed3\u70b9\u3002\u63a5\u4e0b\u6765\uff0c\u6839\u636e\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf\uff0c\u5220\u9664\u64cd\u4f5c\u9700\u8981\u5206\u4e3a\u4e09\u79cd\u60c5\u51b5\uff1a

    \u5f53\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf \\(= 0\\) \u65f6\uff0c\u8868\u660e\u5f85\u5220\u9664\u7ed3\u70b9\u662f\u53f6\u7ed3\u70b9\uff0c\u76f4\u63a5\u5220\u9664\u5373\u53ef\u3002

    Fig. \u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u5220\u9664\u7ed3\u70b9\uff08\u5ea6\u4e3a 0\uff09

    \u5f53\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf \\(= 1\\) \u65f6\uff0c\u5c06\u5f85\u5220\u9664\u7ed3\u70b9\u66ff\u6362\u4e3a\u5176\u5b50\u7ed3\u70b9\u5373\u53ef\u3002

    Fig. \u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u5220\u9664\u7ed3\u70b9\uff08\u5ea6\u4e3a 1\uff09

    \u5f53\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf \\(= 2\\) \u65f6\uff0c\u5220\u9664\u64cd\u4f5c\u5206\u4e3a\u4e09\u6b65\uff1a

    1. \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\u5728 \u4e2d\u5e8f\u904d\u5386\u5e8f\u5217 \u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff0c\u8bb0\u4e3a nex \uff1b
    2. \u5728\u6811\u4e2d\u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex \uff1b
    3. \u4f7f\u7528 nex \u66ff\u6362\u5f85\u5220\u9664\u7ed3\u70b9\uff1b
    <1><2><3><4>

    \u5220\u9664\u7ed3\u70b9\u64cd\u4f5c\u4e5f\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff0c\u5176\u4e2d\u67e5\u627e\u5f85\u5220\u9664\u7ed3\u70b9 \\(O(\\log n)\\) \uff0c\u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u540e\u7ee7\u7ed3\u70b9 \\(O(\\log n)\\) \u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_search_tree.java
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode remove(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left == null || cur.right == null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nTreeNode child = cur.left != null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.left == cur) pre.left = child;\nelse pre.right = child;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nTreeNode nex = getInOrderNext(cur.right);\nint tmp = nex.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode getInOrderNext(TreeNode root) {\nif (root == null) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left != null) {\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.cpp
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode* remove(int num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == nullptr) return nullptr;\nTreeNode *cur = root, *pre = nullptr;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != nullptr) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur->val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur->val < num) cur = cur->right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur->left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == nullptr) return nullptr;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur->left == nullptr || cur->right == nullptr) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = nullptr / \u8be5\u5b50\u7ed3\u70b9\nTreeNode* child = cur->left != nullptr ? cur->left : cur->right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre->left == cur) pre->left = child;\nelse pre->right = child;\n// \u91ca\u653e\u5185\u5b58\ndelete cur;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nTreeNode* nex = getInOrderNext(cur->right);\nint tmp = nex->val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex->val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur->val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode* getInOrderNext(TreeNode* root) {\nif (root == nullptr) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root->left != nullptr) {\nroot = root->left;\n}\nreturn root;\n}\n
    binary_search_tree.py
    def remove(self, num: int) -> Optional[TreeNode]:\n\"\"\" \u5220\u9664\u7ed3\u70b9 \"\"\"\n# \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif self.__root is None:\nreturn None\n# \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\ncur, pre = self.__root, None\nwhile cur is not None:\n# \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif cur.val == num:\nbreak\npre = cur\nif cur.val < num:  # \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\ncur = cur.right\nelse:  # \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\ncur = cur.left\n# \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif cur is None:\nreturn None\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif cur.left is None or cur.right is None:\n# \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nchild = cur.left or cur.right\n# \u5220\u9664\u7ed3\u70b9 cur\nif pre.left == cur:\npre.left = child\nelse:\npre.right = child\n# \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse:\n# \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nnex: TreeNode = self.get_inorder_next(cur.right)\ntmp: int = nex.val\n# \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nself.remove(nex.val)\n# \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp\nreturn cur\ndef get_inorder_next(self, root: Optional[TreeNode]) -> Optional[TreeNode]:\n\"\"\" \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 \"\"\"\nif root is None:\nreturn root\n# \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile root.left is not None:\nroot = root.left\nreturn root\n
    binary_search_tree.go
    /* \u5220\u9664\u7ed3\u70b9 */\nfunc (bst *binarySearchTree) remove(num int) *TreeNode {\ncur := bst.root\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5f85\u5220\u9664\u7ed3\u70b9\u4e4b\u524d\u7684\u7ed3\u70b9\u4f4d\u7f6e\nvar pre *TreeNode = nil\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nfor cur != nil {\nif cur.Val == num {\nbreak\n}\npre = cur\nif cur.Val < num {\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728\u53f3\u5b50\u6811\u4e2d\ncur = cur.Right\n} else {\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728\u5de6\u5b50\u6811\u4e2d\ncur = cur.Left\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5b50\u7ed3\u70b9\u6570\u4e3a 0 \u6216 1\nif cur.Left == nil || cur.Right == nil {\nvar child *TreeNode = nil\n// \u53d6\u51fa\u5f85\u5220\u9664\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\nif cur.Left != nil {\nchild = cur.Left\n} else {\nchild = cur.Right\n}\n// \u5c06\u5b50\u7ed3\u70b9\u66ff\u6362\u4e3a\u5f85\u5220\u9664\u7ed3\u70b9\nif pre.Left == cur {\npre.Left = child\n} else {\npre.Right = child\n}\n// \u5b50\u7ed3\u70b9\u6570\u4e3a 2\n} else {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u5f85\u5220\u9664\u7ed3\u70b9 cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nnext := bst.getInOrderNext(cur)\ntemp := next.Val\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 next\nbst.remove(next.Val)\n// \u5c06 next \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.Val = temp\n}\nreturn cur\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc (bst *binarySearchTree) getInOrderNext(node *TreeNode) *TreeNode {\nif node == nil {\nreturn node\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nfor node.Left != nil {\nnode = node.Left\n}\nreturn node\n}\n
    binary_search_tree.js
    /* \u5220\u9664\u7ed3\u70b9 */\nfunction remove(num) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) return null;\nlet cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val === num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur === null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left === null || cur.right === null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nlet child = cur.left !== null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.left === cur) pre.left = child;\nelse pre.right = child;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nlet nex = getInOrderNext(cur.right);\nlet tmp = nex.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunction getInOrderNext(root) {\nif (root === null) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left !== null) {\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.ts
    /* \u5220\u9664\u7ed3\u70b9 */\nfunction remove(num: number): TreeNode | null {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root === null) {\nreturn null;\n}\nlet cur = root,\npre: TreeNode | null = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur !== null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val === num) {\nbreak;\n}\npre = cur;\nif (cur.val < num) {\ncur = cur.right as TreeNode; // \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\n} else {\ncur = cur.left as TreeNode; // \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur === null) {\nreturn null;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left === null || cur.right === null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nlet child = cur.left !== null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre!.left === cur) {\npre!.left = child;\n} else {\npre!.right = child;\n}\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nlet next = getInOrderNext(cur.right);\nlet tmp = next!.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(next!.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunction getInOrderNext(root: TreeNode | null): TreeNode | null {\nif (root === null) {\nreturn null;\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left !== null) {\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.c
    [class]{binarySearchTree}-[func]{remove}\n[class]{binarySearchTree}-[func]{getInOrderNext}\n
    binary_search_tree.cs
    /* \u5220\u9664\u7ed3\u70b9 */\nTreeNode? remove(int num)\n{\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (root == null) return null;\nTreeNode? cur = root, pre = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null)\n{\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.val < num) cur = cur.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse cur = cur.left;\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == null || pre == null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.left == null || cur.right == null)\n{\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nTreeNode? child = cur.left != null ? cur.left : cur.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.left == cur)\n{\npre.left = child;\n}\nelse\n{\npre.right = child;\n}\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse\n{\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nTreeNode? nex = getInOrderNext(cur.right);\nif (nex != null)\n{\nint tmp = nex.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(nex.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.val = tmp;\n}\n}\nreturn cur;\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nTreeNode? getInOrderNext(TreeNode? root)\n{\nif (root == null) return root;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (root.left != null)\n{\nroot = root.left;\n}\nreturn root;\n}\n
    binary_search_tree.swift
    /* \u5220\u9664\u7ed3\u70b9 */\n@discardableResult\nfunc remove(num: Int) -> TreeNode? {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif root == nil {\nreturn nil\n}\nvar cur = root\nvar pre: TreeNode?\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile cur != nil {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif cur!.val == num {\nbreak\n}\npre = cur\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif cur!.val < num {\ncur = cur?.right\n}\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\nelse {\ncur = cur?.left\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif cur == nil {\nreturn nil\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif cur?.left == nil || cur?.right == nil {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nlet child = cur?.left != nil ? cur?.left : cur?.right\n// \u5220\u9664\u7ed3\u70b9 cur\nif pre?.left === cur {\npre?.left = child\n} else {\npre?.right = child\n}\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\nelse {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nlet nex = getInOrderNext(root: cur?.right)\nlet tmp = nex!.val\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\nremove(num: nex!.val)\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur?.val = tmp\n}\nreturn cur\n}\n/* \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09 */\nfunc getInOrderNext(root: TreeNode?) -> TreeNode? {\nvar root = root\nif root == nil {\nreturn root\n}\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile root?.left != nil {\nroot = root?.left\n}\nreturn root\n}\n
    binary_search_tree.zig
    // \u5220\u9664\u7ed3\u70b9\nfn remove(self: *Self, num: T) ?*inc.TreeNode(T) {\n// \u82e5\u6811\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d0\u524d\u8fd4\u56de\nif (self.root == null) return null;\nvar cur = self.root;\nvar pre: ?*inc.TreeNode(T) = null;\n// \u5faa\u73af\u67e5\u627e\uff0c\u8d8a\u8fc7\u53f6\u7ed3\u70b9\u540e\u8df3\u51fa\nwhile (cur != null) {\n// \u627e\u5230\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u8df3\u51fa\u5faa\u73af\nif (cur.?.val == num) break;\npre = cur;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u53f3\u5b50\u6811\u4e2d\nif (cur.?.val < num) {\ncur = cur.?.right;\n// \u5f85\u5220\u9664\u7ed3\u70b9\u5728 cur \u7684\u5de6\u5b50\u6811\u4e2d\n} else {\ncur = cur.?.left;\n}\n}\n// \u82e5\u65e0\u5f85\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u76f4\u63a5\u8fd4\u56de\nif (cur == null) return null;\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 0 or 1\nif (cur.?.left == null or cur.?.right == null) {\n// \u5f53\u5b50\u7ed3\u70b9\u6570\u91cf = 0 / 1 \u65f6\uff0c child = null / \u8be5\u5b50\u7ed3\u70b9\nvar child = if (cur.?.left != null) cur.?.left else cur.?.right;\n// \u5220\u9664\u7ed3\u70b9 cur\nif (pre.?.left == cur) {\npre.?.left = child;\n} else {\npre.?.right = child;\n}\n// \u5b50\u7ed3\u70b9\u6570\u91cf = 2\n} else {\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d cur \u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\nvar nex = self.getInOrderNext(cur.?.right);\nvar tmp = nex.?.val;\n// \u9012\u5f52\u5220\u9664\u7ed3\u70b9 nex\n_ = self.remove(nex.?.val);\n// \u5c06 nex \u7684\u503c\u590d\u5236\u7ed9 cur\ncur.?.val = tmp;\n}\nreturn cur;\n}\n// \u83b7\u53d6\u4e2d\u5e8f\u904d\u5386\u4e2d\u7684\u4e0b\u4e00\u4e2a\u7ed3\u70b9\uff08\u4ec5\u9002\u7528\u4e8e root \u6709\u5de6\u5b50\u7ed3\u70b9\u7684\u60c5\u51b5\uff09\nfn getInOrderNext(self: *Self, node: ?*inc.TreeNode(T)) ?*inc.TreeNode(T) {\n_ = self;\nvar node_tmp = node;\nif (node_tmp == null) return null;\n// \u5faa\u73af\u8bbf\u95ee\u5de6\u5b50\u7ed3\u70b9\uff0c\u76f4\u5230\u53f6\u7ed3\u70b9\u65f6\u4e3a\u6700\u5c0f\u7ed3\u70b9\uff0c\u8df3\u51fa\nwhile (node_tmp.?.left != null) {\nnode_tmp = node_tmp.?.left;\n}\nreturn node_tmp;\n}\n
    "},{"location":"chapter_tree/binary_search_tree/#_4","title":"\u6392\u5e8f","text":"

    \u6211\u4eec\u77e5\u9053\uff0c\u300c\u4e2d\u5e8f\u904d\u5386\u300d\u9075\u5faa\u201c\u5de6 \\(\\rightarrow\\) \u6839 \\(\\rightarrow\\) \u53f3\u201d\u7684\u904d\u5386\u4f18\u5148\u7ea7\uff0c\u800c\u4e8c\u53c9\u641c\u7d22\u6811\u9075\u5faa\u201c\u5de6\u5b50\u7ed3\u70b9 \\(<\\) \u6839\u7ed3\u70b9 \\(<\\) \u53f3\u5b50\u7ed3\u70b9\u201d\u7684\u5927\u5c0f\u5173\u7cfb\u3002\u56e0\u6b64\uff0c\u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u8fdb\u884c\u4e2d\u5e8f\u904d\u5386\u65f6\uff0c\u603b\u662f\u4f1a\u4f18\u5148\u904d\u5386\u4e0b\u4e00\u4e2a\u6700\u5c0f\u7ed3\u70b9\uff0c\u4ece\u800c\u5f97\u51fa\u4e00\u6761\u91cd\u8981\u6027\u8d28\uff1a\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u4e2d\u5e8f\u904d\u5386\u5e8f\u5217\u662f\u5347\u5e8f\u7684\u3002

    \u501f\u52a9\u4e2d\u5e8f\u904d\u5386\u5347\u5e8f\u7684\u6027\u8d28\uff0c\u6211\u4eec\u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u83b7\u53d6\u6709\u5e8f\u6570\u636e\u4ec5\u9700 \\(O(n)\\) \u65f6\u95f4\uff0c\u800c\u65e0\u9700\u989d\u5916\u6392\u5e8f\uff0c\u975e\u5e38\u9ad8\u6548\u3002

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u4e2d\u5e8f\u904d\u5386\u5e8f\u5217

    "},{"location":"chapter_tree/binary_search_tree/#732","title":"7.3.2. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u6548\u7387","text":"

    \u5047\u8bbe\u7ed9\u5b9a \\(n\\) \u4e2a\u6570\u5b57\uff0c\u6700\u5e38\u7528\u7684\u5b58\u50a8\u65b9\u5f0f\u662f\u300c\u6570\u7ec4\u300d\uff0c\u90a3\u4e48\u5bf9\u4e8e\u8fd9\u4e32\u4e71\u5e8f\u7684\u6570\u5b57\uff0c\u5e38\u89c1\u64cd\u4f5c\u7684\u6548\u7387\u4e3a\uff1a

    • \u67e5\u627e\u5143\u7d20\uff1a\u7531\u4e8e\u6570\u7ec4\u662f\u65e0\u5e8f\u7684\uff0c\u56e0\u6b64\u9700\u8981\u904d\u5386\u6570\u7ec4\u6765\u786e\u5b9a\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u63d2\u5165\u5143\u7d20\uff1a\u53ea\u9700\u5c06\u5143\u7d20\u6dfb\u52a0\u81f3\u6570\u7ec4\u5c3e\u90e8\u5373\u53ef\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\uff1b
    • \u5220\u9664\u5143\u7d20\uff1a\u5148\u67e5\u627e\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff0c\u518d\u5728\u6570\u7ec4\u4e2d\u5220\u9664\u8be5\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u83b7\u53d6\u6700\u5c0f / \u6700\u5927\u5143\u7d20\uff1a\u9700\u8981\u904d\u5386\u6570\u7ec4\u6765\u786e\u5b9a\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b

    \u4e3a\u4e86\u5f97\u5230\u5148\u9a8c\u4fe1\u606f\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u9884\u5148\u5c06\u6570\u7ec4\u5143\u7d20\u8fdb\u884c\u6392\u5e8f\uff0c\u5f97\u5230\u4e00\u4e2a\u300c\u6392\u5e8f\u6570\u7ec4\u300d\uff0c\u6b64\u65f6\u64cd\u4f5c\u6548\u7387\u4e3a\uff1a

    • \u67e5\u627e\u5143\u7d20\uff1a\u7531\u4e8e\u6570\u7ec4\u5df2\u6392\u5e8f\uff0c\u53ef\u4ee5\u4f7f\u7528\u4e8c\u5206\u67e5\u627e\uff0c\u5e73\u5747\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff1b
    • \u63d2\u5165\u5143\u7d20\uff1a\u5148\u67e5\u627e\u63d2\u5165\u4f4d\u7f6e\uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff0c\u518d\u63d2\u5165\u5230\u6307\u5b9a\u4f4d\u7f6e\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u5220\u9664\u5143\u7d20\uff1a\u5148\u67e5\u627e\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(\\log n)\\) \u65f6\u95f4\uff0c\u518d\u5728\u6570\u7ec4\u4e2d\u5220\u9664\u8be5\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff1b
    • \u83b7\u53d6\u6700\u5c0f / \u6700\u5927\u5143\u7d20\uff1a\u6570\u7ec4\u5934\u90e8\u548c\u5c3e\u90e8\u5143\u7d20\u5373\u662f\u6700\u5c0f\u548c\u6700\u5927\u5143\u7d20\uff0c\u4f7f\u7528 \\(O(1)\\) \u65f6\u95f4\uff1b

    \u89c2\u5bdf\u53d1\u73b0\uff0c\u65e0\u5e8f\u6570\u7ec4\u548c\u6709\u5e8f\u6570\u7ec4\u4e2d\u7684\u5404\u9879\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f\u201c\u504f\u79d1\u201d\u7684\uff0c\u5373\u6709\u7684\u5feb\u6709\u7684\u6162\uff1b\u800c\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u5404\u9879\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u90fd\u662f\u5bf9\u6570\u9636\uff0c\u5728\u6570\u636e\u91cf \\(n\\) \u5f88\u5927\u65f6\u6709\u5de8\u5927\u4f18\u52bf\u3002

    \u65e0\u5e8f\u6570\u7ec4 \u6709\u5e8f\u6570\u7ec4 \u4e8c\u53c9\u641c\u7d22\u6811 \u67e5\u627e\u6307\u5b9a\u5143\u7d20 \\(O(n)\\) \\(O(\\log n)\\) \\(O(\\log n)\\) \u63d2\u5165\u5143\u7d20 \\(O(1)\\) \\(O(n)\\) \\(O(\\log n)\\) \u5220\u9664\u5143\u7d20 \\(O(n)\\) \\(O(n)\\) \\(O(\\log n)\\) \u83b7\u53d6\u6700\u5c0f / \u6700\u5927\u5143\u7d20 \\(O(n)\\) \\(O(1)\\) \\(O(\\log n)\\)"},{"location":"chapter_tree/binary_search_tree/#733","title":"7.3.3. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u9000\u5316","text":"

    \u7406\u60f3\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u5e0c\u671b\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u662f\u201c\u5de6\u53f3\u5e73\u8861\u201d\u7684\uff08\u8be6\u89c1\u300c\u5e73\u8861\u4e8c\u53c9\u6811\u300d\u7ae0\u8282\uff09\uff0c\u6b64\u65f6\u53ef\u4ee5\u5728 \\(\\log n\\) \u8f6e\u5faa\u73af\u5185\u67e5\u627e\u4efb\u610f\u7ed3\u70b9\u3002

    \u5982\u679c\u6211\u4eec\u52a8\u6001\u5730\u5728\u4e8c\u53c9\u641c\u7d22\u6811\u4e2d\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\uff0c\u5219\u53ef\u80fd\u5bfc\u81f4\u4e8c\u53c9\u6811\u9000\u5316\u4e3a\u94fe\u8868\uff0c\u6b64\u65f6\u5404\u79cd\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u4e5f\u9000\u5316\u4e4b \\(O(n)\\) \u3002

    Note

    \u5728\u5b9e\u9645\u5e94\u7528\u4e2d\uff0c\u5982\u4f55\u4fdd\u6301\u4e8c\u53c9\u641c\u7d22\u6811\u7684\u5e73\u8861\uff0c\u4e5f\u662f\u4e00\u4e2a\u9700\u8981\u91cd\u8981\u8003\u8651\u7684\u95ee\u9898\u3002

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u5e73\u8861\u4e0e\u9000\u5316

    "},{"location":"chapter_tree/binary_search_tree/#734","title":"7.3.4. \u00a0 \u4e8c\u53c9\u641c\u7d22\u6811\u5e38\u89c1\u5e94\u7528","text":"
    • \u7cfb\u7edf\u4e2d\u7684\u591a\u7ea7\u7d22\u5f15\uff0c\u9ad8\u6548\u67e5\u627e\u3001\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u3002
    • \u5404\u79cd\u641c\u7d22\u7b97\u6cd5\u7684\u5e95\u5c42\u6570\u636e\u7ed3\u6784\u3002
    • \u5b58\u50a8\u6570\u636e\u6d41\uff0c\u4fdd\u6301\u5176\u5df2\u6392\u5e8f\u3002
    "},{"location":"chapter_tree/binary_tree/","title":"7.1. \u00a0 \u4e8c\u53c9\u6811","text":"

    \u300c\u4e8c\u53c9\u6811 Binary Tree\u300d\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u4ee3\u8868\u7740\u7956\u5148\u4e0e\u540e\u4ee3\u4e4b\u95f4\u7684\u6d3e\u751f\u5173\u7cfb\uff0c\u4f53\u73b0\u7740\u201c\u4e00\u5206\u4e3a\u4e8c\u201d\u7684\u5206\u6cbb\u903b\u8f91\u3002\u7c7b\u4f3c\u4e8e\u94fe\u8868\uff0c\u4e8c\u53c9\u6811\u4e5f\u662f\u4ee5\u7ed3\u70b9\u4e3a\u5355\u4f4d\u5b58\u50a8\u7684\uff0c\u7ed3\u70b9\u5305\u542b\u300c\u503c\u300d\u548c\u4e24\u4e2a\u300c\u6307\u9488\u300d\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nint val;         // \u7ed3\u70b9\u503c\nTreeNode left;   // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode right;  // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode(int x) { val = x; }\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7ed3\u6784\u4f53 */\nstruct TreeNode {\nint val;          // \u7ed3\u70b9\u503c\nTreeNode *left;   // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode *right;  // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode(int x) : val(x), left(nullptr), right(nullptr) {}\n};\n
    \"\"\" \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b \"\"\"\nclass TreeNode:\ndef __init__(self, val: int):\nself.val: int = val                   # \u7ed3\u70b9\u503c\nself.left: Optional[TreeNode] = None  # \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nself.right: Optional[TreeNode] = None # \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7ed3\u6784\u4f53 */\ntype TreeNode struct {\nVal   int\nLeft  *TreeNode\nRight *TreeNode\n}\n/* \u7ed3\u70b9\u521d\u59cb\u5316\u65b9\u6cd5 */\nfunc NewTreeNode(v int) *TreeNode {\nreturn &TreeNode{\nLeft:  nil,\nRight: nil,\nVal:   v,\n}\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nfunction TreeNode(val, left, right) {\nthis.val = (val === undefined ? 0 : val); // \u7ed3\u70b9\u503c\nthis.left = (left === undefined ? null : left); // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nthis.right = (right === undefined ? null : right); // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nval: number;\nleft: TreeNode | null;\nright: TreeNode | null;\nconstructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {\nthis.val = val === undefined ? 0 : val; // \u7ed3\u70b9\u503c\nthis.left = left === undefined ? null : left; // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nthis.right = right === undefined ? null : right; // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\n}\n}\n
    \n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nint val;          // \u7ed3\u70b9\u503c\nTreeNode? left;   // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode? right;  // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\nTreeNode(int x) { val = x; }\n}\n
    /* \u4e8c\u53c9\u6811\u7ed3\u70b9\u7c7b */\nclass TreeNode {\nvar val: Int // \u7ed3\u70b9\u503c\nvar left: TreeNode? // \u5de6\u5b50\u7ed3\u70b9\u6307\u9488\nvar right: TreeNode? // \u53f3\u5b50\u7ed3\u70b9\u6307\u9488\ninit(x: Int) {\nval = x\n}\n}\n
    \n

    \u7ed3\u70b9\u7684\u4e24\u4e2a\u6307\u9488\u5206\u522b\u6307\u5411\u300c\u5de6\u5b50\u7ed3\u70b9 Left Child Node\u300d\u548c\u300c\u53f3\u5b50\u7ed3\u70b9 Right Child Node\u300d\uff0c\u5e76\u4e14\u79f0\u8be5\u7ed3\u70b9\u4e3a\u4e24\u4e2a\u5b50\u7ed3\u70b9\u7684\u300c\u7236\u7ed3\u70b9 Parent Node\u300d\u3002\u7ed9\u5b9a\u4e8c\u53c9\u6811\u67d0\u7ed3\u70b9\uff0c\u5c06\u5de6\u5b50\u7ed3\u70b9\u4ee5\u4e0b\u7684\u6811\u79f0\u4e3a\u8be5\u7ed3\u70b9\u7684\u300c\u5de6\u5b50\u6811 Left Subtree\u300d\uff0c\u53f3\u5b50\u6811\u540c\u7406\u3002

    \u9664\u4e86\u53f6\u7ed3\u70b9\u5916\uff0c\u6bcf\u4e2a\u7ed3\u70b9\u90fd\u6709\u5b50\u7ed3\u70b9\u548c\u5b50\u6811\u3002\u4f8b\u5982\uff0c\u82e5\u5c06\u4e0b\u56fe\u7684\u300c\u7ed3\u70b9 2\u300d\u770b\u4f5c\u7236\u7ed3\u70b9\uff0c\u90a3\u4e48\u5176\u5de6\u5b50\u7ed3\u70b9\u548c\u53f3\u5b50\u7ed3\u70b9\u5206\u522b\u4e3a\u300c\u7ed3\u70b9 4\u300d\u548c\u300c\u7ed3\u70b9 5\u300d\uff0c\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u5206\u522b\u4e3a\u300c\u7ed3\u70b9 4 \u53ca\u5176\u4ee5\u4e0b\u7ed3\u70b9\u5f62\u6210\u7684\u6811\u300d\u548c\u300c\u7ed3\u70b9 5 \u53ca\u5176\u4ee5\u4e0b\u7ed3\u70b9\u5f62\u6210\u7684\u6811\u300d\u3002

    Fig. \u7236\u7ed3\u70b9\u3001\u5b50\u7ed3\u70b9\u3001\u5b50\u6811

    "},{"location":"chapter_tree/binary_tree/#711","title":"7.1.1. \u00a0 \u4e8c\u53c9\u6811\u5e38\u89c1\u672f\u8bed","text":"

    \u4e8c\u53c9\u6811\u7684\u672f\u8bed\u8f83\u591a\uff0c\u5efa\u8bae\u5c3d\u91cf\u7406\u89e3\u5e76\u8bb0\u4f4f\u3002\u540e\u7eed\u53ef\u80fd\u9057\u5fd8\uff0c\u53ef\u4ee5\u5728\u9700\u8981\u4f7f\u7528\u65f6\u56de\u6765\u67e5\u770b\u786e\u8ba4\u3002

    • \u300c\u6839\u7ed3\u70b9 Root Node\u300d\uff1a\u4e8c\u53c9\u6811\u6700\u9876\u5c42\u7684\u7ed3\u70b9\uff0c\u5176\u6ca1\u6709\u7236\u7ed3\u70b9\uff1b
    • \u300c\u53f6\u7ed3\u70b9 Leaf Node\u300d\uff1a\u6ca1\u6709\u5b50\u7ed3\u70b9\u7684\u7ed3\u70b9\uff0c\u5176\u4e24\u4e2a\u6307\u9488\u90fd\u6307\u5411 \\(\\text{null}\\) \uff1b
    • \u7ed3\u70b9\u6240\u5904\u300c\u5c42 Level\u300d\uff1a\u4ece\u9876\u81f3\u5e95\u4f9d\u6b21\u589e\u52a0\uff0c\u6839\u7ed3\u70b9\u6240\u5904\u5c42\u4e3a 1 \uff1b
    • \u7ed3\u70b9\u300c\u5ea6 Degree\u300d\uff1a\u7ed3\u70b9\u7684\u5b50\u7ed3\u70b9\u6570\u91cf\u3002\u4e8c\u53c9\u6811\u4e2d\uff0c\u5ea6\u7684\u8303\u56f4\u662f 0, 1, 2 \uff1b
    • \u300c\u8fb9 Edge\u300d\uff1a\u8fde\u63a5\u4e24\u4e2a\u7ed3\u70b9\u7684\u8fb9\uff0c\u5373\u7ed3\u70b9\u6307\u9488\uff1b
    • \u4e8c\u53c9\u6811\u300c\u9ad8\u5ea6\u300d\uff1a\u4e8c\u53c9\u6811\u4e2d\u6839\u7ed3\u70b9\u5230\u6700\u8fdc\u53f6\u7ed3\u70b9\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\uff1b
    • \u7ed3\u70b9\u300c\u6df1\u5ea6 Depth\u300d \uff1a\u6839\u7ed3\u70b9\u5230\u8be5\u7ed3\u70b9\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\uff1b
    • \u7ed3\u70b9\u300c\u9ad8\u5ea6 Height\u300d\uff1a\u6700\u8fdc\u53f6\u7ed3\u70b9\u5230\u8be5\u7ed3\u70b9\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\uff1b

    Fig. \u4e8c\u53c9\u6811\u7684\u5e38\u7528\u672f\u8bed

    \u9ad8\u5ea6\u4e0e\u6df1\u5ea6\u7684\u5b9a\u4e49

    \u503c\u5f97\u6ce8\u610f\uff0c\u6211\u4eec\u901a\u5e38\u5c06\u300c\u9ad8\u5ea6\u300d\u548c\u300c\u6df1\u5ea6\u300d\u5b9a\u4e49\u4e3a\u201c\u8d70\u8fc7\u8fb9\u7684\u6570\u91cf\u201d\uff0c\u800c\u6709\u4e9b\u9898\u76ee\u6216\u6559\u6750\u4f1a\u5c06\u5176\u5b9a\u4e49\u4e3a\u201c\u8d70\u8fc7\u7ed3\u70b9\u7684\u6570\u91cf\u201d\uff0c\u6b64\u65f6\u9ad8\u5ea6\u6216\u6df1\u5ea6\u90fd\u9700\u8981 + 1 \u3002

    "},{"location":"chapter_tree/binary_tree/#712","title":"7.1.2. \u00a0 \u4e8c\u53c9\u6811\u57fa\u672c\u64cd\u4f5c","text":"

    \u521d\u59cb\u5316\u4e8c\u53c9\u6811\u3002\u4e0e\u94fe\u8868\u7c7b\u4f3c\uff0c\u5148\u521d\u59cb\u5316\u7ed3\u70b9\uff0c\u518d\u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree.java
    // \u521d\u59cb\u5316\u7ed3\u70b9\nTreeNode n1 = new TreeNode(1);\nTreeNode n2 = new TreeNode(2);\nTreeNode n3 = new TreeNode(3);\nTreeNode n4 = new TreeNode(4);\nTreeNode n5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.cpp
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nTreeNode* n1 = new TreeNode(1);\nTreeNode* n2 = new TreeNode(2);\nTreeNode* n3 = new TreeNode(3);\nTreeNode* n4 = new TreeNode(4);\nTreeNode* n5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1->left = n2;\nn1->right = n3;\nn2->left = n4;\nn2->right = n5;\n
    binary_tree.py
    \"\"\" \u521d\u59cb\u5316\u4e8c\u53c9\u6811 \"\"\"\n# \u521d\u59cb\u5316\u7ed3\u70b9\nn1 = TreeNode(val=1)\nn2 = TreeNode(val=2)\nn3 = TreeNode(val=3)\nn4 = TreeNode(val=4)\nn5 = TreeNode(val=5)\n# \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2\nn1.right = n3\nn2.left = n4\nn2.right = n5\n
    binary_tree.go
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nn1 := NewTreeNode(1)\nn2 := NewTreeNode(2)\nn3 := NewTreeNode(3)\nn4 := NewTreeNode(4)\nn5 := NewTreeNode(5)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.Left = n2\nn1.Right = n3\nn2.Left = n4\nn2.Right = n5\n
    binary_tree.js
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nlet n1 = new TreeNode(1),\nn2 = new TreeNode(2),\nn3 = new TreeNode(3),\nn4 = new TreeNode(4),\nn5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.ts
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nlet n1 = new TreeNode(1),\nn2 = new TreeNode(2),\nn3 = new TreeNode(3),\nn4 = new TreeNode(4),\nn5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.c
    \n
    binary_tree.cs
    /* \u521d\u59cb\u5316\u4e8c\u53c9\u6811 */\n// \u521d\u59cb\u5316\u7ed3\u70b9\nTreeNode n1 = new TreeNode(1);\nTreeNode n2 = new TreeNode(2);\nTreeNode n3 = new TreeNode(3);\nTreeNode n4 = new TreeNode(4);\nTreeNode n5 = new TreeNode(5);\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2;\nn1.right = n3;\nn2.left = n4;\nn2.right = n5;\n
    binary_tree.swift
    // \u521d\u59cb\u5316\u7ed3\u70b9\nlet n1 = TreeNode(x: 1)\nlet n2 = TreeNode(x: 2)\nlet n3 = TreeNode(x: 3)\nlet n4 = TreeNode(x: 4)\nlet n5 = TreeNode(x: 5)\n// \u6784\u5efa\u5f15\u7528\u6307\u5411\uff08\u5373\u6307\u9488\uff09\nn1.left = n2\nn1.right = n3\nn2.left = n4\nn2.right = n5\n
    binary_tree.zig
    \n

    \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u3002\u4e0e\u94fe\u8868\u7c7b\u4f3c\uff0c\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u90fd\u53ef\u4ee5\u901a\u8fc7\u4fee\u6539\u6307\u9488\u5b9e\u73b0\u3002

    Fig. \u5728\u4e8c\u53c9\u6811\u4e2d\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree.java
    TreeNode P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.cpp
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nTreeNode* P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1->left = P;\nP->left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1->left = n2;\n
    binary_tree.py
    \"\"\" \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 \"\"\"\np = TreeNode(0)\n# \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = p\np.left = n2\n# \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2\n
    binary_tree.go
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\np := NewTreeNode(0)\nn1.Left = p\np.Left = n2\n// \u5220\u9664\u7ed3\u70b9 P\nn1.Left = n2\n
    binary_tree.js
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nlet P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.ts
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nconst P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.c
    \n
    binary_tree.cs
    /* \u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9 */\nTreeNode P = new TreeNode(0);\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P;\nP.left = n2;\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2;\n
    binary_tree.swift
    let P = TreeNode(x: 0)\n// \u5728 n1 -> n2 \u4e2d\u95f4\u63d2\u5165\u7ed3\u70b9 P\nn1.left = P\nP.left = n2\n// \u5220\u9664\u7ed3\u70b9 P\nn1.left = n2\n
    binary_tree.zig
    \n

    Note

    \u63d2\u5165\u7ed3\u70b9\u4f1a\u6539\u53d8\u4e8c\u53c9\u6811\u7684\u539f\u6709\u903b\u8f91\u7ed3\u6784\uff0c\u5220\u9664\u7ed3\u70b9\u5f80\u5f80\u610f\u5473\u7740\u5220\u9664\u4e86\u8be5\u7ed3\u70b9\u7684\u6240\u6709\u5b50\u6811\u3002\u56e0\u6b64\uff0c\u4e8c\u53c9\u6811\u4e2d\u7684\u63d2\u5165\u4e0e\u5220\u9664\u4e00\u822c\u90fd\u662f\u7531\u4e00\u5957\u64cd\u4f5c\u914d\u5408\u5b8c\u6210\u7684\uff0c\u8fd9\u6837\u624d\u80fd\u5b9e\u73b0\u6709\u610f\u4e49\u7684\u64cd\u4f5c\u3002

    "},{"location":"chapter_tree/binary_tree/#713","title":"7.1.3. \u00a0 \u5e38\u89c1\u4e8c\u53c9\u6811\u7c7b\u578b","text":""},{"location":"chapter_tree/binary_tree/#_1","title":"\u5b8c\u7f8e\u4e8c\u53c9\u6811","text":"

    \u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811 Perfect Binary Tree\u300d\u7684\u6240\u6709\u5c42\u7684\u7ed3\u70b9\u90fd\u88ab\u5b8c\u5168\u586b\u6ee1\u3002\u5728\u5b8c\u7f8e\u4e8c\u53c9\u6811\u4e2d\uff0c\u6240\u6709\u7ed3\u70b9\u7684\u5ea6 = 2 \uff1b\u82e5\u6811\u9ad8\u5ea6 \\(= h\\) \uff0c\u5219\u7ed3\u70b9\u603b\u6570 \\(= 2^{h+1} - 1\\) \uff0c\u5448\u6807\u51c6\u7684\u6307\u6570\u7ea7\u5173\u7cfb\uff0c\u53cd\u6620\u7740\u81ea\u7136\u754c\u4e2d\u5e38\u89c1\u7684\u7ec6\u80de\u5206\u88c2\u3002

    Tip

    \u5728\u4e2d\u6587\u793e\u533a\u4e2d\uff0c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u5e38\u88ab\u79f0\u4e3a\u300c\u6ee1\u4e8c\u53c9\u6811\u300d\uff0c\u8bf7\u6ce8\u610f\u4e0e\u5b8c\u6ee1\u4e8c\u53c9\u6811\u533a\u5206\u3002

    Fig. \u5b8c\u7f8e\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#_2","title":"\u5b8c\u5168\u4e8c\u53c9\u6811","text":"

    \u300c\u5b8c\u5168\u4e8c\u53c9\u6811 Complete Binary Tree\u300d\u53ea\u6709\u6700\u5e95\u5c42\u7684\u7ed3\u70b9\u672a\u88ab\u586b\u6ee1\uff0c\u4e14\u6700\u5e95\u5c42\u7ed3\u70b9\u5c3d\u91cf\u9760\u5de6\u586b\u5145\u3002

    \u5b8c\u5168\u4e8c\u53c9\u6811\u975e\u5e38\u9002\u5408\u7528\u6570\u7ec4\u6765\u8868\u793a\u3002\u5982\u679c\u6309\u7167\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u7684\u987a\u5e8f\u6765\u5b58\u50a8\uff0c\u90a3\u4e48\u7a7a\u7ed3\u70b9 null \u4e00\u5b9a\u5168\u90e8\u51fa\u73b0\u5728\u5e8f\u5217\u7684\u5c3e\u90e8\uff0c\u56e0\u6b64\u6211\u4eec\u5c31\u53ef\u4ee5\u4e0d\u7528\u5b58\u50a8\u8fd9\u4e9b null \u4e86\u3002

    Fig. \u5b8c\u5168\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#_3","title":"\u5b8c\u6ee1\u4e8c\u53c9\u6811","text":"

    \u300c\u5b8c\u6ee1\u4e8c\u53c9\u6811 Full Binary Tree\u300d\u9664\u4e86\u53f6\u7ed3\u70b9\u4e4b\u5916\uff0c\u5176\u4f59\u6240\u6709\u7ed3\u70b9\u90fd\u6709\u4e24\u4e2a\u5b50\u7ed3\u70b9\u3002

    Fig. \u5b8c\u6ee1\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#_4","title":"\u5e73\u8861\u4e8c\u53c9\u6811","text":"

    \u300c\u5e73\u8861\u4e8c\u53c9\u6811 Balanced Binary Tree\u300d\u4e2d\u4efb\u610f\u7ed3\u70b9\u7684\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\u7684\u9ad8\u5ea6\u4e4b\u5dee\u7684\u7edd\u5bf9\u503c \\(\\leq 1\\) \u3002

    Fig. \u5e73\u8861\u4e8c\u53c9\u6811

    "},{"location":"chapter_tree/binary_tree/#714","title":"7.1.4. \u00a0 \u4e8c\u53c9\u6811\u7684\u9000\u5316","text":"

    \u5f53\u4e8c\u53c9\u6811\u7684\u6bcf\u5c42\u7684\u7ed3\u70b9\u90fd\u88ab\u586b\u6ee1\u65f6\uff0c\u8fbe\u5230\u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u300d\uff1b\u800c\u5f53\u6240\u6709\u7ed3\u70b9\u90fd\u504f\u5411\u4e00\u8fb9\u65f6\uff0c\u4e8c\u53c9\u6811\u9000\u5316\u4e3a\u300c\u94fe\u8868\u300d\u3002

    • \u5b8c\u7f8e\u4e8c\u53c9\u6811\u662f\u4e00\u4e2a\u4e8c\u53c9\u6811\u7684\u201c\u6700\u4f73\u72b6\u6001\u201d\uff0c\u53ef\u4ee5\u5b8c\u5168\u53d1\u6325\u51fa\u4e8c\u53c9\u6811\u201c\u5206\u6cbb\u201d\u7684\u4f18\u52bf\uff1b
    • \u94fe\u8868\u5219\u662f\u53e6\u4e00\u4e2a\u6781\u7aef\uff0c\u5404\u9879\u64cd\u4f5c\u90fd\u53d8\u4e3a\u7ebf\u6027\u64cd\u4f5c\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u9000\u5316\u81f3 \\(O(n)\\) \uff1b

    Fig. \u4e8c\u53c9\u6811\u7684\u6700\u4f73\u4e0e\u6700\u4e8c\u53c9\u6811\u7684\u6700\u4f73\u548c\u6700\u5dee\u7ed3\u6784\u5dee\u60c5\u51b5

    \u5982\u4e0b\u8868\u6240\u793a\uff0c\u5728\u6700\u4f73\u548c\u6700\u5dee\u7ed3\u6784\u4e0b\uff0c\u4e8c\u53c9\u6811\u7684\u53f6\u7ed3\u70b9\u6570\u91cf\u3001\u7ed3\u70b9\u603b\u6570\u3001\u9ad8\u5ea6\u7b49\u8fbe\u5230\u6781\u5927\u6216\u6781\u5c0f\u503c\u3002

    \u5b8c\u7f8e\u4e8c\u53c9\u6811 \u94fe\u8868 \u7b2c \\(i\\) \u5c42\u7684\u7ed3\u70b9\u6570\u91cf \\(2^{i-1}\\) \\(1\\) \u6811\u7684\u9ad8\u5ea6\u4e3a \\(h\\) \u65f6\u7684\u53f6\u7ed3\u70b9\u6570\u91cf \\(2^h\\) \\(1\\) \u6811\u7684\u9ad8\u5ea6\u4e3a \\(h\\) \u65f6\u7684\u7ed3\u70b9\u603b\u6570 \\(2^{h+1} - 1\\) \\(h + 1\\) \u6811\u7684\u7ed3\u70b9\u603b\u6570\u4e3a \\(n\\) \u65f6\u7684\u9ad8\u5ea6 \\(\\log_2 (n+1) - 1\\) \\(n - 1\\)"},{"location":"chapter_tree/binary_tree/#715","title":"7.1.5. \u00a0 \u4e8c\u53c9\u6811\u8868\u793a\u65b9\u5f0f *","text":"

    \u6211\u4eec\u4e00\u822c\u4f7f\u7528\u4e8c\u53c9\u6811\u7684\u300c\u94fe\u8868\u8868\u793a\u300d\uff0c\u5373\u5b58\u50a8\u5355\u4f4d\u4e3a\u7ed3\u70b9 TreeNode \uff0c\u7ed3\u70b9\u4e4b\u95f4\u901a\u8fc7\u6307\u9488\uff08\u5f15\u7528\uff09\u76f8\u8fde\u63a5\u3002\u672c\u6587\u524d\u8ff0\u793a\u4f8b\u4ee3\u7801\u5c55\u793a\u4e86\u4e8c\u53c9\u6811\u5728\u94fe\u8868\u8868\u793a\u4e0b\u7684\u5404\u9879\u57fa\u672c\u64cd\u4f5c\u3002

    \u90a3\u80fd\u5426\u53ef\u4ee5\u7528\u300c\u6570\u7ec4\u8868\u793a\u300d\u4e8c\u53c9\u6811\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\u3002\u5148\u6765\u5206\u6790\u4e00\u4e2a\u7b80\u5355\u6848\u4f8b\uff0c\u7ed9\u5b9a\u4e00\u4e2a\u300c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u300d\uff0c\u5c06\u7ed3\u70b9\u6309\u7167\u5c42\u5e8f\u904d\u5386\u7684\u987a\u5e8f\u7f16\u53f7\uff08\u4ece 0 \u5f00\u59cb\uff09\uff0c\u90a3\u4e48\u53ef\u4ee5\u63a8\u5bfc\u5f97\u51fa\u7236\u7ed3\u70b9\u7d22\u5f15\u4e0e\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e4b\u95f4\u7684\u300c\u6620\u5c04\u516c\u5f0f\u300d\uff1a\u8bbe\u7ed3\u70b9\u7684\u7d22\u5f15\u4e3a \\(i\\) \uff0c\u5219\u8be5\u7ed3\u70b9\u7684\u5de6\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 1\\) \u3001\u53f3\u5b50\u7ed3\u70b9\u7d22\u5f15\u4e3a \\(2i + 2\\) \u3002

    \u672c\u8d28\u4e0a\uff0c\u6620\u5c04\u516c\u5f0f\u7684\u4f5c\u7528\u5c31\u662f\u94fe\u8868\u4e2d\u7684\u6307\u9488\u3002\u5bf9\u4e8e\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u4e2d\u7684\u4efb\u610f\u7ed3\u70b9\uff0c\u6211\u4eec\u90fd\u53ef\u4ee5\u4f7f\u7528\u6620\u5c04\u516c\u5f0f\u6765\u8bbf\u95ee\u5b50\u7ed3\u70b9\u3002\u56e0\u6b64\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\uff08\u5373\u6570\u7ec4\uff09\u6765\u8868\u793a\u5b8c\u7f8e\u4e8c\u53c9\u6811\u3002

    Fig. \u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a

    \u7136\u800c\uff0c\u5b8c\u7f8e\u4e8c\u53c9\u6811\u53ea\u662f\u4e2a\u4f8b\uff0c\u4e8c\u53c9\u6811\u4e2d\u95f4\u5c42\u5f80\u5f80\u5b58\u5728\u8bb8\u591a\u7a7a\u7ed3\u70b9\uff08\u5373 null \uff09\uff0c\u800c\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u5e76\u4e0d\u5305\u542b\u8fd9\u4e9b\u7a7a\u7ed3\u70b9\uff0c\u5e76\u4e14\u6211\u4eec\u65e0\u6cd5\u5355\u51ed\u5e8f\u5217\u6765\u731c\u6d4b\u7a7a\u7ed3\u70b9\u7684\u6570\u91cf\u548c\u5206\u5e03\u4f4d\u7f6e\uff0c\u5373\u7406\u8bba\u4e0a\u5b58\u5728\u8bb8\u591a\u79cd\u4e8c\u53c9\u6811\u90fd\u7b26\u5408\u8be5\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u3002\u663e\u7136\uff0c\u8fd9\u79cd\u60c5\u51b5\u65e0\u6cd5\u4f7f\u7528\u6570\u7ec4\u6765\u5b58\u50a8\u4e8c\u53c9\u6811\u3002

    Fig. \u7ed9\u5b9a\u6570\u7ec4\u5bf9\u5e94\u591a\u79cd\u4e8c\u53c9\u6811\u53ef\u80fd\u6027

    \u4e3a\u4e86\u89e3\u51b3\u6b64\u95ee\u9898\uff0c\u8003\u8651\u6309\u7167\u5b8c\u7f8e\u4e8c\u53c9\u6811\u7684\u5f62\u5f0f\u6765\u8868\u793a\u6240\u6709\u4e8c\u53c9\u6811\uff0c\u5373\u5728\u5e8f\u5217\u4e2d\u4f7f\u7528\u7279\u6b8a\u7b26\u53f7\u6765\u663e\u5f0f\u5730\u8868\u793a\u201c\u7a7a\u4f4d\u201d\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u8fd9\u6837\u5904\u7406\u540e\uff0c\u5e8f\u5217\uff08\u6570\u7ec4\uff09\u5c31\u53ef\u4ee5\u552f\u4e00\u8868\u793a\u4e8c\u53c9\u6811\u4e86\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4f7f\u7528 int \u7684\u5305\u88c5\u7c7b Integer \uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 null \u6765\u6807\u8bb0\u7a7a\u4f4d\nInteger[] tree = { 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 };\n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4e3a\u4e86\u7b26\u5408\u6570\u636e\u7c7b\u578b\u4e3a int \uff0c\u4f7f\u7528 int \u6700\u5927\u503c\u6807\u8bb0\u7a7a\u4f4d\n// \u8be5\u65b9\u6cd5\u7684\u4f7f\u7528\u524d\u63d0\u662f\u6ca1\u6709\u7ed3\u70b9\u7684\u503c = INT_MAX\nvector<int> tree = { 1, 2, 3, 4, INT_MAX, 6, 7, 8, 9, INT_MAX, INT_MAX, 12, INT_MAX, INT_MAX, 15 };\n
    \"\"\" \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a \"\"\"\n# \u76f4\u63a5\u4f7f\u7528 None \u6765\u8868\u793a\u7a7a\u4f4d\ntree = [1, 2, 3, 4, None, 6, 7, 8, 9, None, None, 12, None, None, 15]\n
    \n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u76f4\u63a5\u4f7f\u7528 null \u6765\u8868\u793a\u7a7a\u4f4d\nlet tree = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u76f4\u63a5\u4f7f\u7528 null \u6765\u8868\u793a\u7a7a\u4f4d\nlet tree: (number | null)[] = [1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15];\n
    \n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4f7f\u7528 int? \u53ef\u7a7a\u7c7b\u578b \uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 null \u6765\u6807\u8bb0\u7a7a\u4f4d\nint?[] tree = { 1, 2, 3, 4, null, 6, 7, 8, 9, null, null, 12, null, null, 15 };\n
    /* \u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a */\n// \u4f7f\u7528 Int? \u53ef\u7a7a\u7c7b\u578b \uff0c\u5c31\u53ef\u4ee5\u4f7f\u7528 nil \u6765\u6807\u8bb0\u7a7a\u4f4d\nlet tree: [Int?] = [1, 2, 3, 4, nil, 6, 7, 8, 9, nil, nil, 12, nil, nil, 15]\n
    \n

    Fig. \u4efb\u610f\u7c7b\u578b\u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a

    \u56de\u987e\u300c\u5b8c\u5168\u4e8c\u53c9\u6811\u300d\u7684\u5b9a\u4e49\uff0c\u5176\u53ea\u6709\u6700\u5e95\u5c42\u6709\u7a7a\u7ed3\u70b9\uff0c\u5e76\u4e14\u6700\u5e95\u5c42\u7684\u7ed3\u70b9\u5c3d\u91cf\u9760\u5de6\uff0c\u56e0\u800c\u6240\u6709\u7a7a\u7ed3\u70b9\u90fd\u4e00\u5b9a\u51fa\u73b0\u5728\u5c42\u5e8f\u904d\u5386\u5e8f\u5217\u7684\u672b\u5c3e\u3002\u56e0\u4e3a\u6211\u4eec\u5148\u9a8c\u5730\u786e\u5b9a\u4e86\u7a7a\u4f4d\u7684\u4f4d\u7f6e\uff0c\u6240\u4ee5\u5728\u4f7f\u7528\u6570\u7ec4\u8868\u793a\u5b8c\u5168\u4e8c\u53c9\u6811\u65f6\uff0c\u53ef\u4ee5\u7701\u7565\u5b58\u50a8\u201c\u7a7a\u4f4d\u201d\u3002\u56e0\u6b64\uff0c\u5b8c\u5168\u4e8c\u53c9\u6811\u975e\u5e38\u9002\u5408\u4f7f\u7528\u6570\u7ec4\u6765\u8868\u793a\u3002

    Fig. \u5b8c\u5168\u4e8c\u53c9\u6811\u7684\u6570\u7ec4\u8868\u793a

    \u6570\u7ec4\u8868\u793a\u6709\u4e24\u4e2a\u4f18\u70b9\uff1a \u4e00\u662f\u4e0d\u9700\u8981\u5b58\u50a8\u6307\u9488\uff0c\u8282\u7701\u7a7a\u95f4\uff1b\u4e8c\u662f\u53ef\u4ee5\u968f\u673a\u8bbf\u95ee\u7ed3\u70b9\u3002\u7136\u800c\uff0c\u5f53\u4e8c\u53c9\u6811\u4e2d\u7684\u201c\u7a7a\u4f4d\u201d\u5f88\u591a\u65f6\uff0c\u6570\u7ec4\u4e2d\u53ea\u5305\u542b\u5f88\u5c11\u7ed3\u70b9\u7684\u6570\u636e\uff0c\u7a7a\u95f4\u5229\u7528\u7387\u5f88\u4f4e\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/","title":"7.2. \u00a0 \u4e8c\u53c9\u6811\u904d\u5386","text":"

    \u4ece\u7269\u7406\u7ed3\u6784\u89d2\u5ea6\u770b\uff0c\u6811\u662f\u4e00\u79cd\u57fa\u4e8e\u94fe\u8868\u7684\u6570\u636e\u7ed3\u6784\uff0c\u56e0\u6b64\u904d\u5386\u65b9\u5f0f\u4e5f\u662f\u901a\u8fc7\u6307\u9488\uff08\u5373\u5f15\u7528\uff09\u9010\u4e2a\u904d\u5386\u7ed3\u70b9\u3002\u540c\u65f6\uff0c\u6811\u8fd8\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u8fd9\u5bfc\u81f4\u904d\u5386\u6811\u6bd4\u904d\u5386\u94fe\u8868\u66f4\u52a0\u590d\u6742\uff0c\u9700\u8981\u4f7f\u7528\u641c\u7d22\u7b97\u6cd5\u6765\u5b9e\u73b0\u3002

    \u5e38\u89c1\u7684\u4e8c\u53c9\u6811\u904d\u5386\u65b9\u5f0f\u6709\u5c42\u5e8f\u904d\u5386\u3001\u524d\u5e8f\u904d\u5386\u3001\u4e2d\u5e8f\u904d\u5386\u3001\u540e\u5e8f\u904d\u5386\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/#721","title":"7.2.1. \u00a0 \u5c42\u5e8f\u904d\u5386","text":"

    \u300c\u5c42\u5e8f\u904d\u5386 Level-Order Traversal\u300d\u4ece\u9876\u81f3\u5e95\u3001\u4e00\u5c42\u4e00\u5c42\u5730\u904d\u5386\u4e8c\u53c9\u6811\uff0c\u5e76\u5728\u6bcf\u5c42\u4e2d\u6309\u7167\u4ece\u5de6\u5230\u53f3\u7684\u987a\u5e8f\u8bbf\u95ee\u7ed3\u70b9\u3002

    \u5c42\u5e8f\u904d\u5386\u672c\u8d28\u4e0a\u662f\u300c\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22 Breadth-First Traversal\u300d\uff0c\u5176\u4f53\u73b0\u7740\u4e00\u79cd\u201c\u4e00\u5708\u4e00\u5708\u5411\u5916\u201d\u7684\u5c42\u8fdb\u904d\u5386\u65b9\u5f0f\u3002

    Fig. \u4e8c\u53c9\u6811\u7684\u5c42\u5e8f\u904d\u5386

    "},{"location":"chapter_tree/binary_tree_traversal/#_1","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"

    \u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u4e00\u822c\u501f\u52a9\u300c\u961f\u5217\u300d\u6765\u5b9e\u73b0\u3002\u961f\u5217\u7684\u89c4\u5219\u662f\u201c\u5148\u8fdb\u5148\u51fa\u201d\uff0c\u5e7f\u5ea6\u4f18\u5148\u904d\u5386\u7684\u89c4\u5219\u662f \u201d\u4e00\u5c42\u5c42\u5e73\u63a8\u201c \uff0c\u4e24\u8005\u80cc\u540e\u7684\u601d\u60f3\u662f\u4e00\u81f4\u7684\u3002

    JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree_bfs.java
    /* \u5c42\u5e8f\u904d\u5386 */\nList<Integer> levelOrder(TreeNode root) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nQueue<TreeNode> queue = new LinkedList<>() {{ add(root); }};\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nList<Integer> list = new ArrayList<>();\nwhile (!queue.isEmpty()) {\nTreeNode node = queue.poll();  // \u961f\u5217\u51fa\u961f\nlist.add(node.val);            // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left != null)\nqueue.offer(node.left);    // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node.right != null)\nqueue.offer(node.right);   // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn list;\n}\n
    binary_tree_bfs.cpp
    /* \u5c42\u5e8f\u904d\u5386 */\nvector<int> levelOrder(TreeNode* root) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nqueue<TreeNode*> queue;\nqueue.push(root);\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nvector<int> vec;\nwhile (!queue.empty()) {\nTreeNode* node = queue.front();\nqueue.pop();                 // \u961f\u5217\u51fa\u961f\nvec.push_back(node->val);    // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node->left != nullptr)\nqueue.push(node->left);  // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node->right != nullptr)\nqueue.push(node->right); // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn vec;\n}\n
    binary_tree_bfs.py
    def level_order(root: Optional[TreeNode]) -> List[int]:\n\"\"\" \u5c42\u5e8f\u904d\u5386 \"\"\"\n# \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nqueue: Deque[TreeNode] = collections.deque()\nqueue.append(root)\n# \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nres: List[int] = []\nwhile queue:\nnode: TreeNode = queue.popleft() # \u961f\u5217\u51fa\u961f\nres.append(node.val)             # \u4fdd\u5b58\u7ed3\u70b9\u503c\nif node.left is not None:\nqueue.append(node.left)      # \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif node.right is not None:\nqueue.append(node.right)     # \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\nreturn res\n
    binary_tree_bfs.go
    /* \u5c42\u5e8f\u904d\u5386 */\nfunc levelOrder(root *TreeNode) []int {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nqueue := list.New()\nqueue.PushBack(root)\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5207\u7247\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nnums := make([]int, 0)\nfor queue.Len() > 0 {\n// poll\nnode := queue.Remove(queue.Front()).(*TreeNode)\n// \u4fdd\u5b58\u7ed3\u70b9\u503c\nnums = append(nums, node.Val)\nif node.Left != nil {\n// \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nqueue.PushBack(node.Left)\n}\nif node.Right != nil {\n// \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\nqueue.PushBack(node.Right)\n}\n}\nreturn nums\n}\n
    binary_tree_bfs.js
    /* \u5c42\u5e8f\u904d\u5386 */\nfunction levelOrder(root) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nconst queue = [root];\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nconst list = [];\nwhile (queue.length) {\nlet node = queue.shift();   // \u961f\u5217\u51fa\u961f\nlist.push(node.val);        // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left)\nqueue.push(node.left);  // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node.right)\nqueue.push(node.right); // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn list;\n}\n
    binary_tree_bfs.ts
    /* \u5c42\u5e8f\u904d\u5386 */\nfunction levelOrder(root: TreeNode | null): number[] {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nconst queue = [root];\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nconst list: number[] = [];\nwhile (queue.length) {\nlet node = queue.shift() as TreeNode; // \u961f\u5217\u51fa\u961f\nlist.push(node.val); // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left) {\nqueue.push(node.left); // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\n}\nif (node.right) {\nqueue.push(node.right); // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\n}\nreturn list;\n}\n
    binary_tree_bfs.c
    [class]{}-[func]{levelOrder}\n
    binary_tree_bfs.cs
    /* \u5c42\u5e8f\u904d\u5386 */\nList<int> levelOrder(TreeNode root)\n{\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nQueue<TreeNode> queue = new();\nqueue.Enqueue(root);\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nList<int> list = new();\nwhile (queue.Count != 0)\n{\nTreeNode node = queue.Dequeue(); // \u961f\u5217\u51fa\u961f\nlist.Add(node.val);              // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left != null)\nqueue.Enqueue(node.left);    // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\nif (node.right != null)\nqueue.Enqueue(node.right);   // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\nreturn list;\n}\n
    binary_tree_bfs.swift
    /* \u5c42\u5e8f\u904d\u5386 */\nfunc levelOrder(root: TreeNode) -> [Int] {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nvar queue: [TreeNode] = [root]\n// \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nvar list: [Int] = []\nwhile !queue.isEmpty {\nlet node = queue.removeFirst() // \u961f\u5217\u51fa\u961f\nlist.append(node.val) // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif let left = node.left {\nqueue.append(left) // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\n}\nif let right = node.right {\nqueue.append(right) // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}\n}\nreturn list\n}\n
    binary_tree_bfs.zig
    // \u5c42\u5e8f\u904d\u5386\nfn levelOrder(comptime T: type, mem_allocator: std.mem.Allocator, root: *inc.TreeNode(T)) !std.ArrayList(T) {\n// \u521d\u59cb\u5316\u961f\u5217\uff0c\u52a0\u5165\u6839\u7ed3\u70b9\nconst L = std.TailQueue(*inc.TreeNode(T));\nvar queue = L{};\nvar root_node = try mem_allocator.create(L.Node);\nroot_node.data = root;\nqueue.append(root_node); // \u521d\u59cb\u5316\u4e00\u4e2a\u5217\u8868\uff0c\u7528\u4e8e\u4fdd\u5b58\u904d\u5386\u5e8f\u5217\nvar list = std.ArrayList(T).init(std.heap.page_allocator);\nwhile (queue.len > 0) {\nvar queue_node = queue.popFirst().?;    // \u961f\u5217\u51fa\u961f\nvar node = queue_node.data;\ntry list.append(node.val);              // \u4fdd\u5b58\u7ed3\u70b9\u503c\nif (node.left != null) {\nvar tmp_node = try mem_allocator.create(L.Node);\ntmp_node.data = node.left.?;\nqueue.append(tmp_node);             // \u5de6\u5b50\u7ed3\u70b9\u5165\u961f\n}\nif (node.right != null) {\nvar tmp_node = try mem_allocator.create(L.Node);\ntmp_node.data = node.right.?;\nqueue.append(tmp_node);             // \u53f3\u5b50\u7ed3\u70b9\u5165\u961f\n}        }\nreturn list;\n}\n
    "},{"location":"chapter_tree/binary_tree_traversal/#_2","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u6240\u6709\u7ed3\u70b9\u88ab\u8bbf\u95ee\u4e00\u6b21\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff0c\u5176\u4e2d \\(n\\) \u4e3a\u7ed3\u70b9\u6570\u91cf\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a\u5f53\u4e3a\u6ee1\u4e8c\u53c9\u6811\u65f6\u8fbe\u5230\u6700\u5dee\u60c5\u51b5\uff0c\u904d\u5386\u5230\u6700\u5e95\u5c42\u524d\uff0c\u961f\u5217\u4e2d\u6700\u591a\u540c\u65f6\u5b58\u5728 \\(\\frac{n + 1}{2}\\) \u4e2a\u7ed3\u70b9\uff0c\u4f7f\u7528 \\(O(n)\\) \u7a7a\u95f4\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/#722","title":"7.2.2. \u00a0 \u524d\u5e8f\u3001\u4e2d\u5e8f\u3001\u540e\u5e8f\u904d\u5386","text":"

    \u76f8\u5bf9\u5730\uff0c\u524d\u3001\u4e2d\u3001\u540e\u5e8f\u904d\u5386\u7686\u5c5e\u4e8e\u300c\u6df1\u5ea6\u4f18\u5148\u904d\u5386 Depth-First Traversal\u300d\uff0c\u5176\u4f53\u73b0\u7740\u4e00\u79cd\u201c\u5148\u8d70\u5230\u5c3d\u5934\uff0c\u518d\u56de\u5934\u7ee7\u7eed\u201d\u7684\u56de\u6eaf\u904d\u5386\u65b9\u5f0f\u3002

    \u5982\u4e0b\u56fe\u6240\u793a\uff0c\u5de6\u4fa7\u662f\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u7684\u7684\u793a\u610f\u56fe\uff0c\u53f3\u4e0a\u65b9\u662f\u5bf9\u5e94\u7684\u9012\u5f52\u5b9e\u73b0\u4ee3\u7801\u3002\u6df1\u5ea6\u4f18\u5148\u904d\u5386\u5c31\u50cf\u662f\u7ed5\u7740\u6574\u4e2a\u4e8c\u53c9\u6811\u7684\u5916\u56f4\u201c\u8d70\u201d\u4e00\u5708\uff0c\u8d70\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5728\u6bcf\u4e2a\u7ed3\u70b9\u90fd\u4f1a\u9047\u5230\u4e09\u4e2a\u4f4d\u7f6e\uff0c\u5206\u522b\u5bf9\u5e94\u524d\u5e8f\u904d\u5386\u3001\u4e2d\u5e8f\u904d\u5386\u3001\u540e\u5e8f\u904d\u5386\u3002

    Fig. \u4e8c\u53c9\u641c\u7d22\u6811\u7684\u524d\u3001\u4e2d\u3001\u540e\u5e8f\u904d\u5386

    \u4f4d\u7f6e \u542b\u4e49 \u6b64\u5904\u8bbf\u95ee\u7ed3\u70b9\u65f6\u5bf9\u5e94 \u6a59\u8272\u5706\u5708\u5904 \u521a\u8fdb\u5165\u6b64\u7ed3\u70b9\uff0c\u5373\u5c06\u8bbf\u95ee\u8be5\u7ed3\u70b9\u7684\u5de6\u5b50\u6811 \u524d\u5e8f\u904d\u5386 Pre-Order Traversal \u84dd\u8272\u5706\u5708\u5904 \u5df2\u8bbf\u95ee\u5b8c\u5de6\u5b50\u6811\uff0c\u5373\u5c06\u8bbf\u95ee\u53f3\u5b50\u6811 \u4e2d\u5e8f\u904d\u5386 In-Order Traversal \u7d2b\u8272\u5706\u5708\u5904 \u5df2\u8bbf\u95ee\u5b8c\u5de6\u5b50\u6811\u548c\u53f3\u5b50\u6811\uff0c\u5373\u5c06\u8fd4\u56de \u540e\u5e8f\u904d\u5386 Post-Order Traversal"},{"location":"chapter_tree/binary_tree_traversal/#_3","title":"\u7b97\u6cd5\u5b9e\u73b0","text":"JavaC++PythonGoJavaScriptTypeScriptCC#SwiftZig binary_tree_dfs.java
    /* \u524d\u5e8f\u904d\u5386 */\nvoid preOrder(TreeNode root) {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.add(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nvoid inOrder(TreeNode root) {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.add(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nvoid postOrder(TreeNode root) {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.add(root.val);\n}\n
    binary_tree_dfs.cpp
    /* \u524d\u5e8f\u904d\u5386 */\nvoid preOrder(TreeNode* root) {\nif (root == nullptr) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nvec.push_back(root->val);\npreOrder(root->left);\npreOrder(root->right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nvoid inOrder(TreeNode* root) {\nif (root == nullptr) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root->left);\nvec.push_back(root->val);\ninOrder(root->right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nvoid postOrder(TreeNode* root) {\nif (root == nullptr) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root->left);\npostOrder(root->right);\nvec.push_back(root->val);\n}\n
    binary_tree_dfs.py
    def pre_order(root: Optional[TreeNode]) -> None:\n\"\"\" \u524d\u5e8f\u904d\u5386 \"\"\"\nif root is None:\nreturn\n# \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nres.append(root.val)\npre_order(root=root.left)\npre_order(root=root.right)\ndef in_order(root: Optional[TreeNode]) -> None:\n\"\"\" \u4e2d\u5e8f\u904d\u5386 \"\"\"\nif root is None:\nreturn\n# \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\nin_order(root=root.left)\nres.append(root.val)\nin_order(root=root.right)\ndef post_order(root: Optional[TreeNode]) -> None:\n\"\"\" \u540e\u5e8f\u904d\u5386 \"\"\"\nif root is None:\nreturn\n# \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npost_order(root=root.left)\npost_order(root=root.right)\nres.append(root.val)\n
    binary_tree_dfs.go
    /* \u524d\u5e8f\u904d\u5386 */\nfunc preOrder(node *TreeNode) {\nif node == nil {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nnums = append(nums, node.Val)\npreOrder(node.Left)\npreOrder(node.Right)\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunc inOrder(node *TreeNode) {\nif node == nil {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(node.Left)\nnums = append(nums, node.Val)\ninOrder(node.Right)\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunc postOrder(node *TreeNode) {\nif node == nil {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(node.Left)\npostOrder(node.Right)\nnums = append(nums, node.Val)\n}\n
    binary_tree_dfs.js
    /* \u524d\u5e8f\u904d\u5386 */\nfunction preOrder(root) {\nif (root === null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.push(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunction inOrder(root) {\nif (root === null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.push(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunction postOrder(root) {\nif (root === null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.push(root.val);\n}\n
    binary_tree_dfs.ts
    /* \u524d\u5e8f\u904d\u5386 */\nfunction preOrder(root: TreeNode | null): void {\nif (root === null) {\nreturn;\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.push(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunction inOrder(root: TreeNode | null): void {\nif (root === null) {\nreturn;\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.push(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunction postOrder(root: TreeNode | null): void {\nif (root === null) {\nreturn;\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.push(root.val);\n}\n
    binary_tree_dfs.c
    [class]{}-[func]{preOrder}\n[class]{}-[func]{inOrder}\n[class]{}-[func]{postOrder}\n
    binary_tree_dfs.cs
    /* \u524d\u5e8f\u904d\u5386 */\nvoid preOrder(TreeNode? root)\n{\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.Add(root.val);\npreOrder(root.left);\npreOrder(root.right);\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nvoid inOrder(TreeNode? root)\n{\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root.left);\nlist.Add(root.val);\ninOrder(root.right);\n}\n/* \u540e\u5e8f\u904d\u5386 */\nvoid postOrder(TreeNode? root)\n{\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root.left);\npostOrder(root.right);\nlist.Add(root.val);\n}\n
    binary_tree_dfs.swift
    /* \u524d\u5e8f\u904d\u5386 */\nfunc preOrder(root: TreeNode?) {\nguard let root = root else {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\nlist.append(root.val)\npreOrder(root: root.left)\npreOrder(root: root.right)\n}\n/* \u4e2d\u5e8f\u904d\u5386 */\nfunc inOrder(root: TreeNode?) {\nguard let root = root else {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ninOrder(root: root.left)\nlist.append(root.val)\ninOrder(root: root.right)\n}\n/* \u540e\u5e8f\u904d\u5386 */\nfunc postOrder(root: TreeNode?) {\nguard let root = root else {\nreturn\n}\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\npostOrder(root: root.left)\npostOrder(root: root.right)\nlist.append(root.val)\n}\n
    binary_tree_dfs.zig
    // \u524d\u5e8f\u904d\u5386\nfn preOrder(comptime T: type, root: ?*inc.TreeNode(T)) !void {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u6839\u7ed3\u70b9 -> \u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811\ntry list.append(root.?.val);\ntry preOrder(T, root.?.left);\ntry preOrder(T, root.?.right);\n}\n// \u4e2d\u5e8f\u904d\u5386\nfn inOrder(comptime T: type, root: ?*inc.TreeNode(T)) !void {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u6839\u7ed3\u70b9 -> \u53f3\u5b50\u6811\ntry inOrder(T, root.?.left);\ntry list.append(root.?.val);\ntry inOrder(T, root.?.right);\n}\n// \u540e\u5e8f\u904d\u5386\nfn postOrder(comptime T: type, root: ?*inc.TreeNode(T)) !void {\nif (root == null) return;\n// \u8bbf\u95ee\u4f18\u5148\u7ea7\uff1a\u5de6\u5b50\u6811 -> \u53f3\u5b50\u6811 -> \u6839\u7ed3\u70b9\ntry postOrder(T, root.?.left);\ntry postOrder(T, root.?.right);\ntry list.append(root.?.val);\n}\n

    Note

    \u4f7f\u7528\u5faa\u73af\u4e00\u6837\u53ef\u4ee5\u5b9e\u73b0\u524d\u3001\u4e2d\u3001\u540e\u5e8f\u904d\u5386\uff0c\u4f46\u4ee3\u7801\u76f8\u5bf9\u7e41\u7410\uff0c\u6709\u5174\u8da3\u7684\u540c\u5b66\u53ef\u4ee5\u81ea\u884c\u5b9e\u73b0\u3002

    "},{"location":"chapter_tree/binary_tree_traversal/#_4","title":"\u590d\u6742\u5ea6\u5206\u6790","text":"

    \u65f6\u95f4\u590d\u6742\u5ea6\uff1a\u6240\u6709\u7ed3\u70b9\u88ab\u8bbf\u95ee\u4e00\u6b21\uff0c\u4f7f\u7528 \\(O(n)\\) \u65f6\u95f4\uff0c\u5176\u4e2d \\(n\\) \u4e3a\u7ed3\u70b9\u6570\u91cf\u3002

    \u7a7a\u95f4\u590d\u6742\u5ea6\uff1a\u5f53\u6811\u9000\u5316\u4e3a\u94fe\u8868\u65f6\u8fbe\u5230\u6700\u5dee\u60c5\u51b5\uff0c\u9012\u5f52\u6df1\u5ea6\u8fbe\u5230 \\(n\\) \uff0c\u7cfb\u7edf\u4f7f\u7528 \\(O(n)\\) \u6808\u5e27\u7a7a\u95f4\u3002

    "},{"location":"chapter_tree/summary/","title":"7.5. \u00a0 \u5c0f\u7ed3","text":""},{"location":"chapter_tree/summary/#_1","title":"\u4e8c\u53c9\u6811","text":"
    • \u4e8c\u53c9\u6811\u662f\u4e00\u79cd\u975e\u7ebf\u6027\u6570\u636e\u7ed3\u6784\uff0c\u4ee3\u8868\u7740\u201c\u4e00\u5206\u4e3a\u4e8c\u201d\u7684\u5206\u6cbb\u903b\u8f91\u3002\u4e8c\u53c9\u6811\u7684\u7ed3\u70b9\u5305\u542b\u300c\u503c\u300d\u548c\u4e24\u4e2a\u300c\u6307\u9488\u300d\uff0c\u5206\u522b\u6307\u5411\u5de6\u5b50\u7ed3\u70b9\u548c\u53f3\u5b50\u7ed3\u70b9\u3002
    • \u9009\u5b9a\u4e8c\u53c9\u6811\u4e2d\u67d0\u7ed3\u70b9\uff0c\u5c06\u5176\u5de6\uff08\u53f3\uff09\u5b50\u7ed3\u70b9\u4ee5\u4e0b\u5f62\u6210\u7684\u6811\u79f0\u4e3a\u5de6\uff08\u53f3\uff09\u5b50\u6811\u3002
    • \u4e8c\u53c9\u6811\u7684\u672f\u8bed\u8f83\u591a\uff0c\u5305\u62ec\u6839\u7ed3\u70b9\u3001\u53f6\u7ed3\u70b9\u3001\u5c42\u3001\u5ea6\u3001\u8fb9\u3001\u9ad8\u5ea6\u3001\u6df1\u5ea6\u7b49\u3002
    • \u4e8c\u53c9\u6811\u7684\u521d\u59cb\u5316\u3001\u7ed3\u70b9\u63d2\u5165\u3001\u7ed3\u70b9\u5220\u9664\u64cd\u4f5c\u4e0e\u94fe\u8868\u7684\u64cd\u4f5c\u65b9\u6cd5\u7c7b\u4f3c\u3002
    • \u5e38\u89c1\u7684\u4e8c\u53c9\u6811\u7c7b\u578b\u5305\u62ec\u5b8c\u7f8e\u4e8c\u53c9\u6811\u3001\u5b8c\u5168\u4e8c\u53c9\u6811\u3001\u5b8c\u6ee1\u4e8c\u53c9\u6811\u3001\u5e73\u8861\u4e8c\u53c9\u6811\u3002\u5b8c\u7f8e\u4e8c\u53c9\u6811\u662f\u7406\u60f3\u72b6\u6001\uff0c\u94fe\u8868\u5219\u662f\u9000\u5316\u540e\u7684\u6700\u5dee\u72b6\u6001\u3002
    • \u4e8c\u53c9\u6811\u53ef\u4ee5\u4f7f\u7528\u6570\u7ec4\u8868\u793a\uff0c\u5177\u4f53\u505a\u6cd5\u662f\u5c06\u7ed3\u70b9\u503c\u548c\u7a7a\u4f4d\u6309\u7167\u5c42\u5e8f\u904d\u5386\u7684\u987a\u5e8f\u6392\u5217\uff0c\u5e76\u57fa\u4e8e\u7236\u7ed3\u70b9\u548c\u5b50\u7ed3\u70b9\u4e4b\u95f4\u7684\u7d22\u5f15\u6620\u5c04\u516c\u5f0f\u5b9e\u73b0\u6307\u9488\u3002
    "},{"location":"chapter_tree/summary/#_2","title":"\u4e8c\u53c9\u6811\u904d\u5386","text":"
    • \u4e8c\u53c9\u6811\u5c42\u5e8f\u904d\u5386\u662f\u4e00\u79cd\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22\uff0c\u4f53\u73b0\u7740\u201c\u4e00\u5708\u4e00\u5708\u5411\u5916\u201d\u7684\u5c42\u8fdb\u5f0f\u904d\u5386\u65b9\u5f0f\uff0c\u901a\u5e38\u501f\u52a9\u961f\u5217\u6765\u5b9e\u73b0\u3002
    • \u524d\u5e8f\u3001\u4e2d\u5e8f\u3001\u540e\u5e8f\u904d\u5386\u662f\u6df1\u5ea6\u4f18\u5148\u641c\u7d22\uff0c\u4f53\u73b0\u7740\u201c\u8d70\u5230\u5934\u3001\u518d\u56de\u5934\u7ee7\u7eed\u201d\u7684\u56de\u6eaf\u904d\u5386\u65b9\u5f0f\uff0c\u901a\u5e38\u4f7f\u7528\u9012\u5f52\u5b9e\u73b0\u3002
    "},{"location":"chapter_tree/summary/#_3","title":"\u4e8c\u53c9\u641c\u7d22\u6811","text":"
    • \u4e8c\u53c9\u641c\u7d22\u6811\u662f\u4e00\u79cd\u9ad8\u6548\u7684\u5143\u7d20\u67e5\u627e\u6570\u636e\u7ed3\u6784\uff0c\u67e5\u627e\u3001\u63d2\u5165\u3001\u5220\u9664\u64cd\u4f5c\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u7686\u4e3a \\(O(\\log n)\\) \u3002\u4e8c\u53c9\u641c\u7d22\u6811\u9000\u5316\u4e3a\u94fe\u8868\u540e\uff0c\u5404\u9879\u65f6\u95f4\u590d\u6742\u5ea6\u52a3\u5316\u81f3 \\(O(n)\\) \uff0c\u56e0\u6b64\u5982\u4f55\u907f\u514d\u9000\u5316\u662f\u975e\u5e38\u91cd\u8981\u7684\u8bfe\u9898\u3002
    • AVL \u6811\u53c8\u79f0\u5e73\u8861\u4e8c\u53c9\u641c\u7d22\u6811\uff0c\u5176\u901a\u8fc7\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u5f97\u5728\u4e0d\u65ad\u63d2\u5165\u4e0e\u5220\u9664\u7ed3\u70b9\u540e\uff0c\u4ecd\u7136\u53ef\u4ee5\u4fdd\u6301\u4e8c\u53c9\u6811\u7684\u5e73\u8861\uff08\u4e0d\u9000\u5316\uff09\u3002
    • AVL \u6811\u7684\u65cb\u8f6c\u64cd\u4f5c\u5206\u4e3a\u53f3\u65cb\u3001\u5de6\u65cb\u3001\u5148\u53f3\u65cb\u540e\u5de6\u65cb\u3001\u5148\u5de6\u65cb\u540e\u53f3\u65cb\u3002\u5728\u63d2\u5165\u6216\u5220\u9664\u7ed3\u70b9\u540e\uff0cAVL \u6811\u4f1a\u4ece\u5e95\u81f3\u9876\u5730\u6267\u884c\u65cb\u8f6c\u64cd\u4f5c\uff0c\u4f7f\u6811\u6062\u590d\u5e73\u8861\u3002
    "}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index eee8d28c2..9fa71b8bf 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,257 +2,257 @@ https://www.hello-algo.com/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_appendix/contribution/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_appendix/installation/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_array_and_linkedlist/array/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_array_and_linkedlist/linked_list/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_array_and_linkedlist/list/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_array_and_linkedlist/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_computational_complexity/performance_evaluation/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_computational_complexity/space_complexity/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_computational_complexity/space_time_tradeoff/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_computational_complexity/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_computational_complexity/time_complexity/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_data_structure/classification_of_data_structure/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_data_structure/data_and_memory/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_data_structure/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_graph/graph/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_graph/graph_operations/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_graph/graph_traversal/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_graph/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_hashing/hash_collision/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_hashing/hash_map/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_hashing/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_heap/build_heap/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_heap/heap/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_heap/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_introduction/algorithms_are_everywhere/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_introduction/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_introduction/what_is_dsa/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_preface/about_the_book/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_preface/suggestions/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_preface/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_reference/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_searching/binary_search/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_searching/hashing_search/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_searching/linear_search/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_searching/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_sorting/bubble_sort/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_sorting/insertion_sort/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_sorting/intro_to_sort/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_sorting/merge_sort/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_sorting/quick_sort/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_sorting/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_stack_and_queue/deque/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_stack_and_queue/queue/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_stack_and_queue/stack/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_stack_and_queue/summary/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_tree/avl_tree/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_tree/binary_search_tree/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_tree/binary_tree/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_tree/binary_tree_traversal/ - 2023-03-12 + 2023-03-13 daily https://www.hello-algo.com/chapter_tree/summary/ - 2023-03-12 + 2023-03-13 daily \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index 5fa21d38b1feb1dfa15193c30e34a7876300fd42..7502886b6f6d9fa93e02d9c3ae54c134f46fa8e4 100644 GIT binary patch delta 30 mcmeyx@{5ICzMF$1Rf~Tj`*z0ujr%t