From 283009889d06c37c88fa2b1520f892ee9360b773 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 19 Jun 2025 09:20:19 +0800 Subject: [PATCH] Add solution and test-cases for problem 1311 --- .../1.png | Bin 0 -> 7147 bytes .../2.png | Bin 0 -> 6876 bytes .../README.md | 36 +++++++++------ .../Solution.go | 41 +++++++++++++++++- .../Solution_test.go | 23 +++++----- 5 files changed, 73 insertions(+), 27 deletions(-) create mode 100644 leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/1.png create mode 100644 leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/2.png diff --git a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/1.png b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/1.png new file mode 100644 index 0000000000000000000000000000000000000000..c9c7c97b47f0ac7bad497ca188af66fe5a94fd2b GIT binary patch literal 7147 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

) zJ_sGdyTeQq>Bne?b7Xxo%yAw8cPX ztaooO((!+MNi9Hd_0>(dBB(CXyLV4c0LhH-)uef`K{7Jryyq>qC{$P&!90#5K#-J_ zBzCJ!GjCNZ5IpioICbdIp-v$1c%tdxL2bQwED|&Xd;}S<|Ln60wP_Q?WpYP=z;4$z zE}#_%;Atl&Ce{fAcDqf}IYCwsj$wMbBJG6coevw=OdbIOkHLqa!rS4}f$70KgQ;I2lxRJX^I2Vrt(JAn4n-FKyTm7H}ZA?z%)~`_@JB@^W~0 z%KnTiS9%?0_yMxb&$@LA_2}Uio8$2#K>#-F+_{Yd4g?b>wBUx+brD>5bN%&^Qa>M9 zLhu3l_Ej_q(t-3+T-=zut{nk_2OoS;ATd6mKmgCXY17y`-%W7OJ@-)e?g>((rT_qf zMp}gF@g6BD3XK_4Ts4{W--u!N?)lckS9G7AHy*RLTYczC)8H4f#5|6A|fT-bs3Fw9FLGMb zP&-(J`9QF4)Tmy}6Fp`Yv8br8aHO2lL2%DK-rXSU^~a5i^!?=I{eo9D)q5JPQ z=A3|7(zL0auDD`OO;-ce%q&7Ph@_-ATC&7qxG%hMqmyD|8`9fvzpW~>2$erbv-`r{ zMj5D6@OZ2=apLHsbyPb##}LIO$;q)aY?wupql+42)+{?kMY*MQ97pr4*w`?-^;WAv zG@?S$(N-!c>BE`SqZI5Mn{5no;-EpjxlT^cI{=B8Zry@}?M~<7R++VnsBuV3Ya$#h zr*5d`HO&WzDlJunH07VG6^zYw6s9UQp zz<|k*kGJ!#T)%$3=6#N#ZBRzuqD36FZENRLd411EN($-|gM}6-;4C3JrTC#0{Vzkq zi@`h~me8+XOD=gDInw*)TB$_@P?j!LxSYFr^EfWm#+kQ1JAi=EjJ^Y@sWH@{gOxpT zt&&c@`9RJArS5(DbmWV|ahj<`acb=gQZeCZA_1hGc3LiFW(ITF6UwfUoKQQ`h0<+s z<1oRIk#@?<%i_hy2}Unn&apvItBJtUDW_!e=j`6y!rTD0GlIVP051^*uwA=`Q&CYa z&k0UMFp0JFiRxaOjv6L(32 zF;(mGF>xSVcIspymkV|M4r@4*xHM8{}p@^LK6)5DRnH@Kk+6NzFmM0-zd=r zSpf?+Y*-Hggg60=V4<#j9ZGCGAqa~ib&8*;bM$pANl8J6j%cA>nu@<~Mk`jVV9GdN z8})QX>Rkk&e)rvX^xk{#(dNyY`PR0~%tqq-p^-<>KOIV{&qrjWmFEdvOwfOzbLS8N zphm(3=W(VNrU$(U@VYS1)#&5(1A^+N0=5WW9t($_Jh;5_;fEjor&rO!g$ucn69)Pd zqN^9Obzt_QPY+U@xP!QJ=g!=TL(2;98Q0@1Sg?TG`QXTgJ_6`^3g;4F$F9bl zpmQrO zw7E4>cT-%`Gko}P_Vka_F2)3bKgUk&C{#=%SY!lkfJMh~50`i%cB1poY>ew~5IX=> z?E34kug;ItrJxZ6?nlJuRjXUdNe=>OgH@|m(U2iSxFNKjcNStE&;qDvmeoM(qyzy3 zji_)V+Ko5fsB3KiEr94Cl1WEt6lH>-u7bP)5>-V-Ma*r`V;%vKzDq8-gl|HtYhw%( z1jmstzW9Rr_wUa+2R+`5h8zie0Rw3Pq!Fw-=)+zG9o}zAKCzpDNX~IU3M8AIB>wI zQ)yffK#)~LbPkJvN*k>~2o5Cp0%-bRq|3Ym3ItdPwAsN$njosGz`XTa06Js|XV0F^ zq*?=uu|WU<{}6;!wB-dOS1UnO5M&o<0fYJifdc}_)~#EqM~@!-Q;Q=S%Ju=gIdkUd z;)rU3fV|yR#*ZIQ)22;hCX#Fuv}Vm3W)Q;!8Q2#HED%7@psG)wK73-3nY=+PVAQBl zTqJ@rya15E0RbpoXg&!t2WkOjh%cRuxWM-9+XF!h1QrM&D9%L9ANuynpmiZHfFu#h z$@G}YHbGFS4M6HZB1dg)0AB#*-=L5qIAx^b*pmtb5bzAZK0;DQO>F>BAuxqP5+jgZ zPihcg;b+X4!8=y1Hg?bgxQiL(WT+An<7eWEc_9QKS3|9m|j^zV_N{15FDA zE(mZ$oH=tQtM6J|Az!251h9DVVh#?0#1ddyAaFt8+r3~Pfp<{7(FH&P?;i30ssmc1 z`Xc+Z0O}r$Tq1u`f&dFWefo47I&>(fd*LjmrKRzGNKsKy5oTI^uiSv^Dz z!6}642oDcuQVHq|Oj3!)0`drY0L910^R7ojsQM6?mBx)5Q%p<@`yVhZ2J{<@2Lc@V zva+&x=Y!l?-vV<3KLT1IH8qvf%VzP3M1kWL8ym|Ft@Os`!SNC)W|)cVuDi}i$4TRW z0G@rrh7FlhsAoYup+SQNT$!w=GC9M80J#7h^NdpN{lpVbutq=wO9N;G{eu9dU2p)6 z#^pmt6$GG=c+!#u9dIB($QH-H`tttO@L>Riii!%ego0%Zsm+~e{5hirm>hlYky-@bjNX#@B+ zaB@u$_$i=`qaCaa!Rw;$QFTd5O5%v0ECC&U%$PAI2>cb$#-X;g5~P)3BCt@h1ihJY ze}f4EKLzSqi?{%^0?NtY55N@2Y)6k{Zu92NO%V7iSQIS;CGGGLf`fzkgdj5>fhHEn zdzc{bQ=+4zH9c2jf#46oIh3V=z<>rj$pnF)l9!jqc3MlpO>OWCP+TG_?g8GS34&U9 z(%=HBEr<@{b!&A_Q<6HEJYvx5{#E!HL9$;W`&%a11wX+QiW|nFJFx z1w;~X3=N{ejKekt)eJ-sWa9LC%^czoxYifG4C*5cQix)#x&x3h&^Zi*6L1dn3@Xtg3YD@ZMYbdrK1B&Fq*MqY z2}zQKB7_j)|NPJQy>l6}=+5oF=bm#r&-uKcnYnj9_nz~h9%E=?q-WsYRj&yd9IL^YCXCP`*~rsOuumBw8fOXnV) zW$=)}GH>2I*}i?d3j(Ln`t|FjXjqXn?9fnrRea*j^@`_2j~HVNF{Yd2Idd#G$9i*Y zF~_#zpKFU>pI`ic!wre+5-0JQ@#0VOOVjpEW$4hM^2sNkxFE12ZQ8U+hTl9~vYTd$ zx2{)=k>(;UHODS^R0FUQlkNB$jq<-`IGH%>B*|u$)3xa6V+O=z?!^s`Qm*W#- zXz^~g;#y@${P`w_$n;B(o;_sa#*HorqOtg$dv+FIt}np4_gb|0rLR4v$QT=^#6_>u zdpQ*h&H};Sy?bTw=)vNz=@(;SU=eI_nPSH~$SaBIiE_ssceo(XMQG`*y0sGTG2VcT zw&P_gn8}AEOOKO!$nM>{T@XZ)R;^kkX?bbl8Rdx{>#u}}Na~X$xpi`7!-fqm2qHmD zWKwogz_fGF<-6S{*?HMc@H5yO1Uq-`l&nTsVm#z500gh(%af%=s}{0n&mI>9;Zn1L zX5ty<5yQb(mE)?&8E2f~f*>54HGh`Gw~W`fJcySfbM!X?oMw+k9ieKHy!F;wE(j`1 z`1h3ySI5=Y9ELfXnWLRKyv4uo((`?ZV-n@4qmObyP#IdVc!79Zdi4O{iDCeZFY(&) zVjv9E#|@G*ljVaCK5#)0Ds?aFF2-a{3sPW?>~g$}XPP5bpIE5UuZjvlxgZFU4(fJL zAONJ}N;Jpm<-9(%m_sbrWHL_i$%!YP=z<_rO2|$SW4j)Yo?7T(<-E7F_`T_xz_;3v zdJXHjAPAK_UXM1nu3G5P<-E7N99g%g31u#SCvD!SWh~bF{Bs_`NiHsO#q0W952=Ks>x@cedfjv!l60K=7^`NN818f zk(KOC_R6G5ljP4o|8zkRE)AM6NQ^_w3Ek~50GN7)x2ji)ii+%>Z)krI{O^DNlY+Ag z#B+p4o8}(z%j8_XT0S}U*kfhKjvaQNVrL|p!b(p%|0MC$@+i-noiG3Me(_fEDgbQW zyjg+R1wjPO#<91KmAK3}eO|r&x%L{8d~>q+l6`XNrI*SVUwq*N05}T-L5{F+;X+Bx zO_lgI@wVX#NlTI>v2LQIXQs)_G z!TLY+OIq7B@hAD^gcDAXHEY($Z@>NKv?+CFEh4+@k3arU)yQ4Dca^xLI7w)mAigJk z`b*PHD1yZ#}Rf$WE zlayX5lC&TxVu_>vZ~T%sJ5RE@XQ_oxOG}d;J$lHJB})`nvat^!_CZimL;wbM#x76#dnbGk8Kc?RvwYd0OE!lZcqz% z^wCGlA%`5IcCg>?m-zU2iHnO11d=>~fD*4Uct1HgSq?hrAUWxzlcZzEj?$-3A9>}K zSLBypeo{q&Rk@WT)4?|0vQS6+Yp^?wcQde}Pv z!pp~QN8b1B*;Af);t8j-{R0mK6DLkoi^t-Y-nsmZ2w_o6j`DUmKo~rDuoM;++O=-L z1wna)qXv&1T;SVpzuoW8d+DW@lxTSL(MOf;;ex;c76V)WIgZ^P3Hi;!4;eB3*Z+x^UO0N&IL;925ErkwToBld3$R1c-gSEP@F$>mTy)Vz zN?CM4U=w=hop+>Dr%p0^_H0XbCyL?er=PC;5IS@Z7X)E&0do4!JMTQD7+T@iC(CKV zgb8x)x#y~wf(wEu6G~v`&YflE%$f4@&p%uCy@;LOy?e{;x8Lq`Zs2SXAfNH%U3uk| z>Kp`uFeebZ+2m5WM~N+sZGnV8Mc@q;(N>L>Yw}5S?^EU@_sryZGXZ z<+95zQ;QJ|A`&@u>Qv>Mc=5#-T@YAJ%a$!u7D2SQK#)HD^i$P$;Kmzoj7Y@N1wkb& zf`0w_MU@Mb)JuZgfCLm51Qv3EBab{%C3+$jqD^Efkphpy%BDRCVhaTL@A1}Mef8C{ zb?a7J+!MONBab|y#KPjmi(L@trbUYuNrw&{Wa-kS%1pBhk;j0D8Zlyo)6PUc4N_^}b|SdJ^y$-8TYJ*p-7+*y^!)SBOSf*_6c@0AE>N1j{PIg>w!#h26I>8P zm}p;f_St94%{Sj{TXqXKckr1#J~-ndFC0FqE4cV%}dtp4+8Q8s3v;jjW--s3y28Aq2&N> zVE=Owk2&TT89#o!`rSzcH^8JN@r3d7my-qAShVDcVJU)pdSRd zcZv3q35;_0bMD(AQsotsFy$0~$s+ncxO1SFV)v&p%%tdg!6Q z-QBx(?NSOO{g%i|di?Rn)tvAXw>aRZF&9lUGeW;8z05=UZ(~(qehLCpMc$B$DmO~v})BVIqR&mq*=3Ol9G}lwQALpQ%*VM z@A-J{x#vQj58Cbkl#GlF1tc~V(Mmj$5%8df4+28D>~?l~R#uj}IUbOQk5nxnh-b2} zwQJO

_>BiixtLoqu~oYZj>C?CMcU;g@?h#ayLH&GVG5*H%?GXY`Ch~Zd5*Z&D=8{M2LZB~ zFU-!)RyF!oJ!pAESeZIN#6|b+-DTanby2ww=78^K5n$cX%5-8r*o@VxRg)u*I6^MD zvg@w9&Q?jT70n0w6Zd=7RaYs0L#03f0NS=~t3Jf;4_lgU zz4cbrk~Y%GCmS|wQ2G!o)=5NROzqmWmE~4JrB+!Gu;{pJQU07tBy?a)M@m-1_7OMt z-+#X&=L3_VVm7okXQD6TCmf!Vu`vLFin}1J%`-b^stXHB~JZF&G{5j+mtBcex-y^Ch^W zQw)GcIDk55zyc5ixdBRDI7GZd7Z;!pB6C2ELh0ANUauA|$$Y@+>Dpex?fwr4SR70r zT?DcTD)E3QDtUQ%+Ccyf7%)I}5($UcnH+JegGiYJ1m%gVcJ10J@t{i#!|_X0Nc{r> z*e3C8T|{Jz9D!gbP#)3>5a3BHz1u>iV9A>6%~hFP84$pxtt6{JfTqpP3Wuzo6ZA3^ zLwpjtEVST!P%~Ku1fZT2uUG@Y%P+sIavj1U5?ic_51@ns02W9mM@Afzhfu=e`3D5Y z9e13iwR2X1;O@KcR@uJc5T+ZuQ#a8p8?J*Mpj-T)_t6NP%~1vfWUJ_sL(v2QnLae6 z4%d#q_uhN8-XHUh4!|a~!bwNc3n2lzu9X1+X-m2^(rAGI&6{9SxMvg0ojX_MP3oec z&%~-g9p6D>FX?C{f=U1O81lfn?BZyE;I6ywQvUM&nKXPGzI4LBKPRTflL4`#W(uxB=`x=s7KKMA}&t1T@{?OC`RRjUtln z9j+o(SyrpF-5b4wh=xXD@(`2w-6Q?{0IZ_H`;itsxWFm?DHTpG3j&lAk`-~8I+bwA zlJ*^`8b;VN89MYFa3Yadf^KxvO*fUNe3qYCL^BB35m`D;BaluV#D^b#7}3wg(?;;c zX$N4T@Z$rb1#kr&)hf<0q_~9LM5T)rrb{G<02rCJx;l>2JPUwv@TOBZA`UMil0;G~ zDA@V$Y-5rWi8xUwXXhP&qQmJY$Zm>Tb=EFY<3On$3YJ|`&C8n)0)mYjH&z^AJEh_?A1IZ`e+pkI&>9+Vg=Uh`0b;fG8oI zQbOR0p_ifYVTcDFmMURNo;Z`3FSm*<;y@um1YLy^Zc4RbebMXy!m|_p#Rey2jV5kY z&?z_{h(Ulz)e-s%)=VXeQ!8JP%7oKI0;HXK>ZvM12X{bsAUF|ePZy=zh$AK#kwj33 z#m9oNOGY#sgj!8lF`d@9PaI5uBhnGU;CwI-h(S8O>h*Ksl%nmG$a4JU=O$Y{i9a6W>42|}F@QqJge02d@#6tH3UV+qj&13e|oa{c{p zQW4w*boi!3n`8wR4AT-I01VhwutNzGf?Jf(DL<)m40bGGu;6eP{{NnP?opG$XH!q- zq~1jU_51I?mybXGSmw=}r%Km(E}joPCfK2*^nAcYm?v}%luN+Qu4Yb1`6s`C*8vat44A$2eL@7nIRID$&0zhF ztGHRrOm;F03VLzpG5`w?1#m!g@WFzm-NulFx`z$-JP&2j_&r z-@MNI7U(_pZDEHF0UM-#&dJBn!qu>%C=s`*=heO-2yz1~5agc|3GPN#6Yc9>d+jy5 zc44!3TU%ry?qIlqQ{opTiQIl#&mj(MeE;?a0o-8RxN$1K0rB9Zeun4*+&fj?G}yB7 zz1zRlJvK0o7uwu9skJd!wzoWKoObj&>t@x*sx^Luv2 z@i+JmNEIXfJ5r4ybrOvraF%hub`3W>4g_$6DO0AXHo3T4?Yy(_c?5e6=xU&KK!N}w zbj^uq^bN8zH-HP^9VD1kL8B-a1mO~K0|He<%*bu9V;lib-?i6Xt6IW@+Ze+I!9Hlm zjvXqog_wgKPevm~f-c}7F5o;6u=|5e7T^YU(hU$%!PCzO5IKmP1p){TfGe4FcssR~ z<>WIus&WpZlg?#uBna63oR~^{9e=zX4wr%p&^mU|pg~TIdO8mT5Fu!|0WIq6ko`>D zA6kQ_+z1!(%< zq{F;p3Ir?!Rkvg{lc*Yj%-fI&&=Do1J1a@G4kl-V03!d8gj8xA$jG&d@CuUb0vB-j zu>j5o0kmk*BGs0SpH`S?l~qfNPXqcchf43>y;ZmuWsx>994|wot+cc>Nk~Ze zd+;}{VtAjnIaEB+A(cki9Jfnn5hoSI9?&4bqsOAtCn+f@QGC8QsaG#q`t+%8+V^=f zb!x6GSdb&DR#lacKTegcTYaViSxuHL%Q7vBx-w}JjiBpF&z`kSK%|M+8!vvpU-eKz zyl}c`CECNeAh3$aIYeormtRtnS6a7Dmht1$mPtD8DTo*aB| zhRHSjile|K=%3)goWj@w0nQmSc*J1W8X% zQ%NP%8MsL$78A)M^Z?4uO*ePFPgbwiyYLl_1q)K7cI{-TQKOpDKgefrpx)p-5Mc7P zY}vrv`SCJ$ZgdvE>@gNvBteszFqI}O>jOD_;cjPRPzQPN7^(+Vro}C@A>r2}Bsi_=aua6s4t?E_% z3tSL{NJT{*W%6V_3&Q6<^ibK?>((_SKVP42P*|9#j;wb<5F&N$nyc8hRa*S2RRIxE zSg7wi9(>TF&Tnu*5F%w~`z-Mbz!m!T4d?@if|4R4(gQQMVZ%HZ1fi1G>#>9bbn6z- z5fT#v7J^QH#I|jQWM!qhAPAMJSNAC!-YRjx0-+C}9O~jgYt|T2zkY2O1ff!=PPs}> zTj|}KIWwRaOq{6a^QTSos=P%P1R+vkVS!AY8u^95JILpj=MUgDKrni=9uN!|kfO4n zTo8mvbLT!PM;;k3I%59F|4yCCzBh7Y00cTh)d8Phu@daVw&pgv8KAJYb8Tg$z zg$|`Kzy(s&0po7$APjEMv}uku&mjpaL?{_(?z$At{{2&=Lx=WmC^=l>^zd4>Qf;47 zR?(O+AyI1A&Q<3$*qH2}S+sifD^jzjU+ZqwG3L(oO0{a~>cDWDlQVJ*=ggTcSy_o% z6HFqTNRl9#nN?JyO$U&3vW=+@Zqz7S`t^%b%AFk-A3sFr&dH`O(@51vIHVB8S#<{_ zWt?@^vC_D)Ph|($W%029?!Q0Yf1aSI#G{W+Gr>?(TDSHpcd%7KCjw5l+(OBFf;4H8uNq-c9P7~j z14Teg%MOlOf%@6{r(hIcbGXC^6ExFLI`d3na7TD6Q1t5-L+ zW@Z|@5)+L*xQpZBjKBDqoNWA(mS%jLm1TTtj& [!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 +There are `n` people, each person has a unique id between `0` and `n-1`. Given the arrays `watchedVideos` and `friends`, where `watchedVideos[i]` and `friends[i]` contain the list of watched videos and the list of friends respectively for the person with `id = i`. + +Level **1** of videos are all watched videos by your friends, level **2** of videos are all watched videos by the friends of your friends and so on. In general, the level `k` of videos are all watched videos by people with the shortest path **exactly** equal to `k` with you. Given your `id` and the `level` of videos, return the list of videos ordered by their frequencies (increasing). For videos with the same frequency order them alphabetically from least to greatest. + +**Example 1:** -**Example 1:** +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: watchedVideos = [["A","B"],["C"],["B","C"],["D"]], friends = [[1,2],[0,3],[0,3],[1,2]], id = 0, level = 1 +Output: ["B","C"] +Explanation: +You have id = 0 (green color in the figure) and your friends are (yellow color in the figure): +Person with id = 1 -> watchedVideos = ["C"] +Person with id = 2 -> watchedVideos = ["B","C"] +The frequencies of watchedVideos by your friends are: +B -> 1 +C -> 2 ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Get Watched Videos by Your Friends -```go ``` - +Input: watchedVideos = [["A","B"],["C"],["B","C"],["D"]], friends = [[1,2],[0,3],[0,3],[1,2]], id = 0, level = 2 +Output: ["D"] +Explanation: +You have id = 0 (green color in the figure) and the only friend of your friends is the person with id = 3 (yellow color in the figure). +``` ## 结语 diff --git a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go index d115ccf5e..233cc66da 100644 --- a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go +++ b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution.go @@ -1,5 +1,42 @@ package Solution -func Solution(x bool) bool { - return x +import "sort" + +func Solution(watchedVideos [][]string, friends [][]int, id int, level int) []string { + now := 0 + var ans []string + queue := []int{id} + visited := [100]bool{} + visited[id] = true + for ; now < level; now++ { + nq := make([]int, 0) + videos := map[string]int{} + next := make([]string, 0) + for _, u := range queue { + for _, f := range friends[u] { + if visited[f] { + continue + } + visited[f] = true + nq = append(nq, f) + for _, w := range watchedVideos[f] { + videos[w]++ + } + } + } + for v := range videos { + next = append(next, v) + } + sort.Slice(next, func(i, j int) bool { + a, b := videos[next[i]], videos[next[j]] + if a == b { + return next[i] < next[j] + } + return a < b + }) + ans = next + queue = nq + } + return ans + } diff --git a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go index 14ff50eb4..f9d274d79 100644 --- a/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go +++ b/leetcode/1301-1400/1311.Get-Watched-Videos-by-Your-Friends/Solution_test.go @@ -9,31 +9,32 @@ import ( func TestSolution(t *testing.T) { // 测试用例 cases := []struct { - name string - inputs bool - expect bool + name string + watchedVideos [][]string + friends [][]int + id, level int + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]string{{"A", "B"}, {"C"}, {"B", "C"}, {"D"}}, [][]int{{1, 2}, {0, 3}, {0, 3}, {1, 2}}, 0, 1, []string{"B", "C"}}, + {"TestCase2", [][]string{{"A", "B"}, {"C"}, {"B", "C"}, {"D"}}, [][]int{{1, 2}, {0, 3}, {0, 3}, {1, 2}}, 0, 2, []string{"D"}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.watchedVideos, c.friends, c.id, c.level) 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 %v", + c.expect, got, c.watchedVideos, c.friends, c.id, c.level) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }