From ca1ceef56bc7a1301d5042f7cbe14f8b3c787a78 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 13 Jun 2025 09:21:55 +0800 Subject: [PATCH] Add solution and test-cases for problem 3310 --- .../3310.Remove-Methods-From-Project/1.png | Bin 0 -> 12338 bytes .../3310.Remove-Methods-From-Project/2.png | Bin 0 -> 13201 bytes .../3310.Remove-Methods-From-Project/3.png | Bin 0 -> 10776 bytes .../README.md | 55 ++++++++++---- .../Solution.go | 70 +++++++++++++++++- .../Solution_test.go | 23 +++--- 6 files changed, 122 insertions(+), 26 deletions(-) create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/1.png create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/2.png create mode 100644 leetcode/3301-3400/3310.Remove-Methods-From-Project/3.png diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/1.png b/leetcode/3301-3400/3310.Remove-Methods-From-Project/1.png new file mode 100644 index 0000000000000000000000000000000000000000..7e2c2497195121730d4c0826c3c9c0529ea0aceb GIT binary patch literal 12338 zcmeHtWmJ_>v@PHP4}D0H?(UG1?v!p&T3T94>d=jVARtIc9lAjQ=}=HWy1N?zMR@z% z_wIf7-~01^UdC|X;C%ahJJw!nt~qCnmZlOe7C9CQ3JR`@vb+uo3Mwb^9~1-p#V;t) z8~j4`)KQW}sT!r+MM0rOQIVI?du?%;i#emO`}f{(D>mMZJ}XL@@G*ahR;f)!w4RM> zKWqp_Kre@>(p_Qr@tXo0liP((r>gQ}jx@UB)Vt~Jj=T2#ujdyzU&dy8#Kx{VxDBc7 zj~l1%sur&h-qnBameLI>O&W)X;2|&=8a1t!3Vib`r$e-?G?WaDp7RS7{O5Ie2y`U7 zY+O15JY%^_1w)hVqJYR7EvcttutVS>P_<*^;3Znx?lZe`K`lC3@S*=h@Qo)Js010p zy2YVbsC2a5|rAgQC){;DWci zeNufuf+i~sFZPuNPrHG)`w8fimx7mpsXh3gsr|opjaCR^_bqeP?)&@At?${}q&ybR z>!k*j@8|vZD;KNUkM?|KZQo7ye@d*634wBCpX;O*{<)lfzF0pdxv!W=x!WKAc>T@I z<~t$DZBkR`RdON64U>kKtC~{(yqZVF_KBIe{Yw`JV3wPS=~eO3T?e!Ei(jsm_WxWR z9~&TyYTMGOd}h8L)(%itfho8aCOoOTzds+7YOn72Gpvy(xp;@;yq+NJ^T_N~X#4Hi zi23E-FNQ?<=9@$ia95ANU0=I>K2`J`;c7-uZ}JULu4_u(*bL+~I{q?Q-;uh%^}O1v zsBZfx7uDvwe*vL-DJCwW-zIH8fn-jLCq9ToHG}fi&ThAYY$u26I13UG~UpIkoH{SmvB@r z_THazovpL2viRb!D40MY%srSHg-_!;-!1C7)xy=hFfMWaO<-#~RUZdLKZ*4RqJZI& zyf<^Xep^{n%dOiV_NfC7_zcT*io<^2Pdt-q^*Njq9mH08su|dnS+}Mn4cEW*%$XtT z_&w)TWn6DJ^?bU@eDSb(nc8XDS(L_agTSy@l|U$j=x9Z*iT&M8XQdIv^)90 z&c_lg#QwM-P@=Ttc#rx3qviMEe951|<|Y4%_SHy=1&5McJJGnhH94?#fu8SYh*B6@ zCN#y3+i+^N_bZz%Hab*#{5I1KDIrG9u8Yctfgq4w+Yg&OohlnM%A|O?jom>~Vz0VU zzi{|-xxX#uy|U2}4c znw)3($1}ZjeL(oz`nvK<@t-|-h);b$?Y~3EP*oGTfU|LNHo`Ms9$k9L^5J!NkxhZ( zz{8;_!{@d#Qe1G>hih3`VNo^sSPL8rS z;`Un@I`$be;?eWKpH^R^TkPZ5IJl9=Ba{~-iA$~@eNtOF?=_*pa3$e;WafMEQ%U@e zQsmVO3l7Bn-_Co_fTPwDhDkI9-TzwdfkOt*^P{Qf!9ku4>jA?9SSm)#!S`PtmkGg|(;UQcRjqu1DpqIomuWY#7c0G_N9W?71l{zY=C+52L3EY>lC5s@We-?r$x zyjXse%+2`U)`I$B;**9aP2frBynS8}{gt_Lx9qoSzw@oF-r#?i(+o)}!gfTc1O`vG z`{K0e!sF%LCmSelH4M$%BPjT+;1Pn!_=Bnm{%}a~QTuVnM|Wsy{@ck7ED7aB*kdrv zX2)y&-_`Q5nD5a6h%#%`B1@Ou@nQplsFQI03WLfHs&RT6Ue!>{SlxJPiMhFAu_Qzb zC^;n4fy{pdVYuGt!m~C+%`blz$p7W86qwX>nk=<^&PUzP^j~X``X2g_`en)yqQ=Of z*kO=gx0)CC*MwkRJN+eBce!#sRZl$z=8uO|UdaJhi@w%7bXUwEyzHa)9uR&{&Olrv z-?p5?d?)Yxg_ZAqQukRU_i6eC?Vv*MPtDDo{MSz7)>^@*AZlW1)(Z|%!`gN~WjpJK ze^gM&?1`js&D;?PKJ9yCAoP&s4qU5a&8Mfm@_!BOhd`XG;_VmgI;{1^DC&Wv8YwaH z^&!oHmW4F^4WfROU!#KYaK<`G$k?XHk#&RpKkq+!FuzqXZ8i zIP{@fHHr!3#m7`-Dk6jT*yrqP$G??}m3ex-5?|K_m4a&6$v)mOc-JrXlt3LU%q4W0i2H*X_&YRFkYMeg(pXVcsy%s`KA((=v12?d1E?+?h&K;pQGZ zaX3{$)fg?97mlWCjvPH9WkDD#Z=h=6Zx^O+tOTggjUp+}rH&sCcHcA0i%E#tXZ<~0o7 zEAx%q0uZ`69T-9Gk|!AypCjVeb8>ScDw2Zz%Ls#qnPeN(-%&rCQsv|;Wo7ucXCOVl z8J#Cr`p!n#OAJSEaGo8PJO*e(;j+Q`(Es;A)`WnJ!Gni*X`=y}FKw^r2@HI;nJ)&l z)I&0r4ZlX;ZJn#I> zatHxdNH4bbR-ZFWFzTVm$_T%v3;}r>$wL5=$F@&@D$xkl{n^TPJ5Ukx+If)|V_Oa- z&AI#c&sb$TbPzLAfklnPD|X!lU~91?>;Cv!Ui3+9UdkV^Umrmo+9gt;c)}7S6DGtZ ztq$N>Jz6y+A(32YSg`Hx11WK(@M8KCaBL0sv^Mt}voh+Tq{MF?OXdLpLTAdJIKq|@ zn<#G3>S5~(V#hdyHFE0d&$H{6qqhC3AF)Jzp<3<|5zvvsn+HPs<8p4VU#7!!LAev@4EmJe{-APF}?hoIqgfkwH3;2J_O6w#O6-Af>ld$Af1o~Qb$U53QhQP9kkXuPr zrLa=Mmivn&?N$kd%GJOf*Rj<3G?>>}t~7zd$&ap!ZKpn^Qw*R!vOj1$?z~?*8*>HO zMr%dK3E#>eoXvq`PHP}@m1>4LWK`nH?5daOnNj0D0RO`64=Ps}h%D1j(Hb0o4JS~F zj=MuT2B-tl{=U~DBerV0S_(Kcp`W-}X!YFoIR1sc%h2UW9z50HFyTDPxqjuTSie`PSU~m;TYH_%Y{)sPkJDekCIq@$7}jXEpM@_Xsc6Mru9zRYtep z2eWt{91hOke+Vy+7!zFnvf;Zzw_ zSH$4BAgDA!7eBW?Bp1g?@4+Jqm{S|cDsn&**}C_uVmo2DI|BP~ns0EKAvLRVYdHZ+ z&>4OEd-glsJU#LcBJNh2(|h#y1YHUtQcj>)H$7;%oHG3v%$k%(tKZ%IHDMACayfp}DrLR?2@Pk$(9+{0~aK){Z z-3G!Zp>agQO^#`1-EMuU;@mx*eY#;LKOwB<>Jq?3dU7dS@wv*x~5f==y3)uh(&X0W|4L#5)z#crWM<`t6d!>#faq z&t1d(lsn-7 zKmF7!sns=8v`zm{nm%^@avM65dAH7>w0ZBOC}>Uj)|Z>#^KRwE*i?HXr#_6^AX|9I`E-sH9%H7Z9-NP*H)I6 z6HUJBp=e~GVuDF-09g~2d7e0048hb=z_H6-ZlO|AVp^0Eu2lKu8O!LaqNtmQIFoOv z=+HnTR&n(_NeSOxuVNT$sPu{4X8@D4r8rc@vQWNLg~~(YE-*Bwp3J;>(CoE4zMyn< zU)`&%$xW-Tp-R4&yhEz}gd_IUgFrp@0W}jw7A!gpW#|UNQW&Lp_JvatLP*C+c_^{~ z7?vGS`Cxw>XgL|x7(_ zJHAxTAz3IfpM%U1Ew2O^D+#K>pHPgaBpvR;gIGz@^zevD>|PH*54=B6>*yz~a+vtE z6|e@!81PFYA)URF2>9KA6Id3xCC<^7ca>bOqGwDWhxRBMQ3GX^HIi9-2`B}F5$x@A zGEiqaHfacFR5;c3g4hl0AgHNCug|{=ZwoLkazJoE3ZUG{0nG!FkdZC!LJoIc7txT( ziyc3_A>%W1=2CgT^(cWvXL9eGOfSDpvHVt`ox&9cRErZmnDou`8Jr=)$AW zo*sWbH^APDpegr!*|P2=`!>3ONSS<_;XHJhO-I1Lw%}Xj5gT@Bm;J~Ud`*546}lQs zpA5A`M|-)GPZUMcN6P`lH^y%Ye}I8A*p4EfY;n34$Mc@(IWq(+0;OaIDnS?=Ev4pH z79j&RnttZ(9)GWu%u~w*dLqORBW>-t6TpmlQnjOo-8ia89Iri4Q7OqcYVB12!>QU>Y6pAa!{ z77WGY7SQf3W9NNB6_g){!IR`;bOV=$8zRDLrPczdmv)u6%zeK!B3=sfb)$U;jgwK$ zHsE1&D#eIwX5ZGRnnb8Wdt*?%Av5Ik_!b7Ots;MUJ~a_BamqrWOe-7ke?cbwJXC+o zCgpHqEsKOmFHQMiF947vVW7z%<sGO8Nk;42B^xdkduoBNty6Kwk_B{S;*genZc z_fyk}Ls?p12wJhJX2Yp{?Rs*A9Ibmdxu{2x)6(bG1VWN1(6&BZh(2#2FNUIN)>`&N z8du6@!ITL>pcNg^CJ4GNv@o`F$9531aB5*sO0uOWeCc9Twbc%Wi9WWfsw?m}A$Ciq zrYA-#I#?O&em7sN_DJ_j`evduJG}1%dRL^b^Tq!XA;LtWyv9FC6>VexSTpUZUo<~m zGAYR0c;W}V`;vzbN*j2i=iD6Om;2S7CK|$mmC^jcXG1L3Y#1^{d|Bsk9hjebGTS9O z*jx<|5w#QflT=bg?FV&g?|V)^9Zy2B;aV@{d!>v{iA^d~bh}2l+rKeCIP|fRDxG5> zLNk`m2Yf3jEcaQW3+V@jA-*D2qp#r^i2it8O1AfbVWP$gbk^Z#)-UAA*AJ9bBV9_> zp+yNOQZv`}Cl#c!{%nWaDh2oIFj9Qb^Jp=Y&(_<|dlGR(Y#d;+vv zv?j=u%5B-JJ>XP@%;1^@95#NE50i?cF)`kS+9cM5SxWvrs81v&Z)kV}3a`g@QaX`l zplZ~^K9sQR8H*0kr4%=Xs^gA$7+C53PQeTn1aYM>6maI^?lAb20g>9nln@yUxae>0 zlOjd2c={gK3TxBR@^($hwvP$FBZ^w8IoBH^eQ2w!6Gat|<6z3fsH#inJuyBxjyP$! zL3V~l5rL*!vCfkl@}0Og3&KW5!yWfT z4gpfJ7bi&5V1vbv&I34VSN5vUh9s;8S-gH;$Uok8R2Tb-fIadz1>plh%dt8i)sCSI zo?7Ne^<-6$vD8_Jw&Wap<)@X^W;>GcyD(wD*S-Pau=bPZ|q1SYh2rQnN8VFu^X7z4P*7_*1DmE$^YjBaOfq=R&t9y z#2Q8JJ2bv|2O`G(uZ~+9Sf8p{!#V8(No zNv)}F+bb_xdVHz-l>kbZAEVCVFX50a;=bmHs)441FSe6k6qT$S4CY&!8vdJfpiRE+ zogHlUv3-u^^OW(P3~gq}ntVuFtxMBvKOTIX^B}GbQ@H+jU!~fhBJ^z<;1}lCSCZ!V_iy)lW3P&C#=qn9wGD%`qhhbg0B~n zZkX9PJ$-+g|1CsTZhJJ>9579?Qm{8XMSY_BI5u4>aOQf3a)=1(6zjE4VtiP&F+YKU zXg$I8BUao^ax5j0VsmOJ5==-DB!FRksro2FG7dD*5qPaBk4#gypNyM zEDba}wQXqo;^!VF8>jh4B}x7%-T(11yiwrgk9=Oa*ncJj26!;tM9g5)KBGeJMb90@ zcY3@Kkpu?w_?9lSJLUjL%=(C%T;``FfZ&9brm8?I+azK0i&QTY?*SLT`XJw` zDTgsTk2;0BIY;*}!EEYg-$OjgmobGPgW#iiZjTBvnRVM=2N6+=7B;mTqvr*Y$Rux+uietK9e$}Siv+`Yd*$V)AyhYcQp6+`EXTuD24g|Dbrr06pgu?)# zEML#s4fF1}`-Y2xg1>_F0>rUEAti7`6UfaZ{*!R|mHKXtue%noDd`AGN!{1<2m6e3GEB(WakZ#TCmWyMlH>`H8;0lxE z&@U%$QmH`5QIf{|2t9MyQM784;XphM!M$jF^?nV`qlQYK#O>vj!XWLQMlIo=$xVS( zsEspD@8G{TS(b=mkEV5w`DzOelOlDHGoJ8&WU1gMr@G*|k)mY6y9@a4v!wU#eordr zIZ)7EKC301b046hD)DrnIKtEH#C*z>FXY7BJ?yDi+8amoX0`RNmIZ@`qeN(7 zI=x6I-l&Rf?M$A=Xpbz?f94qk4x~!Ca#d`Y89nBw16B>miuR;D78K%G2vU+4kh2cj?;5E3n*YXY zq_N}f9xIV*!1cR~SJR?mJ{55P8~}mGfyT;U=J{R7K%8jXZ=Cdcd`Gy#u`nL_oN)MD z&d6cxH8RLmu*P2d@SKEi{Vrr~1sos2KB~VP`yNR^@*liDI#s&MKrGgQ>_&>zA?mQ1|XGQR^B z+q}6-y?`Y6EZ@*uTOE3`v@*Z8(OOii!PpozZjt<`I|%3xZ{?~m{H%2b(15o0p6zX& zYR}M7VN4C-d!f1|7Qnv(4R9R;pE^gYdhgQ=jJDrx=f}qk-^{p{CFX4BHK6i3W8uBD zsRY@{A~(=9DS=}pU}&wjsM>1GqY5xikDu;?Sz zVdx&-PQdiz(N{NVc6IS3crm=2qz;9K{%@~@zDyNkRpe*BVR3*7j*|c513<=ZM(WB` zuX#l=INf6DJxRetrAwv&tm48e_8t8+rh&YOZY9_S@czh?_K zHxZx|eQrU1kr2`paEjXss53LrqAu8FyV#u?@A!`(M^PZ@V>cz*Lm9rfpM^>#PszP` zAax0VNZ-7<0q9lZ;uts+8gYUc6>NaHCJopyI3BoR5R52My2BGTVpu-B0_^qou2Mk= zU9tqAtsiH-1r*w{_tCiK;3iLsE$)G&Brw?Cj9^2!{>8BX}lB-L*LV$PZ1) zKu)m}Nc+P-C}chX5(!`G_D7@J@)9l?FRfhRgce--58#o<^TIphUksmn3VdaZ z{h2X;VbVuS%+N6KT6Wf)2p5EQp`z=zOui$auQtk}f|BbW!pafR%Gz$Ubvlapd#THOkjMFW$V5QOj@%PJ{^X+UY>{F>g}CHl zl0EyzH!u?oh$dqt84WN%895-^1#TLg68h&L+aQ0D3#@ybjd;B)7iX29VLLS z6{70W-OB|_^%x^C7VA5B;1?N64yl|a4Y)Fha;`AitX;KSGv`XjRyz`(d+6(>&tx6#!*miN4tVF6oN z_6u=59WUt!T4#`!qUgV3|1KsLwUwySN4VM)p^RZ5<_I#^4~sx&djupiPhbUT0y;yo z_iv=x2ME0Fzyadqy$$+}N^wxq&4I392GoXyehRk(KooAg`FCk}1%O@q?nDX2t~QK; z*T4no5s+nF%av{XzyLyoGIaRN*7@>PH;;MSr1$aCA~Z@@KK^~wODBT*hzk$yNP&Cc z*r^XALn*R|}=zcO~hPAAwnXUKttv4(Rk1N6}4?OWGuZ z{=X7^0;n+qG@TzylN@LGXAHLDI)g&@pHf9=rnl(!h^60d&1+>~^4P zYRJffCP^O1*Nk&~7YdrINMy{l9B}-l0+T7S3NiFze`wjbPg@NDu@DI37j4vq*Mlp8~CXJ4z79!e|KvB;YbVxM?;^VyEcJ88O6qQ|TgtiMX z3e^)+&-GR_5uv$*dBTpG)#=pQ-z#))Kn+nuFAsDP!EtI{eH(vV}adh{k!q@*#hwTkvm*~WGeVj zl-wxk=~*;|WMGRzg`CCUPe9CDQ8?Fxy0E;Hd{!)9&i%22rmatH2G-9=WA2m0AjF0Tu&13Dr{#XEQdpNXufI4VMT5w%PjzGqC z1!$CXRkJ97OfJT2r7IMvGYeoMyUzt3$M-@`TXv&4yQS5$JeNaN7oA1CdzZ40qVva5Ra4$5Md4E zO_7j9oimPD0^Z?0PL0iI*7YfgJLH9O8$BRS)Rhf1296Z_@@FAq?8)h0X%s&c0;Upp zxj49Oteqc4V4z8Y#O>h=3gf_x?u`afXP-!^X|zW;lFtNBX?j^ZQs_h2MHq6FjL^Oo zIT*wIlH3l8-fF5kk?l1j3;LN?LHLAh>PL6~5=+1l)=elf+R|zRvLA^n7N7%@lB*8@ zb(Pns3HMKX1rLl=6b-QIezmavO36skr=9~Q^hInjTpv&a8C zBj1ok2W*Q`sVA2g5+*Ui-;|Pu zT6jc9;twFL8dyi2AO&VTdR@27Jt#$U!&nKNv5K_K>L`xH5(r3SB{w_-#N2q?|2Vn- ezxv--?opjfu?J2Kmy%GxkBWk(e3k5ru>S=d>D(Fs literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/2.png b/leetcode/3301-3400/3310.Remove-Methods-From-Project/2.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e206c086863119740ee54367161aa09f1afbd7 GIT binary patch literal 13201 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 literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/3.png b/leetcode/3301-3400/3310.Remove-Methods-From-Project/3.png new file mode 100644 index 0000000000000000000000000000000000000000..b9056067b19e74c0839146962c5dc0f674d1ee65 GIT binary patch literal 10776 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 literal 0 HcmV?d00001 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md b/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md index 4ae8edce8..08711fe6b 100755 --- a/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/README.md @@ -1,28 +1,57 @@ # [3310.Remove Methods From Project][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +You are maintaining a project that has `n` methods numbered from `0` to `n - 1`. + +You are given two integers `n` and `k`, and a 2D integer array `invocations`, where `invocations[i] = [ai, bi]` indicates that method `ai` invokes method `bi`. + +There is a known bug in method `k`. Method `k`, along with any method invoked by it, either **directly** or **indirectly**, are considered **suspicious** and we aim to remove them. + +A group of methods can only be removed if no method **outside** the group invokes any methods **within** it. + +Return an array containing all the remaining methods after removing all the **suspicious** methods. You may return the answer in any order. If it is not possible to remove **all** the suspicious methods, **none** should be removed. + +**Example 1:** + +![1](./1.png) + +``` +Input: n = 4, k = 1, invocations = [[1,2],[0,1],[3,2]] + +Output: [0,1,2,3] -**Example 1:** +Explanation: +Method 2 and method 1 are suspicious, but they are directly invoked by methods 3 and 0, which are not suspicious. We return all elements without removing anything. ``` -Input: a = "11", b = "1" -Output: "100" + +**Example 2:** + +![2](./2.png) + +``` +Input: n = 5, k = 0, invocations = [[1,2],[0,2],[0,1],[3,4]] + +Output: [3,4] + +Explanation: + +Methods 0, 1, and 2 are suspicious and they are not directly invoked by any other method. We can remove them. ``` -## 题意 -> ... +**Example 3:** -## 题解 +![3](./3.png) -### 思路1 -> ... -Remove Methods From Project -```go ``` +Input: n = 3, k = 2, invocations = [[1,2],[0,1],[2,0]] + +Output: [] +Explanation: + +All methods are suspicious. We can remove them. +``` ## 结语 diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go index d115ccf5e..2bd87966e 100644 --- a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution.go @@ -1,5 +1,71 @@ package Solution -func Solution(x bool) bool { - return x +type unionFind3310 struct { + father []int +} + +func (u *unionFind3310) findFather(x int) int { + if x != u.father[x] { + u.father[x] = u.findFather(u.father[x]) + } + return u.father[x] +} + +func (u *unionFind3310) union(x, y int) { + fx := u.findFather(x) + fy := u.findFather(y) + if fx < fy { + u.father[fy] = fx + } else { + u.father[fx] = fy + } +} + +func Solution(n int, k int, invocations [][]int) []int { + u := unionFind3310{father: make([]int, n)} + for i := range n { + u.father[i] = i + } + relations := make(map[int][]int) + removed := make([]bool, n) + for _, in := range invocations { + u.union(in[0], in[1]) + relations[in[0]] = append(relations[in[0]], in[1]) + } + // 然后通过dfs将所有的问题方法都标记出来 + // 这个组的数据是有问题的 + problemGroup := u.findFather(k) + // 将所有的数据开始做标记 + removed[k] = true + var dfs func(int) + used := map[int]bool{ + k: true, + } + dfs = func(cur int) { + removed[cur] = true + for _, rel := range relations[cur] { + if used[rel] { + continue + } + used[rel] = true + dfs(rel) + } + } + dfs(k) + var res, keep []int + + for i := range n { + f := u.findFather(i) + if f != problemGroup { + res = append(res, i) + continue + } + if !removed[i] { + for j := range n { + keep = append(keep, j) + } + return keep + } + } + return res } diff --git a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go index 14ff50eb4..f41189d58 100644 --- a/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go +++ b/leetcode/3301-3400/3310.Remove-Methods-From-Project/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + n, k int + invocations [][]int + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 4, 1, [][]int{{1, 2}, {0, 1}, {3, 2}}, []int{0, 1, 2, 3}}, + {"TestCase2", 5, 0, [][]int{{1, 2}, {0, 2}, {0, 1}, {3, 4}}, []int{3, 4}}, + {"TestCase3", 3, 2, [][]int{{1, 2}, {0, 1}, {2, 0}}, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.k, c.invocations) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v %v", + c.expect, got, c.n, c.k, c.invocations) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }