From e9c6d0741be04dd18d4a2683c11517a88a5c448d Mon Sep 17 00:00:00 2001 From: yennanliu Date: Sat, 14 Dec 2024 11:05:00 +0800 Subject: [PATCH] add 523 java --- README.md | 2 +- data/progress.txt | 3 +- data/to_review.txt | 15 +- doc/pic/presum_mod.png | Bin 0 -> 34063 bytes .../HashTable/ContinuousSubarraySum.java | 150 ++++++++++++++++++ .../src/main/java/dev/workspace5.java | 46 ++++++ 6 files changed, 208 insertions(+), 8 deletions(-) create mode 100644 doc/pic/presum_mod.png create mode 100644 leetcode_java/src/main/java/LeetCodeJava/HashTable/ContinuousSubarraySum.java diff --git a/README.md b/README.md index 09639459..0f16d650 100644 --- a/README.md +++ b/README.md @@ -367,7 +367,7 @@ 463| [Island Perimeter](https://leetcode.com/problems/island-perimeter/)|[Python ](./leetcode_python/Hash_table/island_perimeter.py) | _O(n)_ | _O(k)_ | Medium |`basic`,`hash table`, `google`, `fb`, amazon| AGAIN** (2) 470| [Implement Rand10() Using Rand7()](https://leetcode.com/problems/implement-rand10-using-rand7/) | [Python ](./leetcode_python/Hash_table/implement-rand10-using-rand7.py) | _O(1)_ | _O(1)_ | Medium |`trick`, `google`| AGAIN** (3) 473| [Matchsticks to Square](https://leetcode.com/problems/matchsticks-to-square/) | [Python ](./leetcode_python/Hash_table/matchsticks-to-square.py) | _O(n * s * 2^n)_ | _O(n * (2^n + s))_ | Medium |`complex`,`hard`| AGAIN (not start) -523| [Continuous Subarray Sum](https://leetcode.com/problems/continuous-subarray-sum/) | [Python ](./leetcode_python/Hash_table/continuous-subarray-sum.py) | _O(n)_ | _O(k)_ | Medium |sub array sum, check `# 560 Subarray Sum Equals K`,`good trick`,`substring`, `hash table`,`AGAIN`,`M$`,`fb`, `apple`| AGAIN*************** (10) (MUST) +523| [Continuous Subarray Sum](https://leetcode.com/problems/continuous-subarray-sum/) | [Python ](./leetcode_python/Hash_table/continuous-subarray-sum.py), [Java](./leetcode_java/src/main/java/LeetCodeJava/HashTable/ContinuousSubarraySum.java) | _O(n)_ | _O(k)_ | Medium |sub array sum, check `# 560 Subarray Sum Equals K`,`good trick`,`substring`, `hash table`,`AGAIN`,`M$`,`fb`, `apple`| AGAIN*************** (10) (MUST) 525| [Contiguous Array](https://leetcode.com/problems/contiguous-array/) | [Python](./leetcode_python/Hash_table/contiguous-array.py) | _O(n)_ | _O(n)_ | Medium | sub-array sum, `good basic`, `array`, `hashmap`, `cache`, `AGAIN`, `fb`, amazon| AGAIN*************** (11) (MUST) 532| [K-diff Pairs in an Array](https://leetcode.com/problems/k-diff-pairs-in-an-array/) | [Python ](./leetcode_python/Hash_table/k-diff-pairs-in-an-array.py) | _O(n)_ | _O(n)_ | Medium |hash table, `basic`, `collections.Counter()`,`a-b =k -> a = k + b `, `amazon`| AGAIN********** (6) 554| [Brick Wall](https://leetcode.com/problems/brick-wall/) | [Python ](./leetcode_python/Hash_table/brick-wall.py) | _O(n)_ | _O(m)_ | Medium |`trick`,`hash map`, `bloomberg`, `fb`, grab | AGAIN******** (5) diff --git a/data/progress.txt b/data/progress.txt index ab8e2fbc..228d7ca5 100644 --- a/data/progress.txt +++ b/data/progress.txt @@ -1,4 +1,5 @@ -20241208: 304,853,325,560(todo) +20241214: 560(todo),523(todo) +20241208: 304,853,325 20241202: 370(todo),1109(todo) 20241130: 34,767 20241126: 722,380 diff --git a/data/to_review.txt b/data/to_review.txt index 523f56ee..ff532b9f 100644 --- a/data/to_review.txt +++ b/data/to_review.txt @@ -1,32 +1,35 @@ +2025-02-07 -> ['560(todo),523(todo)'] 2025-02-01 -> ['304,853,325'] 2025-01-26 -> ['370(todo),1109(todo)'] 2025-01-24 -> ['34,767'] 2025-01-20 -> ['722,380'] 2025-01-19 -> ['33,81'] -2025-01-17 -> ['253'] +2025-01-17 -> ['560(todo),523(todo)', '253'] 2025-01-16 -> ['776,31'] 2025-01-15 -> ['004(todo),34(todo),162(todo),275(todo)'] 2025-01-14 -> ['986(todo),1229(todo),1868(todo),80(todo),209(todo),283(todo),360(todo),713(todo),532(todo),611(todo)'] 2025-01-11 -> ['304,853,325', '394'] 2025-01-10 -> ['833,950'] 2025-01-05 -> ['370(todo),1109(todo)'] -2025-01-04 -> ['53,210,207'] +2025-01-04 -> ['560(todo),523(todo)', '53,210,207'] 2025-01-03 -> ['34,767', '444'] 2025-01-02 -> ['1188,130,855(again)'] 2024-12-30 -> ['722,380'] 2024-12-29 -> ['304,853,325', '33,81'] 2024-12-28 -> ['900'] -2024-12-27 -> ['253', '26,27', '802,1197,26'] +2024-12-27 -> ['560(todo),523(todo)', '253', '26,27', '802,1197,26'] 2024-12-26 -> ['776,31'] 2024-12-25 -> ['004(todo),34(todo),162(todo),275(todo)'] 2024-12-24 -> ['986(todo),1229(todo),1868(todo),80(todo),209(todo),283(todo),360(todo),713(todo),532(todo),611(todo)'] 2024-12-23 -> ['370(todo),1109(todo)'] +2024-12-22 -> ['560(todo),523(todo)'] 2024-12-21 -> ['304,853,325', '34,767', '394', '855,846'] 2024-12-20 -> ['833,950', '932'] +2024-12-19 -> ['560(todo),523(todo)'] 2024-12-18 -> ['951,792'] -2024-12-17 -> ['722,380'] -2024-12-16 -> ['304,853,325', '33,81'] -2024-12-15 -> ['370(todo),1109(todo)'] +2024-12-17 -> ['560(todo),523(todo)', '722,380'] +2024-12-16 -> ['560(todo),523(todo)', '304,853,325', '33,81'] +2024-12-15 -> ['560(todo),523(todo)', '370(todo),1109(todo)'] 2024-12-14 -> ['253', '53,210,207', '163,1048'] 2024-12-13 -> ['304,853,325', '34,767', '776,31', '444', '298,729'] 2024-12-12 -> ['004(todo),34(todo),162(todo),275(todo)', '1188,130,855(again)', '1146'] diff --git a/doc/pic/presum_mod.png b/doc/pic/presum_mod.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6befbeab91575a28553283915b3b0aa93585cb GIT binary patch literal 34063 zcmd42WmKH850;RaSYm2+PySuwfi#tV2ad&rz; zIZ1T%@dL(OSXLMUq9z{c#qgskWTAqLiun8c`(K26e0)DMb4F6q)6)|U4lW`hqPe-5m6cUj zS65I_aAaiUqoJ*>ZAV9kq@*Md4^MV>c4}&>k&%&*kdVK>|6zXq)$nj|aBy^VG(A0i zU0vNI4^LH96&@bm{{H?5CFN#t@Xhoz$lH4>BI5b#>V9=~+5BIbo}SLk%rrDK1aJH+ zS65dHT3W@$#eZdF&O174YisvXQ>VqmWMpJiR8%S|D$bglPpYbRlah9S{@jj^9v&V( zDlQ)R^5wLy?s8z@ZgKIXwsuZM#mvlX&DnXy+Is&Ktl&K)=F~6cI)Mohvfz7d=nE^@z6W#*s%UQ<+ew=7#+23^+GQpF^-YeXOKa$>hVGzzXsog zvFO!|*N6N%9m}+cWuB2D-p4l{?ZSn;NI;_Xey3|a6gM0(JX}7i^o_oBvBc8U%%ne# zxXbM{V*Jm_ClPqE5cL1?xGLbv#wU5L-R=r&d-i(_@<{jEVC;NeR=#;NsNuS~vE<8* z6HKTZ=*YG0?;@J8d%bN*|4oyYV+0jG#c!2U%cf)D zY+zR6$DAIS0VQ9P_`RIDD__utW7L{AG^dca)iuqxwrpm>RiCCUcfO|!MwDgK>?}v} zP*=>4qvK-z9)HRb0MIJAPk3_DIv3AI_{ z6NyI;hRo-Q#m{Kkr3#TG*iIZ1RXo0&Z7ZW8>0m(Ph1Dl^*c_v>?>dWO-s*MnDCTYj z?Tyy+C5LfLa3t>oQ#~3df7Sn7B)dX*a~+1Ar41dfN5A-Z>GO3#j(^afJ@TmG0@rbz zoL3osziumWh$qkiJcA=DIdo@-lFoj}Uc&GRyT1g%ExSlVIX(mJA^Bd+SFn96yv%`{ zv!3ddnkk7b`Z`a`m4V*Of96}Ct!Q)fd}JyD8a$2JM0 zqJJ$^BlcNy^WRy%ee)Thrgp^zX>BQSp*;JPaV}$C5oB{*L0_iHhND>Jbt=)`Y$XZ(4io~~B5f}Bt%h&Sme_L>||AQbHtu*F>@yr zs-B|+q%zo}uo=3@lapkFyftdAVXz3PzgAxL7U3=aa_P@kjEPgB+SFEC2g2*lHXd*4 z^OUjuFrRIUv$3fHn;=3zcPtJ42giAAjCjGE<^_%>$kd(fTRwrOb z3KKF~I}`ejX2&E&^+g&8AIzefvFOpPvG(i=g4ht{RYgq#=ga`iB3KQ!;JsbFD<|gk z%PdJ3o2*NDLb3BS-y|r_zTX}*QJ}n~l%jc>`i|1n8h^h1LHgo-Na5<~qzhe|a2hwk zaE~pz>{{p5h${|7bklrRjiSulJv7y^us$@fp;2BiZGyhQZd-;r-3kqQ=P}qEyp_AZ znDOFlyS(?3FJ6LXI|=kNT;F6EPc_%H)?1+(KjzaYp4R-E)TyC!nti!BWU_@mux*6c z^t-x+kBb_>QL=4zoM~Mv3{k&tnw|odyH^|L%-I9`?rtqjYN!Yb^l_LFUm{eo5t*wmTKweVr4dkCSs}v33P~<54D=uG}_oEnRg4?2tpq%_Ei@L zDsA*&f#Q(qci6r<)}yit_-zM>e3OUwy0P%EE88kGloXWlaBhE85@-Vkshod;l$WEP>CM5+snY^SwqWoRf1GDtd-dLuUp z5Jrufgh)+q+?-BAwO=r(e8m}I{X@dMz%u*FdA1AHX%nwZSsJ+wTL4J{hHo^unC_c}5L_(q+ ze5qtcu}{u-wTwMX^@P|4Q&rWXk_xtH&3dSHc>h;ekAMZq8TF;I4u1!7nH&6-t`0Bvo!0#J@SX)j) z#|D&P5!N|Sv-FlIgwk1@uKyI-Lt`Q!ygYNw#mqDg57LZg2wOLMTk}Jl@!$ry{Q00W|7A2_2Zxt>=to^vqiSDmP7<+n9AeuZ4 zcD5}5W@Ny9^#v$lebU4)(T(hL)esddV7D>SD=mdKbtC&5TQ(`cq6MUe^KwTkqHD!F zUWDWA`20_}<4n7hPbd&UQKf%ubZ;7zyz1@O|Ckczx%w_vputFLIq%dR>q>BR45`uc z7HvW5X|Y~MrY1H}dkt*&ALKf zd!6Y96;c(Q7~xD%Jpu%POzk$J{9qPD;R2vRxnos{!%uc0haPV7v%-K%@kMr|S^)tp z^I?ksGk!L96qTnG>?HD5%JMOLcfw>YwQzR4;3ASO4+dRjUU4@vC6FZCm@zDTzYzG< z#)`33Bg3FQUz&Ia+4YsC=(mk9yRc@E$16Vgg-vl(vUq|35`~)KK=bb0bqk}zU2Z=v zd7XJ9dUC4`ItEv_Jzvs&XdJ@Lu2;4Xx62=&q>X4DpMm^1Yb72FLCaG?#$fT; z5uvhA(-+lcFD1_=#mFK|Yd)cvS}$>nejO!c!04&ZUhnz7uSp)CINJC8j?DX3JYAAm z{E63ojzawl|GxY!W%J0Tl%*sUUmUMeIx+giBo49%+c! zy0DkS@ZMG=yw+-2#uM<;Tep&BKHs(&>fDhkIWfg~9y3lbkb>mQVRs8?2#mz@?{h<- z|3SP1()Vaz^t6NcDT24aI$p*WVBXnH`-Fl&OvMGMF}0~teD=A&?pnaa$DYqnOycxt zdekS7Ed9#Ql|n_$!B+aaFpVcE%;0xvcDuV@Q|C-z&)=V3%a(yAkKiH@BY5F5S4jUqX{iP1ckEgErQh-GvC$G#|-(^Sw zSMS{bLf`7BvF3z<5#HzI&Fy_ok!)U8-DWRqgX4&yYJFd;^uhzeH@JmEVS5o*6 zv_R;g3@6gBxEm{n3X3MXf0_yit;^YCLzZj$v|V4@un@ zxPNV{MNKHwrLZo&3tNNi=s4i}e$k4A>y=4W@zz2S#xImreKlo!>_WH8ko8Q>KZ{I) zIb?he>DB6;+a`@REx^;>%>9@{X<=sk8kfsts(+8rBt=*^Ir()t4Rn?^%*xYq=_PbP zoREGVp65Y<_1;^C{MtpUmF_9?p=V(t)E00W*(jV)$FE7cv#*Z?k&K55b!886^MfvR z58X_b3!?I~;{>};_sZ4FtymS;Oyg{|mH9xt7s=Ai<+DmqDLpC`U6GPPUv#N|v{>Fuv1!1ro*V#O{7x|=>y2Y07 zrQcPyI{X4(XOKu?@cwF0ZTbY>(~_LQ=4A0fge% zwp=O4T)4>^e1w5+bo9Y1wVPl511*5*Mktv45ls(J+~O2u&C_n`2D;ATXCjZaU&)t6 z88%k*HwUxL*c!O;k+%`wNBxQJA&*77M@99ny_#+kx9}iXt%9!P>)AXIT5x!g@dA4k zf{bF4-5;sD1xyVHB{EtY&Dy@70yX4xIEqdsHY#%@<_9c@IOe}DRbP%9QnarnZSdD| zxdNthd*eEwczRtrsBLCVy}+JXAfu$?qZ_%F=7ZVpefRlD+2u-1`6}+hI00GBcLK7u zXWd54|Ij*fy014-ZbAwHi|V|kwxX_0WRNl*EZ?4Aadm|LuYLEwU3mm2Qr928_u65h zm)`A?gUD6%!yjUkj)vxQ(x}JYTM*GB z-fjn9l>Tsb0-7hGU;bRoU>gyfL#heRruYT;524PH%BQ?LW0P(+v~VYT8Lw0_j$D}4 z_040fb<2C|B9g&R4UxvD9jB2==5+0o`ELJ-hvT*aF9#9vInrX&4+waqHmzz zxPo3^_^Zcmoc)*|UxTVjAoN$Ra1|`cTWeZG(03?IusK_UC_;EI9%FZy^c^lwE!bD1@2B2|4C)6Urda)6>bIOFvcz zKlv&9v?77o_{t`Ey$b=#fw7KaKWKj$HUa3jL}`<09z{2HTj`m~)ErXe1&lbZu*OeP zd|sJ2YqAtzIMW;!IKDKv0(4P^SnR}MA}8qbECY#?QZ#*+y(4> zkm3A~+uDemWjGGK%}9Yh@ARvP6po}rtE3Mi5FEjroMVDgVsT~&JQ6MuP<$lRe1vgN zt~KOt#GkQgHxpn6sp}$1ld05iz<~WpPp_M^JaZ;nQWGGnTie<8neB0Yig3)a6N%1~ zpeE_olx5Ar{p*(yjc`HQ06wjF{>t(-b%a(bKd_ z=ijvpG%yV0m?qQQ8Y7&|#XZtp#mE-c2j^Ql zD9v51@V!V54-BFE-Qn;Qb5`av7(#h&SyZyL77{K_1V%*ZNiAAB7hW$ z*-rrc1F9^hS@{fE2t_9E{wI;ddKWd&f&Gj3;E$w21yaudzwMedQ<)9Qmy)%o!Og$W zbhR=4zq{@+fpl**({WP*`{8Wa5ca38x9{h+s0cqEf(@eOAyG=9e@Ffi4;0efKZP^$39nl zmU#8{Pr<5}RyuPgrR_xe%@~4Vq#VX4)D=^}&`bb7+0@B0ZmRug?LZyv5EJ>D<{glL z1*ieAtX<>s^OO(~ht9Z%!ONMs9{TGe+fY7CcMgV;HuG7VCAz@P|!2J_QVYMyd zf{tR)J0}dqUxT$---mcIM8com56HO+Ee3_ecjH@$a?`YUc})aez?0@E^5q60K3YD3 zd%!LCQ=EB3*t3tC;WCS3DiX6V0b&Rk!ua<0UEemJ#f%hQ?dcrr7@-@Y;qkE++;CsP zTR3`m{j&1UoocW#E=5~RL1S_3V0q4sBM%nzS5<+3`3i2pLc4q`CFVI ze+f9IK*LSX2#9B0OP5A?M=+#;@OQp55=rSSH&qZvS#hm2@_CN067Bm`zxv3EMJATp z2xx8!^1cd~!Om{Jh1)Dj?*^x9R-=QR)rhVyc%89d{#c;Z@(URpZLfYN+$Z_G#|;_G-zA5cj7;*j7QrU_40{MUE-l+vl|K~nIONQCar zl$rh)Mr~fQe%b?uv!)I)y+${Y2=&RnXg$bx2{i5yba{zaizm~o+J^s`Snp4~empMA z<)?hvLUcGyrObVlmD}XTN*`wHNL_r22}7@n9D2#PzrIY{5q!ZJxVCWP<$HOIJ)^PO zbkE-Nz&#g8z0&~tnYgVU>JC=khBdrAEKhk8^~Qwh+ltnU@{Y9pwfBO*I-Tz0Ub$ZE zU*igyu>mRg>qxGt*H+P?rrBf50Q{FQh?WOtl@Dz*Y|Gs>N44zbsG#%LG39D z=0HGQE-2Cun02qC6+8=$0nK;pS-EAQcrNwXvZqVP+si=ut%M8c{c^8LDgs^JJb{P< zpd&8b>su}|au_PE7y2T_opzxGpzYr3&99Dox|drq9<{Mbya_8I(LFuf$A{fua#Qla zVciTBnrW$C${w?@K7a${h1(>mTGK-VNmh3cavi{5g-60OE4m92)Sa?7QSG^>P%?Wk%UpWE9xgsTJ*1X4Z@|>{O)xE6jLhj_q zMJN(JD*Mn$QM`a2hAq7i$F)I-R=nk$#8-l*%&=WwrhC678zf;qS^4oad(t{sCX-o7 z0gn*SNTI4%CNVPP?S&Cz?qW@>mi@7^SVXrqm)^GB>f6jg3|kns)3;lgORB%)!Lhbx z3~s0$;kITrS4Nu-^0F2w+a8vZT+&$^o9at^fQumG(@$YI7rg`U?%CSN=dax0UI7V9 z=Lc32OTB#hyuBl@u`6nZrJ!B-pPZ?2Cm%ukeg3=FY9@CBz0Lo{{8OA=tT_(SyLA@d3G>kOiMLN<9?3!*z%LFD%XjWN38; zK!meI-M^2&c6uh*pCnpDF)Q%G4Y{C+s)-UD*~o?0wGVY%Cy||(tb`$B={B;DUnkG> z^)JXd4v$a}#6yU_aI%@v853#7NbpxD{rIgN@|Eb^@zrN<083u}x9e3D%@D!LY~@x?WPJWS>z`qSx*8Z%*7Ib^~gLp9A{^fns?m@jx2SIu~2s6VY%P zoNk`?&G?#d{lVIqk|ot)ZbE^4w(W13K>qzpX9JqnlQ4hv{Q#TQPU*48F{Td3HLZ&; z-I@jN*loW!$&nwh&?j*35FarXfP&&s#VdlG0poL2kSL?ELXymlK95e53oC!!qEaE( z3MSRW+!N$rL_812Wv#m?w8kR{^B_J2eD2)ZP-O`xE^%y}U7h+SePQy~%L}*WTLtHx zWhSW#_~`C5BHsLo19b#c@qp#tm7caN;T3rly+oTl_ojA#;rT@(-Xqqa-E|TvEDgmK zl^vNmBhsdD{eFBl3nXEOXn@co5JC(}XRVfEeAjMzps(ul>`CDF?cy9y~Lb+V&JsI&Kbj2wI} zta>!fd68obeb>`-4^9%VZ%^EH(xik`c4Nat}bUXG+?(R`=u|5pMta>J7J)NullQrQD9r;vPy7f97>duLE}D z>Rcw}eIg)i_c}y6CFHj6lVk}}l&YLNaQA($yzNJC7`GP%R)O0~npy(3crm;-bdrsD zi$Ga0TJp>WQo-W7!kOE&q(nG5T-eEK+cc4hq?WDE+sWNz7X`67v(3*;j9m|i zmXeq%?gn^P?{SU!gh#&4tz^6ltC1K4Ua5b-cN`5RZ(uj0ST_)wJST~~#B^_5cGUbO z(MA*WXz+weE45qpl(LUu>^BXID4RSiklnVt`|tv~RBtS=8xde2dKDbcjTtHx|7_H= zT_!J)&JyGp**SKvD+HtbYk{`YbJ|7-tVIahmiY0yo+ zkUKRsgX^+uOP6St<<;&YN7b(B(&1~284Qu3sDZVg7%l`Jmbo$qS1HY-2l{&YMys;w znEVKz_`VOw4tTZ4reQ9oWf=s_WGtytiSSXo+r8mLkCO96B@USN8P0mNnYdOzoR{Fc zM-#r-9^P42PlfQmVrBw=38czNjtv82X^#{>VN}Jo zqD$59QmsGDVaafTYWK33CdZAev{rSPBucSnEYli?T2!JDxZ*7U4b~CZmojl>ST2SEb~|7}{;^GCLz{DBcx5oe(j^z4h6vul z;AHX5O6-E)TYk2c(maJE|FPabQ-ROW6^@s4g%Vs_JMdXiuS8*}*r?3IkCxU-jb3%_ zr-OYW%(rznGx*q{aRb&@q}7^=GKw~fUR?6HjCiimqmdwF3f4cfn%_HClvNRV)69*PGXTbUDn+<)H z@^5418rAl|{4lF;j?vsmm6oKx8~?+aRnW_pqaV$LMGJ~d@5{%zsi~GvUOJEcZTU;> zJw9{wy6CW+w(;J_2_w}dm41H8Rp-G%^9@Aw%TM4D9gsxFQMp%M_*!u@u;LEFA3@$q zbJrqPIZUrn4#Y_49U%Il?tc<1jj{(e#0Wc{6FBnCWp7 zq2K6?Nlv4KQRc9M1Le!UO@N^tS(iUPv{j@6HLzQAIgZ6|Bw3-G0m*a5UzcYlmCLTB zy$V&BKeGmq;H*dcNs*juZ}GH9v_F#ZSF)?4^x$3@x^hHR*n9)omqm>%sn}qnrFts* z)BGt)vFtCIt?;s;3Q$o0(69#4&9nBlBx`9%8$?X|rgE?wi zY{Xu8rd_wHO9;EpNq+$gx*b@c~na__d# zjJ93^<>SVbvz(7F2BVfK#HvlwsWswCjnL4~gC!?!q#b#|8w;m2BYEc>Gn1X^B{G@A*1kGH??(7O|}tQeGf~ z*V3Gh9fVjD+MZUp_O_y66N7s~g){%BF_Fk_Wr(e|xnCf~+xdDu-|i>rAX&xuHuIdB z=u4}Nj>Wu2b>h?K2oG78Z1)KLM@P}W)Ivbet_J*6h;5#@60?VVL z_~Z?|t6vT1+w|4e&=GsNEm9gR9pcK4?>H5$=z{cZ90B(*-JLWv?Rqzj%^DASrTFn<(-ME8Aj9XSa5|&k%FZ8^Ytt>6azU6^S za~FKVzG{05NYlcx9esw8ec6tr$uMSLAX-pc_Pu#j+9l>3Iv&Gd47YYIC zV>C5%e8m;3F=w?1zB}?MG zc2R+iO#zAiqa~W#u9Y}@R|c`UFX26tGg=8cwO4oC`M&+{REk{Dm=I+ynu;F-!nJpQ z<3Ty1%XV)$mhCexB=o#h;M?_({X=n(rn5tivsTU`E5{IlZ2zjs5_C-0SQ|Z)2jSG@ z;jpA1k5D58S1dOitM@G~P?1!B9mP{HJjTq22rprk@il>col46f#Wa?RcR!Q^kR@Ht zeNdj5BE8H$boGfn+|14WT8>-B8R8r(Iwjw**sC++9tzO|Rq;P=@q&o&IWL`chMP%Zq!7h`MYUh!Xda z38ITZ_Lcz8GyeU=3wD1=DijX=EqPdTYQ4x2hyIHdT2Z01Sy-hw4fTerp6?KfEb(=< z2$pJ0!I*bzBu>R(+Jh1qnU*lgHW9};mKSWzj=!^^r@-Yrc|SPP4&;G&xh0)tpEW$NE~^h z?Z_Rrh`+T_KfryJNhomM^#BH)9X-$2Hc6&UP%=4(+O6U|t>QFxesSAOEmR(D6p_#Ui2bpT zXB+G09FQjx-_G6XsR0+OTBv)_SMehw*cw!h0LO-5pR@+ujwER1i^K6QkR)wz5;Y{v zn=c*O8Lo;Km&UZ5De#N)%I?w{6OTsyP%-?7hOU*8s5G8POQ4)fq)ou%CDOW(lrv~9 zc-DziiXfXfJ>-{F_a{BJ!30HXl9)nQ%s&iekbriraT~)+R2& zc(y2{eu>D}kjl87J1Rd(h%Gbto{@Gek80cYr)L25Rcc3{e6N~!Kx0=3g*W_Z`lHAp z*Da1iWZZ;hVw*xlKWh3VC^RmGPl%Ax#h|@}%+D51$Iirq94$lqxKeud7!k%;=nw}v zcBA8ja(u0A9^`j|UwRZvAuX7PHu^WY4x)wU+wE_v0uASGJ=KXG&ktLjBIF!uGkAZR zP!#(ZD)R!t**<(MKPi(n>LP=&uQPI!L>adPJBIzw@ec<*i)T82QI!v5253)hM)cW? zjWiKba$xi70vH9B!roHOW~*~u8N12sY~c_AJ=>0?3oPf_*6Bv9H<|5AhBH)aI7-Y9qBJV7u@G`@(eT`Xy za<3hD2D^T};f+e+{*%u)5EnMHXmoVtw-DU!&WhO2OkSpo^aq;e(X%u>9_JD&z-*M6 zB;b1GxogtKoh9Yc;q^N?Dkp`-PIU-1OkacC;w zG~<2{T&12?0ENtjlh2ros4`L0 zLA5>q0T|2BTPx7Jm!|T+IJw~9zRNpm6}VjHM%9#QZxHRlOBZWqo6oc$ zP9i#rg$5y8P18ETI%H@@BUEErSeq^XDGl0d^g>L5_mVkyhbqIWECfAL9R!i4)D&0aaZ8ZF5}4@Q2=Kb=*2$xwS9jWEHh&guTLb`8D{r z{u<|yiE#Ys$b(cxdIck{H>yOz84ooZL|AQ|+^z8n(|ED$k{IcE$f6U>D+I6m)o6N4 zWz*W#jocDi1&c(*BNgKtQxg04zSX!8pKznaIZUP%E2|GTea6D$vwZ5_Cdm5ZI$j7s zg$)U7vDNgskDyfRD3eplp>lT}okdh}nq2E_pND-cZ~hLc@jZ_g&V!R$#avLz!XPPa zj8@$CudAud5BPLH(+F0aaFo@M6}309nI?h<+M=qwnSD4+BSb&(v~@eX*My;d4AZGx zmEniOG)h!)2T{36zsT%fK!U=-5MYM$Wy+5&Z>l%-)iE`NQ|Bk@UzP zqnNu4jhOPE&Qu%#Q`-$9O%r4Di5~d^O1SSly-)i>Zf6Tj%316HZE9xSPghngH$%Yt zwH=_O01Rp+N!7OG)?ZduxlIUT@|!QGs>=c4_dc0iRD!Dpdj=-B$c!R8h3C!*sTH~j zCT$h93DJgL$`uh^A^ebPB1CKrW5-OvD`|l3O5)HwCPIteC=uU=B}eDWD?cmLLHf*s zXrd)e=W03fS=r;KeLTC^eC|WgHu~~HbM&Ir%eZ~DOKQE}!A0!K&&_{7xZm`pP z_rhTgH~`|zT#fJaI*9yaWAqkl9kY5l6UyYn_5JZpVEg__hlb=NiKPi)DY*0DT$gCH zAJ^xTffXwX7B^EhoN$XM%~o|cu9l>X}QnKQr80N|}%9p7H(shm@NtsQXl#7b`2FjbWXzb2flsm4}W(rZn~} z@14cKV&P+rQkc%@n*v7)vF(_M5`~8|e5LLvO5ZXF#rO@~3Tvv2vy|n`C@$J$JwSWQc0K zKRUb3qMNbn+&g%DJiP#KiH&FhM*N6U}&L`@zJ}*j2Hu*7xp!06~IUbp} znG7janQg8xhM?yUJ%>8Jtyggxxpt*t`Lj0u^zsDvOj)JW`?Gomh(ria20`l30o8!D z2wi-UfacJ-#DQ&)ymiWjndCJ@C_2T*>qnRFu1y+Qp#fRZqjbe5)K?HqKfRdJ%sd-j zzM?6>Gxw%@D_p|(+f#GnM&FD=Jl%~k2NZNej6!3HAY<|gtu%`Jv!cLFO+g(!-QfxS zhiN|G!La7Ro#9I#!y2(Dqpv$tWo(_bK-J#)RyuD)Su{Xry%}LI`^G^J1d-~9?OUs% zvw8VO1b(O4CCGuo@Hh8f80x`JH$4~ku z>h9ZhSu$i-aE==d&|=Y|(ql5?ljlTU>L9)N3Hr=}44xRy0B9UDk@KRrOB@C(px;Ig z|09LL-~Bw0yL}N%m|JInBd8+1>Ea8m9h~McG_K97&6gDd&ByfM!KJ@GD}~Jo#YrQI z*O3?u<_ot+0MEv17Ktiz7z6Sl>24z}{!Ng?C4~H@QBT0jpPNp$; z1TfAZ5y>RB3W5i=w$`(e=>-=BU_0wQnDP$>dl?)b+6;=(7Gh7&n#n0_T z)0-!|Q~MS`8sD5&qcUN4JKM^?>BP*1B1{LH{vz}W2u0o@e{gvv3`uV;bF0x6?B2kkoDA!)LZOWKP!2IjZ5u&+q}GS!AvsXivzBXCf%^Ph0bTDK@6Z14{$yhCWITWP8!tVh!YyzfgB?F(%`HWSU8{tU-EI-^z38phfba0Jk!DZnYf&lKK5oO#z&)5V6FxI#xK z(hKjn`dl!awdiJ~d)b>!Ocs!h+KZ_HEK%CFmDe*9FQ^z#4_tZ56J>*ro(Dj1L@Urb zBM^vWemu>3IR76a(ErFPY=<*-Jsq1%xIXgHRi*mf8$XbRR!YAX&%V zdS8ldd$}INV2I;cw0Pvz@xO{LP3qm>Vu`UpzHpBf&c1Q|Y+M-Y)EE-Vu_`Jm_0!1U zLZ;~C3Nz5r)XvAv74Bs8MM86NF{DZClmqH@MSBksk8wpL_Hadg#FAx86R zWvO_M-|$sru?ScWbNFD12Hd0x>9p2pm7MR1D!N@5;R!~!2fDnjk(;pZI(`sEjj(!cRLFN&~;$OY*aN#BiW#I zxjMvZ!aIvlp@!Y(B_qOJwx)9uH_Ny4X94#Omx5}hXKJ+|e^JM$Y}XVqguq7qR}QSe zZHF$^pD4!$X;a1M*hSP2%c7wk&v_^6Z<0hAw}|8TY3>|ja_aTQpSI5ZsmoW*jHsR! zfedhZP=@sZT>vG6F>CW~IYR?9?doz=5lBZU-cML?+NrIS$XNdjMh79mslER!87@}mIstRW#^`p zmqMp7|80u@LV{Hb%l5Gf_z@T=Isurv_~Z_V`0WJ#JP^)e;pFhU?O-&8apYB|5i64M z@s?qB7IUKi!rw}`FY!2Qts09H7cL6Nb$P<$(cEeLYBRMYEC0u?=DU!c=YcVxRnwtYTAvsJk3h5Q$-Uq`Q1>%fKZZ%evNpT zzzG$cqCZjVp#T85<(m$cPtW{Gll#o6NKpi&buoviv+@3?A2o!F>S1xuIKt7Gg&u+j zWSF)5;p`HI{#C$^yTyB?C@&tQ7CeaxGSM|-e%bs=j}^l6;P7J{D9xK2uA};uDeQS9 z5rajGgo@!fpz=71H|4R+?LQo(|BrJAo~IYtCmGkHE?}%_6p!(_l7R#qIImR={YDf? z2B82g@tb}0>QX3%$UI+V0$Ysy1Yo6y04ObsYC=uc3QmfE`mkJjKQqY>y!fus^s0bLCf*w=>ZQV%6;SYm zF)Ath3^-`QcNZbEbni3L6^C$qRj$zB+f>62^BR-@kql$8>E!t5L*w1v)7a?a7RVi& zh8M*9NP7a*&$$IUeK>Sg&y{p#@~)RW13PhzG@Q-5|au@!|9)hN=Y zpCSP0Wzv=rD4t9H@8H#-VrWn(#2fOSqM8_Tk4i*)gb?ZlXE~GL;ZiFb#O8SG%g>nnz4tTVznZ1 z%vJ2zP1#_HO^C;s3WMak6QS{D!P9loq5wmFsE@EvO-B;>U`lCNy@<{g#ML)zh%dmn zIgj|M-muz~D}QX~cx{gB)YJOFTF^d;-InZ;bS0Q1C!Lz_g`qGo_T8aD=Xd`Va-8Z; zNOytUi#8Sa;q#q=nJw5V#+i{l{b@x~RJ)i;s(1BHUUik9%NYpF_c))i*s)4Ce%eqi z?PI|4=P`)Rz_sV)YPs;gI>4IGb`|+a&R-1d)n5)lwNi*{`?EbOReNSn)fxC+l3+(D zo32>Cf#2f0x*tm0DFo?xDy65PqDWV^2xZtNM!N&{KH{Dj)85sWM=*Oz&0F92B8Z&l z`In=PKA_?QP_!X-4({12cWVE^a^V-V5fyWqb4Dc(A8#1|IDG)KaGXovCNUfzE;V>e zeXJWfA{<{ITxF?4&YK+yxS$ERmLQD8#CIU7ztJb(-_7=jINa8+A98MQtZxc8W;73 z%t~)+V|XQac={e<7&^Vb|Aw9+H8C9o4=rbj@?1^!4&i1LAf}IV+0h#_rNs-pzq$mO zvjk=%OfqjO?U&+JklEq!l>=J=gr|)|6is-xJ<{p1y2Cnux(&b#kX?QMmDF&epG4K5 zXho9Lk!qBk)v_}5E@_@D?mU>?@o}*6=ay(+b@jdtSMq7ygL$9lQ0~LXyywMBBWTf#hj#Ck%hwSa> zw$4C~qcfi<+>b&XE%4U#h(MXmp6pXGxOR$Sf5J=rZqx4+6!MSAoS=1+ zxdB3LY#&Kj7DsdvXvlow)@5haZ1&wV4m+ZKsJ3Ja1r95r)xisuLZ_90#q+`9cP*q+38fR5ucRyFpzauTf{@} zH!WA^Aq2N=NnS*fh=Mr5DrHqmN56|v?~>xBFXg9 z%LFzgNpVEHD}`BRHxOXrtJBHhHk&|lhF$-Z*dX_t7$8`Bisr0bwUmjYdO#y+S305<&_ z&}ADU*V=W=R|@}^0Lxi$h)6r~I zusV1ehsuJ_lpn_{3r;YT=+9y=WEqmvB(LZpDYmnZJ4J367T&UFJ7!CyT~ixFWs8P2A<6gvAY~fWvD@JDcq$ z`03A-CRhbh-MjRT`5Re2GvWjw?(>bSTY4u0GjW(VABDdnd|!pYpTg;u;z%hq7y zn3^a7x&8M>`Ije!+uq+3(Lq1xHxlz;H-^o)oz;Ge^-6Y*if=H|xW?{!RdzoIrYlFpNOBhUE2 z@f^|xJ}S|AT*1l`GWKbI^qe>s?}IH+SI({EDN1!U=w+g?s&Iwng*VlHohnQ zNo4^WGKkYsu}XxCPUw!v+%*Vfe6VhQ9MCqYO)GHWnSH=J zLVW*4G;;Y^8a4tqS%HD#0M+bp^Rn}*RI5f-Nf}U+(JrPxvJQBB*iLk-2aWQcedQ)o zz5(}e0eJIyQA1ITa;^!l_cDt8vuo=vS$lE((N@gbnqPR#PsVpApkEAg0t|KU@c6Ce!>DjWj8$?7sm#%m>6!f?S)yf{A5V>{@>;vW(B6$B5&{@;^ zI3dcI&%vEE=ACx%ZPK}~)?un5rmIo0J>}FYb8{N}5x09{C#*?8HKL%%q2a-ReyuzP zB4(($2qOtje$wy7WRRO>L3bf@a&o$}#WEuZ*4Zg8-_3?61M=G}M?1oGpf;vT5N&ux zCKdA&DY!Ad-cBzgLG6uOnmds5^k51Z20hjanWwPuhrl0Czgu}xpMa2$5$LaKq^~tU zoWH*oY~H$_J%wNtq0D zH@xCilU09Kvckn_P7GRK41Dxa+rSW{f8FO%Y%^@#uv1+N>i>!^iY`d7&%K8In))--m5j?qF6BUisVby;qAQViW#! z@V`b!1Al*&#aGqjXpP+Q_(>KZ8Of;Ku7_moF!Ti7jqC_wHWPO!J*LA>)~o_&`s@y< zK3evD?!8m{!4$JiH%`wd@~12o3jE~Mjz;fkQq29k&i-*H=_k6DF^pqBrF8$|!Eh}h za7gHHX(alwzAr%*cXY((7)X1uj?{6T{$i9HY3bj4r29A&@$qzY^-jIy&|ic7Ii>lf z>uLM)X-uYUG?oj!dgjc-Z+Kq^V%Hlod^^N%`w<*JC8%Qf)?BTKHazM{Fu6ly3vl{t`&}!LPcFZkWNv#x zpyG`1{#VDuL?2sHMsyX>R%{vcqz5ran(GWkJbwe*?b`!(&6|4zfcX%o`$NX;j&1gV z?Iz->nRE&toV}eH!t1p5u77j#k!i%EE$;5Dje>X5`SlpX(KzxV3dTX}%2LjKC?&h5 zG2!W8r3Pz!h7oQxLM5ipa-s4nC_HJXp)OdkX(RedPR%3XmtIflx4$8YR-`ljx)P{^ zADON5ePy)5c@nfGI!bz{Td&ZYx?nL+W^< zj_1olF0~{0i9lb-2Dxuo-n_P7N!fPOBfd2-Fh^|U z>@eK~@#fp#? zbtBSP((m^u(DNwSOqz`<@8uI`>ARedEJ=u4O4Y{UW6)bEOO^9!q^X~HuaURx%0PEW z#OM3LZzvlOAKJZYhE@dHWQ|1yr)vXR$}j|(?7zgQb55S@jtED9LFGbBPec-NnDR)*E%8Ay}k{Qc7w9v z)IomqP5QDoghFG>q&MV#Z;&nyrL{U(I* zB(}BtY{;gUzt_e_1bYC|PJW~Q4~84&gdr^KJLvogH0U8o}7K8CzymuHS6LWJv0Xed-COS>L+|eZ$U5b^Ep!oU_}Dc5&n& zmUse)HEb4i6wQM87;69OPTK8{(yF*N3CBr;Di^lxhDDSU&wwYPM+?i51G&FIZ>L-j zEPFM%BG~gxZXrQLj;;|pzY`&*n%C>Cp<3kqdD=hSNpagfG87O>Djs8DnjuG-)en_mJ8z;6^m)uznL6ZxR(Jp&$6 zJBC5seKk@)Aqli261R_LR)%jZy!QV>ao+dnQslU=442(avcPsRC5%~}txiv+EACWx z%FA4sBKg&G32hT7h7XWtV61}_zPDV@$kQUd#1({)(!^ru*j!}(rL0%daSzFAG~)d_ zA{K54yEmE*W!I`{a_O&cDLu}Q@k_Q${9CR-y2uv;Ptl>)MB#bmtqsFiw%w4|`JD7B z?AC6>nPt0~(9=?yD;lKsV{K{)8LThSW&<^TsG}De&&}ndns8IY_=&*#?H4@T)m`l2 zj!K4px_F%9**Y^H!9J`;syjv~X8Q6lZcgL`0wt)3XNn+5r2B=v_6#3{hWd`gQ6Lt$ zhtjx6?b>Do^g0sgnS+Peya*=n&GS*bHUXv`;T3&P#_J8yx=!X!=3g+8l6KMqvdm;n zzA*MI%;5bs3;3NBCR#H)dDeT0jK|edPu74ct16!OlGZxdXY&0N{WE@Ic?#Z*kwXhX z5W{yy6ID7Yk}0!usGtMDTAa@Rdd|wc+BXSfy;6P9$zfYh2<*sKPQP|9{8HSE+x2_E z++u!)@Iba(Om8LmZc8>FpKL$gBi22vU-RN{b}mNalCVS%4HURz^0*O9>l3R+pclJ% z?E`Z9<2fK8pI{oLAwz`$7^%>u)vcXq1m8|T|aN@7(=a7J(ZmoEil0;(kg_wXS zNDB2E@`Y`%q<5o`>((+V#BbZ#v%3T;&;7Z@jWd!?>NCF`e_;Rbk<3F1FN1)H!B@+~ zAUZT)6=Gr2(i*uF$E?mZ4>|O999pQUB!ovU(a8~35Tm^_dT$O4h48VuOt>w8;xE>9 z4Vd4~wY>AjO8|!oW`5JnG*&y8C46GY;j5E|)4AAXNq$i1{ymWN<_D@4|27WM$8=6* zIN0b&wI;P}^Xt@KK`Asa(jqI~9$E~dKKVwe1)oqa8ArhAnh(WN4XZ3c02&4b(K{gK zy1Q{*yzTv!aZsBpXP5sz`jX3Ea!`}sPb`t%0do2B8Mm;Sw)~lG+{!R`1&vWCs9T4) zNuX!F;?j)aMec_dWI>=%$ERHFL2MLHW4j-=^&4#T@$I9*8ib|1B5^Vy@K<+zLvAxd zJchzD-UB0gq0>@p0d@ae**m{Rvx<5$)DtFSAdQPa7>k5BFA1MP@?9xv+`>}7HgDAi zoA|HzgeO`&g`BSTB1i+2j{(}ILW+g#u0J##sq zH3U0JB%NzuFA9urQIB8h&{YDhcZRnLb@yVCFY8OJ@xW&wE#(D(6)1~F5ecSMyr_XM z1zpbb=09-b;0=S6BHdMsJ)d~_#i>E;mo8*}c%ofIE7rR=#~9|3XQfzt0>$0^DV0mU zDYBB}>Ly7(xpi~OPZ!AXWYr7ZZqXrdZ`STEh(Do@r@e?HbDRxHz0yaQ`4YKK1>mh28JCjBAl*a7Y`DVj#f50S)69cKu-Te-jLDS&$v9@CgWG{C)y*?6)L@na?<}(Oh~xcRM8nCvx49D74v!{)HITc#UWB|K;KJ)tL&Uv>I5SCLfSEVm zwi&ZoISSUm>G>j>ZH{!7PW%u^s4UITx^cVL`0#+GYBwDMLP^=EgodCY6XB9Vr{brK z4;OEvA#ObY*%#*PsS<&dJ2;m%_-N6hM&Zx`V+meKF~CO0D^kl7*jgrKJS47d*1+Mj z%~XIgJR$W3zLJIkU%pg1)0w`b?!Enztjk&6bjGIy0~yTgj1iJl_8j83Huj`3@JS^e zOIRmC-mEjE)_@Ln`5Q7~Y}6}y1=@*Wof7NrBS3}I;hx*(rW%^t|2uVe zJi;+zyZH)bV4wMddlixoKwYse-l}ST_k7`Y%}ku)sl|B8(lE>01C(6Zodeni&H;ec z5*QRvG4Dbu#7QtU;Q~BxJU3^$$1&C;nV+=x<`&9j49iYHv)1dXNIYfv3$AD=(s%f2 zcRJi!ahO-6d&*Q>Erda4l;pS1R4jGK6f0s2iklOpF$&&c!W-NM<5#S`D}U?$Vx^kI z36DY&2%=yLE12f^thY$-=N?&VcK!9Sq9nKj(HC7I^NMLt5Z@W4_HTnPn@H%2%=GxXywV279LBX4As&oQN&_w`8KA+s!T zkV(Qbub%j&gZ0J7@$ZC5%^@5-lo6*3eBE~n+9GC{he$PET_{5w7_MIPer+>x39$vx zgK}@@;%~=wExNBi;10zLGu}bhDZA}$LI3~$zVkmwxL<(j%mWL25rt;29X^K`i)Rzr zznzlw^ZbUD}F50KYd!cS*N0E&V3-O%R&*m$^Q3SSpxvX zf|FcXe6Miito0^PZzZU+`{g_HU0KjnM$Gw?f`0jB=N!X$p4@*3V^RlsrW=4Zk zRii$^Ju~$rTbOcq<5VyDx{9KN#osqWKm#brJ3u=M{X$ZJOIgd|&6>WwHwh-~)mF8c* zgnfGg6j`-<>0?d_e!AUo1EPY|`JC#@xWc z(Y#xY7V_xx?PhlT@EIW>`t7={5DXDMXdjfiKjzQX+M!O))vpW0{x*L-Dl<){j{fey z50_4ieG$S@qGlWxF4z+M_@|<;VUCsYXSHTuh`Cg8WiK{^?>lp%@38@%i?Ola=1isE z13@83MlG#%!O5pfjjbzIQ<@X?>KYfSCm0dgC*B?pKvOYu^5ej0B7EQujTRR#N77o4 z1olnV%ZW{U`|-O9w@zhvmUON5<_-IY&4dL2j+#e@q95N;xVB7Qr-{8Gxu)TiEw4xn`r5w=$5Pxp|$RMl#K}|}qI|#7sGJprkPsJY;`K{}8^2>jdewX|Am{~O1 zoSsWqf4f;8!(~d-PwXD5Arv9i06ktWPo}P3;QLSh_UrscD(0WC_@XlVs&I_W<+C3p z*?`#?&PUs0&-?n!5I*<)=xq5jCEb9P(syZ2^s1oCp);6L$s|m0KC(H8EB^Veic07; zX{Jt4&nc;~UNn<)*Q_%bMkgiuop!qHJM^!G>%bAI3VBoJ*0_Q z<4j&2-2AW4_8<5}{uY4~wmE@tV{;IZ9%Y4c*+)6gUI0~a`)u8M4r$Uo2E2ZyeC89M z<7W5U#*`t=06$lZ{WV8S8*UL4)_S~FhcoLXoiwgh-ehb3%ld1$ayfMfOmdA7*&Yq> zPee1J?m>hW`mPCq9(*r|J9V=+kXXx_6w{i~?Q-vkmPmj`!)qA)`)`rtu$QZRDi=2v zYd^Q7{9|<{wC}KsLr;K?dyoI>APO|>4Z2s&-TX}-S^@mXj-U|iP(>^rN zd#LOY4gpA)1{i#PY}{Eq2}1NRuJkA~eDkzzyY4UcWV=zZ`~Tk4eUWxc3*4${)#=)+ zDO>M`m>3nbhmVr;>|vVjd4I(DFUEqf$}3FVD7#wIy&i;5KevTXqXCpIPq#NZK?Bqt z>UoGHZsN<_v@<`G(4NA*G)Yv5%J0d$1l7dvpg3xE-TgCawvyEIN#5zjo>#zTwFCWm}Y)4#wuE zy4r(l_bIaphsVa3KXeELJj9{{shk!1%lj)c-3IvN*iIr2=V-=g!Ego7rOO_-m|D$$ z)Pu_uFSlhj>Ep}#^bRP?`)&hoLak!T==I?KaVY3+(qott6CIOe47oVfmdT|2tSouY|Iuph37cW|BxP ztm73m8>Yd3%xAQ&fcYYP9z=m*;IKKG~+vRFkieyz*Ts59O5Jh6~zDoNosR*+1*1E&Nslg<81ge;hP~vfWZ*|sWBAt<-E1Qu=og2 zfL?s~@!`#57|q)MxyLUe#3XeA(x`=a%w}-Vb4dLm+<;r-Jv?B_qFL)rJTJo&OH0=H z-b`+}N=zl@0ICtO1I{`@N3j1bbWdQ>@pid2T9qT^KP2KlXwULlvu6SBk736v z*~8J0z?CzCobG3kp74C?@lroEDcd==BgBD|zkV}Jj+YuQGinp3w^lytGO%4Li~=*e zZ@OUML!|SS^O(43;7o+p`|6XTYko`h2hyX*qjwvUlij?J&M)G8#RX-3GX}$lQ9hUw z@~F)dhq9=ZdT;N=0R_R*WRnct;6WZ?>mHBcAXgiyp`wvStk-|=^(?0j-{mwu_gM|E zYYbmVpYSAh6UxTbrNg_kkyIzCr%}m~%UwT0^cxid@47mQcwnRY>G%OeU^r;HPV9YD z_>(zC31NG>6VHEd*#8&qF3qIEdT+J5b+?d5%)6r{j{J6n)uI6tbQNcuz7+gYLM&xP z-;xlOa6+*H|6Ut3!45PY4V%f4^(QUjCx7q46`L^EoR%&GD1-vTxp(^52IB|PXQPW#!wcj) zF5S-vH*7rCm9onB614mh6-Uo>y^cW0F&$g*EGW$lZMSSS*^8$oaUaIX;=VxXxE&O+ z9Uhl3Q|F_WUjxWu+h8Ck7%rg0SzsgKv|)0)WQIUyyi&pqt^0AUIW)qNs{x@)zR`2Q zMQgdhuoN*rope`5(4H=sjzfnvRl3$eo z(CBlVLBsX3W2jsFW%)~ga$r)e@Q}0>8qVGsZYW8NymR67Kmb$hs8`7h$wFDYY-o#`Ubh2KC zNjq1Jktjl!a-#GO=$+(6O*TS!_LTYcEovgLB%uQx8!t7%PvQ6`kHdwYC}4)LgB=qy zbP;Ds!l1eMPKmHq+@wTmfVYgSA1}^^G+(x487Yv@J4)GpErWikGEYC4PV(zCCJR#~ zSlr~!g?$AF3Yv`I#BQ(XKTrz0%+Tt4pq>tO_3Qq?97wD^zn1W3b{8&wy$2}(E>D}p zNf0ADr$Jy?I^&}aSrxurFp5#F_N~p-UmHJ7zdh2FL&V%R|$HlkKOq{n}yz+9MFW8`7sNHRl71Hwr zqWyo&|6sjz6`e6^E*GZ5(P!35veh`BwK%bUb70WCre;Bfn#aD*lpfh@mv)DD8=7y1 zg{H|WGN1=r5`LNC!Y`}K7;7_L50i7F1ZwaEzttN&AxT_+Ki**y0?oblgov&uY}tvP z?D+>3KIq8=J2~sqZ;0M-wCZz1k(Po)g{pTNZoIA-!4kPs-zoUJ(7uwt*f`${W(LV> z%R6&VePI{du;qOW_1b-um4MLVAY1D}p5z^n+WhF|xf4%y@p=KB(tLU_oK;u7iA`@a z&YxwTdo}tq$&t8MZ*RS$b;kP$02+CGfn>F>_#l?5QYGH|`mAyEx-J8TgnFmbg?<|F z@j+rfIdkGOv0{xD@_D6$%S4Ftu7}&2_}a)SW8y<D2w6T~T6Zh2xYNhxOSc2SNw#(lbLP%%?eFCPD7p zNTT{MTS%|jJ%mh@_lIIki%w6@d;g6^KaBI7uy3APbSK2AB6BgTg?yOD7Ea6)o7HOw z`wAWuSp@@6Iqkz{d-@RUpZ@@1pki6q&LEyb<8=9;=?Ol1TOV)xw72yw+>D}L%2n1V z+SuM7w=Q*oHp!|D)m^9nnWAI-%DHkR!{f4d%@V``v_#I0C@zYKnkneY| zibSAGc?_oSa6)wdoF!oD1>f5ftiDzN9DPZMss4;b#*gDQI%$xWvzj*!_X{(goO*~*2YH|C z>jQ!Aw`a8-ARIy?e8&ds`7%KPKK9qm?gV>@S01a_`$qaN@R`rh?PiHH~;BP<6|jnyt|FsRPQ^H| zO$#cJ4g;T-|NP*l0-%*n^vd4rTIe1cQnjFz0{{ASJ~%tQRr9Aohx^%=xwG?5Loi<$ z&i~d?rm^k&(49c*4Qa$oP!Ll+s}p&a*^KTo&Cl&x5Q#u(7nvAdu?hM|Dl&Mz7R`f| zprAvaGhJiuKZkYCM0`$m{Tn~kYeGcOy)4w@+(5~-wWYKF1%Y9VT_=Wo`1oS9tMQQd z`O7|WCXCqwk6ze=;byF+Rg{px-l510SEH!p{=BAn$TjIb-obTEVCwe5;j3fyJA<$p z(|7dT!4=FhT-!q|5jH#3tEqZcysUx-#zy;OBpEO%Q2Rq9&=iN+>S{xk@9wX}p-y+PY|Ha5CZ*A?{)-+HWdKJ;v@lRpdA z0NL%;e|l3w{Y(J4LUye42P(KV@;6!pNLvB=V00%Pn=qS#b2mZhy3ll_#0Ye8g|^N*UVX z{&DJJ_e7?R+<#oQ6wY0XcG+RJTbpuJXGq6`y3~lK46{l5h<=Al%ZA!1Q&e3sx>7%T zE=?bj7IEog*f`(zqJY);!2AU#50ga##|&qUz-E_<@7rwtE3&n8;N(i+R>(f0I~kHl zScl6EYz+B;>0+Yt%fv0aLmr<^euV3%emA>%-%oKCSiIHFS*Z;gb}%@M3~1@^>Qa(= z)BI(?N-)E(7wj1n<^~(i{M}lu6zo?W3>O$Sc=dw-bAk40!^(9ca+*oaf1Zo=qp;8@ z1#+?Kf))8y;i<_69ef&|rUQVjy`~t{%zgq~rLQ^EPY19J{7e|OjdM`F6b=@y0EX7W z>h`?3uE2oFd{%dA=-z;-EAa8Y_ta|$0Tf{eduRZ0aWL{h6#2P2k6stv5^EDc{i%93 znkRl`6ErN4b`>Im^#JX|Fce>i!rG;N!Awiv3GR_ju0EEWY|VO>K{|6hiAH%$p_|Pp z1=5dg5SwUoNn$6NX6jWN#VP;*$|Do;@mGQO&t$KmqiTS5NsB`=Q4!~coUK^e z<#Q!i{?CN(14DdVOdh3FuS&rDQ|o|_0&HRaV=4v?YoO8yKV!IfXjgjypEBB?h4Z4k z=YtAv^X?y8UU{*K!G#sO^5pr%gYjMij(ys_BeEO7NL$M#F4u{ZER`%I_WL*FEA%%( zGwerc-9dgmNX+ec@-H)vYKkZ+MW=003~411~{B;>JTp_P)Fh?+KHx8`IL~E z-rBz0O6%3T9^1;B5T!bJgsXm zp|S^-2>q(h#hS=mPwY_67sSTD}LzdJnDe7sdM4Wi#i`_L*j?ob}L2>)sE*(Eq=}asE&2*Z)(x^7f8f zlMaLM!w1G(>bZut#{-8i`hIAyUsMmMU@Z%e4rBY%C+U4?Z%%=7ZaOGm)XGV2`%TI?>_j8}AKW z=}tQ2r^j$pKKx3d_s{XJT!q5yA&ucl8ka@sEHpz6b+V(@_XcNb&jSSRbi57 zW&hRU!qPWi7v#8LzpwK7!EWMgg=Y6?kdEQ@_z{T|dr z?;L4l+Q^_RSc{QM1drFqV{5>g03d$&{x4zF&II;_a<9U=7u;Setw~C2nlYxG#o=9I zI}idP4VOo@F4@k4zBD<+(G-*J>q|O@85@P(0zqyV#@N?$pp|#j47p37bk2UVq^=)% z3{MS@wW&~Wd7Ph11UuRs0e(E`{$J~q*EyGT!z^1x0JcbF9f2xHjib)Y>D%D;m6@dh zJrd3_*cQ)s5QO`{nj3%L*ML0S^YI(+YjtzO+uYCsaQJl-gS8?5p1Kkt&|6rf<7t#o zxMj1xvg2USofQ1)xxL#E#9M-C#a}1BFQ{}dn;ij6M+um55Bp|sgFXYwRh>40d2;E% zyT6SchdVHSB^Q=?j`A>7+NAp?h^s~p z>!68vBx5c`b#`#Iw0f$YLzm#fqyq-2$KSaR;f*W)0uM|Xo2 znCrf?(m?{fWr6bY7fDUMO(31pWI$gM^a`aTr==Mt{M2fu$Ar*9alPu3DTXTX$E-@a zk~&7gJ@20&Jy&r^DlxbNWg65`uvO5UG)YX*q(CLOGl=EbPLP=Q89%af9Oxjo`5_~h znqu{Z0Uc=|%$cnLJ+4xO?XbMZxY<%;3m&E;yi%~m#ZZ5##Fcl&=jmL;!5WHCKGB8U z47&b@n2cj$7uDvd+gwpJir9H{<4;hnGSp-#Ry6`ln1eT;>m&08dClg4nQ+fPJ(3P7 zgx){gBl}r@6ulDgXr2kyK{%D#B>Sd|t3s()l(7_4U&vcH{#4a19LK=^&%nX!9CWiP zA<+V9ENhT&nNCWlYVl=C)3#Ah^`sO=U&Myt&f-(X%fVmYm0b^HOifwXbWn-eG zK>IZnOdGb>%hO~G^R3N$GdIVYmPmJ;?2jLri_AJ$AN~ViEl`!7G%vtjneM_XEUk6z z#w1%}X_C!Xkp|XP9V)Ft=$y;p*GEG>=k?&_VwzRNxUi2h>M+hB&{S;k<+wd@?26Rd zruwFR#(?T0i}J}*+6sQe6LnqHBr1?a<}8I`+1_f!t?yt^GN!obkv?kB0<1=^p#{&+ zOZ*xvXh}pDB(6EBV(0_G=IE|H0*q)eKQTn_Q$UiSG}B^NN%AS|%AF0RQw!|Q40(EF zgpY|oD3}r(P&@S9n1zu>%(AxruHMna0sAB}ZR&#@=`yDnaqo{%;@E!oQ!HO~7esZV z5HUIcG=qzeXv9^KKO2Y;HQB%oa`+`cW-`U|2hyZe;d~Z>!CZLDH)ve)B%im6ZB8id zFZBLJE5KYX{!oi5s%{E3mxfCSSj3cf0!uXUDRM;!y;V|jYZ8UTr;Zt>K$#khTgj1< z%Mq*(>DePXQv+}LT@gI>8zu~BvOTy2C;@$Rb-egF2Cl*&Yj|{E4}5Dwnd54CfrVEO zr4zd}nSI105!3nv)6MA&)AffOYxD-kMp3b4R@ciUW@}Lng%SqziV(6{PNrIlm_fa+ zuPl8rRhF}>l*n~&X?Bw7MZ!;cZ#Lx9eHCBit0x2ONFlT22MsIDNhhcQPO|Fq=#v5a zFNGpmBIrMi2I6!yfhvJNWHrnDA_Ke!DJQvSqQ+y{e$E}#=}uPbnqNh(n`M0!ZlaZy%$vt^jGeGznyKD@A2FQ}&d`t1ZVtYr5A6up~!?*J`PIzQzc6?AG z*>#6opdzgVbW%gd8r2GncXRwrhHS9u<0O8CY(u*rtt1Ah>X&)k`2%r52I z1X}sI^_9xc(;ld&4u&fgd*&lr2b@>_T;+LZiLOQx5agT(LwXFDz_E8IQFpzx$$VWH z2QykwOh7~X!Jh{cl2$x}%s>sO?+1T0nBLtXawtsrO%Z=>RMQlGh&bi1i0J*dS1?{00;_o5klqLk8vmU2G?-Fe3UwS$>FApwwYn?P+|BIwElU z^~2HGwrV!? zn=q^ao}OQ3>PHqUl8*3jOB+YxeZTTAJxTM*S|UwW@VYRDI_NI-~NB zE$ts(8PAWFRGH?8UFCG;A~*HYi7FCVpqbnAF}fB16~3sXE2Jm3MN{ReV!^C^fGg^KG!|wZ*WxqqNoxe@RZMim0CL- zwv+!$4b>V&{4n+tKQ3{ibL@6b?_gLlP= zJxX$ztdTtf)0vfEae7kWRaooCTRRB4`ynFq%##$l1bfZJ0s%MAWqE zPUOL*VZ3|#Piu^&HVrEU%Td-8)nF1a)Xrrms0zv2tI9Z5gy(heaR2y`iGBI%8KOMhSvo4m%vMRJ9e%#u&IPBS#R6z>NFmC=L+5pt(R~V#*+m< z^S%`=h9p9Erl~z<#lflvVUmqQ+*HcV_JMod~4hG)w8(96S zI)rW5g7mU7x@(IdC4R#YAgn^d7Q>^oyMrK1t$k~~YgAe2mh%v#q1)s{s-!c`Uj!)>;sn5m#=C_+zjy|Cm z*ll_%5GCU6W!dIUfBTBe`R)I7h4^3P5pO|P*WbT^C0(ovL8c;q00I7fh|7yrix>p` EH!1PdZ2$lO literal 0 HcmV?d00001 diff --git a/leetcode_java/src/main/java/LeetCodeJava/HashTable/ContinuousSubarraySum.java b/leetcode_java/src/main/java/LeetCodeJava/HashTable/ContinuousSubarraySum.java new file mode 100644 index 00000000..532ef9d6 --- /dev/null +++ b/leetcode_java/src/main/java/LeetCodeJava/HashTable/ContinuousSubarraySum.java @@ -0,0 +1,150 @@ +package LeetCodeJava.HashTable; + +// https://leetcode.com/problems/continuous-subarray-sum/description/ + +import java.util.HashMap; +import java.util.Map; + +/** + * 523. Continuous Subarray Sum + * Solved + * Medium + * Topics + * Companies + * Given an integer array nums and an integer k, return true if nums has a good subarray or false otherwise. + * + * A good subarray is a subarray where: + * + * its length is at least two, and + * the sum of the elements of the subarray is a multiple of k. + * Note that: + * + * A subarray is a contiguous part of the array. + * An integer x is a multiple of k if there exists an integer n such that x = n * k. 0 is always a multiple of k. + * + * + * Example 1: + * + * Input: nums = [23,2,4,6,7], k = 6 + * Output: true + * Explanation: [2, 4] is a continuous subarray of size 2 whose elements sum up to 6. + * Example 2: + * + * Input: nums = [23,2,6,4,7], k = 6 + * Output: true + * Explanation: [23, 2, 6, 4, 7] is an continuous subarray of size 5 whose elements sum up to 42. + * 42 is a multiple of 6 because 42 = 7 * 6 and 7 is an integer. + * Example 3: + * + * Input: nums = [23,2,6,4,7], k = 13 + * Output: false + * + * + * Constraints: + * + * 1 <= nums.length <= 105 + * 0 <= nums[i] <= 109 + * 0 <= sum(nums[i]) <= 231 - 1 + * 1 <= k <= 231 - 1 + * Seen this question in a real interview before? + * 1/5 + * Yes + * No + * Accepted + * 625K + * Submissions + * 2M + * Acceptance Rate + * 30.5% + */ +public class ContinuousSubarraySum { + + // V0 + // IDEA : HASH MAP (fixed by gpt) + public boolean checkSubarraySum(int[] nums, int k) { + if (nums.length < 2) { + return false; + } + + // Map to store the remainder and its index + Map map = new HashMap<>(); + // Initialize with remainder 0 at index -1 to handle edge cases + map.put(0, -1); + + int presum = 0; + for (int i = 0; i < nums.length; i++) { + presum += nums[i]; + + // Calculate remainder + int remainder = (k != 0) ? presum % k : presum; + + // If the remainder already exists in the map + if (map.containsKey(remainder)) { + // Check if the subarray length is at least 2 + if (i - map.get(remainder) > 1) { + return true; + } + } else { + // Store the first occurrence of this remainder + map.put(remainder, i); + } + } + + return false; + } + + // V1 + // IDEA : HASHMAP + // https://leetcode.com/problems/continuous-subarray-sum/editorial/ + public boolean checkSubarraySum_1(int[] nums, int k) { + int prefixMod = 0; + HashMap modSeen = new HashMap<>(); + modSeen.put(0, -1); + + for (int i = 0; i < nums.length; i++) { + /** + * NOTE !!! we get `mod of prefixSum`, instead of get prefixSum + */ + prefixMod = (prefixMod + nums[i]) % k; + + if (modSeen.containsKey(prefixMod)) { + // ensures that the size of subarray is at least 2 + if (i - modSeen.get(prefixMod) > 1) { + return true; + } + } else { + // mark the value of prefixMod with the current index. + modSeen.put(prefixMod, i); + } + } + + return false; + } + + + // V2 + // IDEA : HASHMAP + // https://leetcode.com/problems/continuous-subarray-sum/solutions/1405425/a-java-implementation-of-prefix-sum-that-si0m/ + public boolean checkSubarraySum_2(int[] nums, int k) { + // maintain a hash map to store + Map map = new HashMap<>(); + int sum = 0; + for (int i = 0; i < nums.length; i++) { + sum += nums[i]; + sum %= k; + // case 1 + if (sum == 0 && i > 0) { + return true; + } + // case 2 + if (map.containsKey(sum) && i - map.get(sum) > 1) { + return true; + } + if (!map.containsKey(sum)) { + map.put(sum, i); + } + + } + return false; + } +} diff --git a/leetcode_java/src/main/java/dev/workspace5.java b/leetcode_java/src/main/java/dev/workspace5.java index 845271dc..0387cde7 100644 --- a/leetcode_java/src/main/java/dev/workspace5.java +++ b/leetcode_java/src/main/java/dev/workspace5.java @@ -4403,6 +4403,52 @@ public int maxSubArrayLen(int[] nums, int k) { return maxSize; } + // LC 523 + // https://leetcode.com/problems/continuous-subarray-sum/ + // 9.24 am - 9.40 am + /** + * + * Given an integer array nums and an integer k, + * return true if nums has a good subarray or false otherwise. + * + * A good subarray is a subarray where: + * + * its length is at least two, and + * the sum of the elements of the subarray is a multiple of k. + * + */ + public boolean checkSubarraySum(int[] nums, int k) { + if (nums.length < 2){ + return false; + } + // hash map + // record presum and idx + // map(presum: idx) + Map map = new HashMap<>(); + int presum = 0; + for (int i = 0; i < nums.length; i++){ + int cur = nums[i]; + // if there is any element equals 0, return true directly +// if (cur == 0){ +// return true; +// } + presum += cur; + map.putIfAbsent(presum, i); + /** + * sum(i,j) = presum(j+1) - presum(i) + * + * k = presum(j+1) - presum(i) + * -> presum(i) = presum(j+1) - k + */ + if (map.containsKey(presum - k) || presum % k == 0){ + return true; + } + + } + + return false; + } + }