From 53ae8863421ea4b6994d3f407c810db28b1f1fb4 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Fri, 3 Jan 2025 21:22:39 +0530 Subject: [PATCH 1/5] Adding editorial for solution --- .../solution.md | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Remove Duplicates from Sorted Array/solution.md diff --git a/Remove Duplicates from Sorted Array/solution.md b/Remove Duplicates from Sorted Array/solution.md new file mode 100644 index 0000000..6d8ce7b --- /dev/null +++ b/Remove Duplicates from Sorted Array/solution.md @@ -0,0 +1,37 @@ +# Leetcode 150 Interview +## [Remove Duplicates from Sorted Array](https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/?envType=study-plan-v2&envId=top-interview-150) + +## Deductions +- The input array is sorted in an ascending order. +- The duplicate elements need to be pushed to the back of the array, preferably by swapping, because the solution has to be in place. +- The ordering of the repeated elements does not matter. +- Numbers can be said to be existing in adjacent colonies, colonies of 0s, followed by colonies of 1s and so on, each colony comprises of either a single number or more. + +## High Level Approach + +- In the end we would want a divider, to the left of which we have only unique elements in an ascending order, to the right would be all the elemts in any-order. + +- The divider would move only to the right, in a single pass, thus solving the problem with a proposed complexity of O(n) + +- We can imagine a scenario where, where at any intermediate stage, +our input array is divided into three parts, the first part carries all unique numbers in ascending order, the second part contains the repeated numbers and the third part contains numbers that haven't been processed yet. For 3 sections we need 2 pointers to act as dividers. + +

+ +- Let's start with 2 pointers, initially all at index 0, + 1. The unique pointer at 0, the left of which exist all unique numbers. + 2. The seek pointer, to the left upto ptr unique lie all repeated numbers, which also points to the first element of the number colony being processed. + +- In order to process a colony the bounds of a colony must be known, we need to spawn a look-ahead pointer from the seek pointer that moves right to the last number of that colony, to determine the bounds of the colony. + +

+ +- When processing a number colony, the first element moves to the unique section, the rest, if any move to the repeated section and then a new number colony is processed. + +- When every colony is processed, atleast one unique element is addded, we swap the seek pointer value with the unique pointer value. The seek pointer always points to a new un-processed number and the unique pointer always points to the first number of the repeated section. + +

+ +- We have now added a value to the unique section thus we need to increment the unique pointer, the number at the seek pointer is a repeated value and hence the seek pointer must also be incremented, to the value next to the limit pointer, to the start of a new nunmber colony until, the end of the array is reached. + +

-- 2.45.2 From 3e821a932d08baf9f78b34e542b36980ab48ebfe Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Fri, 3 Jan 2025 21:24:33 +0530 Subject: [PATCH 2/5] Adding editorial images --- .../images/final stage.png | Bin 0 -> 8360 bytes .../images/initial pointer positions.png | Bin 0 -> 15057 bytes .../images/processing_a_number colony.png | Bin 0 -> 31308 bytes .../images/sections.png | Bin 0 -> 16327 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Remove Duplicates from Sorted Array/images/final stage.png create mode 100644 Remove Duplicates from Sorted Array/images/initial pointer positions.png create mode 100644 Remove Duplicates from Sorted Array/images/processing_a_number colony.png create mode 100644 Remove Duplicates from Sorted Array/images/sections.png diff --git a/Remove Duplicates from Sorted Array/images/final stage.png b/Remove Duplicates from Sorted Array/images/final stage.png new file mode 100644 index 0000000000000000000000000000000000000000..12b2a4889cc4ebea2f7e0446e8367bf0bb06b820 GIT binary patch literal 8360 zcmdT~3pAAL8lG~_&dw<%C4?lo)nKlSqy{78UT%dZ#u$dt%r8cTifmzbikj60O+v(I z6WNnZYKtz0hRDt(gc*0Ci|hG+#@^bUbJjlVRI6rL^MCW+zW4o}_x-;2|CShAYqMob z<(9%=uw~{uP3&Q?MO<)fC;lDyeND_W5PU3R*qh;D9Ns!13?|J4Oq~J$5N`^V1XD#C z&y7?OIzBW8po%n6MIcP6Bu{`&3jl{8ok%7Hh!|G1PzsewR7DWba2=4P?yRe;io}DX zU6g>J5bznIhw;FmG{Di0z(6X=iFCk{0zmReEF6h}R4jMyw%VnNFb2m|iXRDln2|jF zXpo8*ofr(K&_HnnXdkW%l8k-mG=ETtpo`E0Nf?YS60WNU8T!LX0ulj7z#*Cg(VIx8 zESL`R{}74Jpn$>5hBj{)VlX_3RMH$7oC=~GpwYcZbde+&AVL*ss;aXCGRWwW`zh2l+gK5X8lI!kb@{*B*vVsND!dW zr~oDKL!u`wAOM8>13@C4P7D4}%$r6P1t&5V2*&+^5=3zLXh|We6U7VgnUmE+h@yb# zJ4qC>&-~1~7*W9f#Cc&+Bn%&-7cF>B|07W5mT`VD=`Zvkct+4DmFA;u&swASB2*tcbU5qGRQP%5WMZbgp$RU)7DODzXb<_)JKAu@MXY3Vnm34 zOW>eB0!I`C;}cbsmmU@a)yH42s2yk&a_-!mt@Y1aQ3#!H5H$2>2JLI9C=}`&1PAQ2 z{&Yrt+KT#Gz(FIvL2yLv)uBHc2oNg>u1~bx5p~cA1a#v3;+CLM1Y^PGRuQ5TI7 z9xJr6x+N!{!zGv|(pRs}JbvEcOz7Q#zCK-K)kyYQl*NYD)@#+1U4}8?K9|Yi)x8sa z#c!Ei7n+~fjJN3zZ-*`V+luXX9geMKj{tdnYZi;IkJzrhU7)vO1;i>|vmS6i%}O$c z#MT4r#6UJ|vAe_yTyDi^VIpox=_yl^8t`I0UhIldBSu%4YSD}|exf+mXO3Csk25wlZGzEuGV zWmn-+mDu^9^-Bw_e;GrkHUS<+LC39A^c-VC_G#y~USFaZhHs?uFvN<|-aKv|p|-kY z*OXrmP;pe^iQj~m*pJhpJ4TpJ0s%5z)7>>asn@;k)ZqX-8jj?i5$mz&e3gYnxT@i3 zQQ||3gbK^pF3WS~Bd;&dj2+i#-R9C^<6rO37%bEt=^7Yi@KCBiy+0W~at^Tk{?T)!$_TX*FF8v_VX@1)@?q>?kG-j5;V#}7 zU?sOx(o%Bk=Ba>~-L9H$I2#-(8x@?+WLg_L8Qro*c7-`TeDr!}6bGwsl4SfK(|4lw z6zR@6-^FgGD+5O8D?E0n@~K5)qVL=EAaF5+Hhq^a|0r!pHEx;`)P;a?p|9*+Q z@y+B%grEimg_Gsufh)PY-orE$ovt!$iY{}e%`_a`GadzdQ44->Q#Kw z3G29h0>o;uG%6uxKyqTT=VGEpj$P*fEB0QlIzG56d*oRmJ*U1nPh(wA%?>dX?M)OH zUQ|yyQna*rniRJVqj{D+vDu-wsTvO9ZOE^T=6r9;Njj}TR00X&(%wPQThXomsnrA$?dhFu#nki9`U}d zT|3UnQ7!11l}u0aiwVvKlPy4hbU{}8{di5`^F|r&S&IUtuyo(sTfN>e6u3aM4@q-L zrf)_5*{dUp2VkqmY6>JTUENh4F%*6A)#0+e*zz_fY4)Aa`uCw>&q8xtTZ3J^o$v3j zO42`vHJ(1u2LI>|3n`=jN>Si_H>zgZJpFPg5!bX*)8 zY2E5`>1M|r_=$3p_x#T1vJF}EyDx{1{!D!kcKb!x5gGR3E>lWKDoV2`a~JK95NA3r83i&j<$bh<)_ks6+Z{;UFp1#flSe#_ERW)ayOme4-QaR{PrC?PM zpM>q9HCXL|cXX*ySnR#P?OVhIV6fkwd118U&b43q`GyiXtIj9XC={JiPktJutz)cq z-FL#F%`Lu7wxy-&3{!G*2+>;7*KVv(?J|L5>wZ0l4el+R!LFoW$4K(MvMRHmLn!YC z>&=uWuh>enCBD-qwL2%Fna8DKiX5|Bt{54OC&r!@*Ppoi?x0!x(>R8=)+UYQo$3h> zecpz*KD|0YD^QF+d!qVj5`xSoSdTx*;Jw<`ROoWr9a~krO@<5z;li$RzC*QTS%r$t zR!6R93F=x)aWS}QUXgBkxV9-?=7{x{qBxh~7FUDhRLc{YWgT@643nXOHZ?yBFjR?@ z;kNcDZbpwz+DU8i>iQGa%HQ1{QVacU&o9rWnK&76Ka;YM4ETO9eVJm+sG@4{jKgqT zzwhxIO46_UoltCKnD&vjTDO#^ous7Ycor+@XtA9P`*HX9zG5?0_1MovzyA3EXve~~TU1Pqa7jw`W|ii`Gf zQH!N;Nbsayx#pe(nr$#D%MiY<>EFiO#Lict6UfMo0LBR4U8+O|k8FmJFQ`bf{E83u zk6R6`A8HyO{Bwq^){E($iCtTQf2@fO-(Gt&^2D}+vGF7Rja7$O@cfyBE?BMi?Kyon zS}qJ~m%Ul3?tH8=nzNteqBq+jvKIfu9=p$QACNVOnrj+2;wy-sqb2;J9qip17@OyF VqKM)p2mb2;%-q!4goEFI{9mA%Gm@|s!w5?dlquT?0m2FEiY!qP z5rkm1h=LfytRlpL5I}|yK*IX&o1s|y@4x-Nwom=aWD7-gAF>jo)c$ zviKXRZ-j(|7Mq!(tc8Sxr@-~4`Co(2Cqwr0!Iv<>+QdNU%HvhtLPGL#M5EorfG{tt zKSoFqVaU5ugsb}C2t-8$N)Zk>^2c}(@wh;63FK&ROd!8u2QC8Z?~hi58>=g;f~NJm zVK7C60l2cj1_p_y^c&sN+W?~njABga<2z1Bo#%mcNfDyp*KGi1B z84zZIM+f=rzK%;r z#1MF6`5lQkoIep8^r_GT7Z?cK{YghO9*+zCw3`>spT9Z2vLLYUPX<8(o6k%NNgc4B zL?2#XEjWJ{klYl5_4X0W4AbCmH~=l^%-;#Y2knUq<&FQ$DLgX@jETqLfWBEio82tv z6cA>J@rP_Jup@sSfSW%)_JcL>AEM;{q7I;ti&?aPFyFcYBM`#{V8!Et13fX2HvlFL zLVd7Aj7<>Q1L_|Npaf(-!~lPA2gN1`bALmeKaPiLgoc`?hL$EI#|08+$-TILKu!RG z?}wSyf`F+Z)YU)>e`Odv5yQvmuk4*G`fUe%bb|>7#5NHh4qPG72-D#2SAcq`H)N5} zj~G(pi+pCmM<7G;0N(9cN$!kkAyGDX=1HTACVA-2DDX(^pqR@SdmK9Prmh8eHuQbej6V-Dz51pwqae52(XFKGXhPk%oYO zfllL>X|tRLauSr5{-pGXR#k_?K@Ic!)1w9oW~>TTJp3H+*QQ5=#uw-`tJ1 ztV94?^~>Wm{}}Km#hRvuhN>3&k37}X5O9<_bRhp*o@(k}VkrXSKg4Fm8qZj>oQ4VX z)Q3nbzz;1SG5zy;$yF#M5FW%%D&7T$!vG3_tepI@1lh{k(ki2sXe5rA?A z6we3J>9;M!@6Ba;{#(z_2qD<#j8JeOb|0Yhepy08Sh7Ix1=Q~+a7FuLy&=Zh1K zzR!cuv*65)z27##M}K~>?FS?&sVb|%Vf-ZfH-VRLd;v~zUS0$Y0QVn(=--JIzH$D% z?8e*bzadL$e#}bzM1|1egIM7GzamS0KCPM{b_COY5n1YUHjRM6`0?N~``P+W&r#e6 z`Z98q03ZMKr1Uvw_c<*7P|5YLNlNfvme|^VeMSP0?hoaepkfo0QUb(%5gF-o*3lmu z0KGr}J-ol9l=L5d?&pYoyj+(Hbl`uEgO{K*6lRi6C?Ncv~w zE^dkTAAau_ly4tjteE|D;I;~0<={2&2SD${@LmDXol5Z%5|VT`L+RUwx%IV0#_Skr zuYO0Di?uGbGR{6>lXL8J_odbqC$baP-&ZtP^2WN%H0@*(N}#g|(n#}W@c7@X>RTB+V!F_S*(G;!OlQoW+9Bw+38oXLlgRU*P) ziRlRmfAvj;-W-Ms+walbH8DbS=F5pKljA&}KVJ^I`5qO+I_!DA)PmPFZrd2t1GKCb zm*cE<^if{QQ$nTda>vH#nSK>VHkCMAivpU(^kP^9QLZ96u_eM(*%Jpl;o{JoVqgl9 z|8G;w^E`ht&(_}8_sAuSOsQk>E4aqFqbW=sXg#uOZ)W2{>&D_p$>M;v)pAP_Yav6% z;O3y1CCgTGgdN52Lnb@0PLC~e-Rmv**qIm)j2*UFkFD#LUY;dB6|?y}56DF_3&lvu zl80IIJohb!rkEcm#1MU80OM*Dnqx0a#VzXy<9Te(8c5&H!z&4|{LVzYdbh4P>gkbt zx~VfsTvuBQQ{7D^GFg%*4tBr+8ul;$Mr>;NtIn>*H#MnEcYYMHEq@Qwng0IuNX_>x z?4F;@bl#*OS;x1DZd`pnZhMMp=}QX$qhckA@su*t&JNvgQHC^>1^beb<^zk1&_!nQFS>8{7*?#`jQol$ec zrfF{NXdz@plV1C!W@Hqcw@Qv1PJK7T#S3i#P*(ULCp(jRO(oI3`EK&abb5HiK%3*U zipUZP73a$siZWBv_2Px?zGRP0b>!&#I9hu?*8Hdx!oaU3->%-wY|^G;pPP-F46xmx zT?{MoD*U)Kxn^!~aFgALT~=pl*}Fq*AGV5R#nv)E`o!+*TYG04cJs_f6b4P*3;)(ZNH+f$w(J!lG9=@eQvzU9h!qe z9=fG$Rae*?ob#|0a$gXDL`?pc4-k8CO^7iTwr?oO_!l5uMU_2Pg@#gvoE%Uix3J0* z`Zx{Yyc*#Abrm}M@9)8EIJo_awPQ}shO_W+U*cVnP|oq0%=Gm9gR+?Lh`EUex%NH> z_7q?=^l13m%B3mkE{?JD7B`gz_cnoe9qAvr`m7ya6o_RS2RMhyabyZ*vsQyR1W+U~ z?G@--kGGLJzhBh%ywoN>KK|LQeJ4+x*l0v~M-TP7Y|@e`V@3B7Ko|7yhzY-B5$W2L zM=54H6crUUjo-ZTc1YKK%Y8%Of~ci(99qEx;bBzBga^XdD3ntw8Zw@#BJ~=YG4mTS zl9lAzf!*Pu6K{t^uI@>UgHpsskRn`9mwUWv>no}iy>kGz27*uy*b))_?W#?oCG>Tp zBG>ou^2vJ8*(D|R=yy;1G_lXLI1Zy>ybK+rHU~B1(>N6V$gEiTK^J0p?8b#7Z*IJ6 z9T*zxFc``|fw7l3vFRoJ+qFB_`N34b-hX3a@jSw1<3!6bH+0pZaZ7Inj-~b((oumE z+|wBUa?{V26(AB=3!*aL71^CE&s5pVDxwSwW7%3wIX3q~!NsCQ!>l>t9Y7`)sd)~C8Trc{W3e) zea}%$FH?2_8O2;<%2tX%F)v9T&Wfi=XM8dwnbpdE6{N-}$y!P}x0+GH5ho?cF-lnC zq;qbolGbuUh*TUxfn$%P;=~m=61r4eL&7}?sKgZ77qtd^ z-RsUpl^X%p^gLQ|A7xwbu1*Shj}eMiZ~blv)8lG{aOj%`m> z8-8fS_RyyEGOxG1IAl(InOfXfQe70XReUN+UP8&qwy4vx1(SB+&BSSW(q09Q$h@(Z ztJx+#H61zgbe|is^BlI=l{{}WjlFMSJ8HG1v7l`SV~{>Qcv4<^T$3KUY-;yo)*4QH zl{qW(W<~L2o>j1A@!57Gczt3kU`zO z%0F*OrE6XBU5?2-1mz?Pw5BmsD7MCZ5o&f1t>aNla_{@_ zLmL|0T2^>Z?sBeV=KdIaXnO6mGL>0oW=N_WVMaub9$0Ts(9_iT;<~M_x)*gtl^xi9 z);ZR?p7$PBJG(uS9XL$^TNBA)T?Fwdd^RPET9w2oaaWEfTcwj+SElAUxeka%KKXGh zPM32noo>WNIx44{raYd0t>QvYN}KNT!#<$YMOjj1YsX!TD;uV|om3;^rAjR2InB;p z^|d`YMtPlOMT9X{j?BQ!X$dm>nnphJ2g?jxQxC5Ba@4`0jqbGcz}_cDw?q1@n_rFR zy2{%v+nCbwL_D_GquR2-vBJ2krJx|twZDEx9j>vn?p*5lt6B!Zk}@t@jBRo|rx94+ z=c?0lB0|z{puNKBc1Q+i>yTt$`_wQ_S^j#f>^azWDF2lbvdKS>-Xp&Y6`#tKcJ>)P zP{r{aPh+%L|way_A1Df)^&+4D?fj|s7T%Oy$z?UwPB<`@yrC3nKxGP zj7GX`{H^T8hCI8b8_^cKVmGY>=48hjBehHMYMcyQuhda8rE)8ESuL_blbOGb_1sES zdim6T`LW}g(+lkbZ8LO&lio)R%M9L;4q!Jw8h0A4s$r$orfTaaw>Rmx$x83l!FB9$ zU?jguL@{qZy0VQRc4mzPQmr(JT+r!i+x>P}{q?oh;?Mz^m2T|Fp90vf^e#B3CFIyC z^4j8xT|JS>win{g&>vbNLyzo!1k7tQ9p&& z{|sAkIB~jdjF{a2L_WD)bgVu%HILoWlKnP;eBaz-Wb)@lB-Md?EJEj_NQZ*@Rv9?w zDDIZMlG7!>wz6PGSK3Cq?F28nU0X_Q^_C$+i;lx*L}bm=qH={j)~+A#ut|ot8WdVB zaW<{k*3lf9OfIc4Th^3iNGJ>e=snIl7f4}=hBV7=C9E6N;Vf9Nz3+*6HHCP@OSC74 z5<2Y}J28`$VT3duE=?qNoG9^6>t08 zj&w1j;wl3!M5MV_OI1D)o+MkV|Ajb4jg96V#cJ+`^Ij7aoEugHElZ zk^STDSu;OI`Zkpxt#{UFIi=)03I-A$6N@cyS-mUWv#w)mdmc_(z42qK(41~Ehu2&i z2yY=dm4sBdlvgmX?-L22Pn+Q$pOz$Lq&PJNV||r$bw`_`>c%3i@Wl;$U!vp5+iyqO z<@#5#D6a<|j`zt{Nf%J_Sk=Bzk{LNq#A9-vZKzzYw0pCzs@~bDXN=sbi1Y*~%}6q$ zi71D@_{n9lEP4IvQ_4AgNKe1P*cCPHw0qw#AD?!;hNg9|nkSQf%y!yyf;olPsmEE_ z7uhc!A+yNE{_V!ctvY7{o~@Lca51J)WuH#rCdM>$5qnc|DWp?ttuiif99#;FTU-k2 zFPi&3c!ADMu{9g0Bb#7>xF*%gnn@-#-q<(H@)pq{`e)CTC10T1PhM|$Ji(gjcsSSyZv zw}I+yESfy6Ry^KXr*rL5{8@Fv&F1`Vla|Qt3kr)@XsqXS4R3O|V%=8OmFF?>_*qeC z;i03;^P@>qDgo`~Mrm$tRwbe31m<5-Mt0 zCXbt5)PJX5_G-;CB`4Idq*B9$%F67SiCg=}Uv2~tW*D*kGIu%mNrhS)bhvGFvenks z=8WDxDs}AL>7|CftzGC$dKIO+rMKD2PUW^&rS$a76~~-PW?KIqQeX5XC^Mm=t1Y|F z>(@sPUwD9=*;R6=aYi_&zEIXq$Jay>B!Vc^%;hu^N@r;N`-2OM zsJPd%JumlWu=XXMOs*}(ztj!>9?qrhyaFP!?_iMYpg&whdC;^REvIZiW zpU^4>mekv^hY?E|^yK;h=>K?mC89~M#=a-wlFBl$>w4oYoaZnYMEJ7 z_zx>*zLZ)l35E1e=9kRrt|1TMn=&#ImX5CjQTmS^<8w4F%4 zvG-n7He#(pDl)vV0fE2%!;+j-}(b zq1e=2+TFQ9r0~%3QkCk!N}(6w3%~*I#r(N()8Yr-v8U#)xjp%4!HSxP4;jq^CApx? zV3dq4U7FB)H~@LM-N?b<5chl)4-O-qs}JZHE4;VM%e(~2C*QWRk)CH22@zuvy902g zjwLs6_tuTamR)^x6zs|x?5YN%bUFb#yB)7Qhs3|X%vxw1GIg9~GF{`=AwE99KhgcT z=%+mH0cP@w5TomB{yA0w96%Ko)?s**mL9uw-jGs|13i!-+FilE8&-FAi))(eiBp9h zTbK+pJ>@M%tFZQEk!?LQo zCx__`j!pE&R$N8aqqMc_$8Je)3AsELJJ$O;8Ob2&Mq+CvLMxA|Jh{3EVgbH8Cd5#Y zW8EEu&r6tIc;>a*aN8L`tn4ajZ+2UJWxGv+mu8;9!J&weqYJj*E`Ld5nY6DyU9#t< zlxwi`mZ`fzhCzz~o2LbMw_Az{%sYpVOb?!yFMfYgkx@x==q*3nGu%bnXrF(2n~Rpi zhAwvt_UjVQayU3TUZns_9(qu6=R6hZ|6sn7W4W5t6u~b&ig5b(6y5`F2c8#56}SFsKKS~6B>jy@m?^&K~eLK#e0WTHErKyP+! z8(`EF+J^_(B?1J`|K0?UjNS#M);zWdVD1=G$YmSER_KKRIx(#I>?R|Ko|s<>h_3O) zFNTKXEA3Q<-$-qdoqwy<82^Lzo2#Z-a>$1GmZ;prY#Y~gK} zC;s5+3Mrsy{o6UH%BzJz!tSyRl|4aj-vXJ|9ARqoSG%{441#0upz&6S9*s)_G)!95 zYLY9U$s|wJ8VKz-SgpriSOw=0#8FI2@t!46Fz5*b{_~~n4}N3HQrb}|4Fo(K+KR9y znEt4|HxH6`A^{6CwFD*y?MrA*AXx26lg9_3=!l6K13f1c_v&$nef5047)diJeJ)r5 z&@wPLjy7igQw(?5{9C}DfvdFnTuwX44g+a%!aPznNM4WKriGW_X(^YKek)_P&nIJS|}=dh81KHDB{s+B-*u7@@BpI6|`lO3V#VVwI>x5VZi7wh}D+{_!Fn sNARKo#4$O3xfpM0U(N>aL<`|>9Gg78%Df-^A5|eUBTLj3gFOfS2jH((@Bjb+ literal 0 HcmV?d00001 diff --git a/Remove Duplicates from Sorted Array/images/processing_a_number colony.png b/Remove Duplicates from Sorted Array/images/processing_a_number colony.png new file mode 100644 index 0000000000000000000000000000000000000000..6f841604be923b80e3431a012246d75d80476a12 GIT binary patch literal 31308 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 B5HkP( literal 0 HcmV?d00001 diff --git a/Remove Duplicates from Sorted Array/images/sections.png b/Remove Duplicates from Sorted Array/images/sections.png new file mode 100644 index 0000000000000000000000000000000000000000..c1512ea9b2bfb27fa4fd2066384dee4dd3a7b8d5 GIT binary patch literal 16327 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 On+eh!k!5%w^nU=*I#tsE literal 0 HcmV?d00001 -- 2.45.2 From 54026aeb901936d08cbcf4f419cfbc52a8a1d992 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Fri, 3 Jan 2025 21:33:04 +0530 Subject: [PATCH 3/5] Adding solution (java) --- .../solution.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Remove Duplicates from Sorted Array/solution.java diff --git a/Remove Duplicates from Sorted Array/solution.java b/Remove Duplicates from Sorted Array/solution.java new file mode 100644 index 0000000..acac66c --- /dev/null +++ b/Remove Duplicates from Sorted Array/solution.java @@ -0,0 +1,37 @@ +class Solution { + + public void swap(int[] arr, int ind1, int ind2) { + + int temp = arr[ind1]; + arr[ind1] = arr[ind2]; + arr[ind2] = temp; + + } + + public int removeDuplicates(int[] nums) { + + int unique = 0; + int seek = 0; + + while (seek <= nums.length - 1) { + // Initialize a limit pointer + int limit = seek; + // If limit is already on last element of array, look-ahead should be avoided + // Till numbers repeat increment limit, else break + while (limit < nums.length - 1 && nums[seek] == nums[limit + 1]) { + limit = limit + 1; + } + // Swap the seek pointer value and the unique pointer value, then increment + // unique pointer + swap(nums, seek, unique); + unique = unique + 1; + // Move the seek pointer, only if end of array hasn't been reached + if (limit == nums.length - 1) { + break; + } else { + seek = limit + 1; + } + } + return unique; + } +} \ No newline at end of file -- 2.45.2 From 7a54eca48c32539a4ee1d41decfebfd45e3f81e3 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Fri, 3 Jan 2025 21:39:39 +0530 Subject: [PATCH 4/5] Added resource folder --- ...ve duplicated from sorted aaray.drawio.bkp | 458 ++++++++++++++++++ ...Remove duplicated from sorted aaray.drawio | 347 +++++++++++++ 2 files changed, 805 insertions(+) create mode 100644 Remove Duplicates from Sorted Array/res/.$Remove duplicated from sorted aaray.drawio.bkp create mode 100644 Remove Duplicates from Sorted Array/res/Remove duplicated from sorted aaray.drawio diff --git a/Remove Duplicates from Sorted Array/res/.$Remove duplicated from sorted aaray.drawio.bkp b/Remove Duplicates from Sorted Array/res/.$Remove duplicated from sorted aaray.drawio.bkp new file mode 100644 index 0000000..49ed571 --- /dev/null +++ b/Remove Duplicates from Sorted Array/res/.$Remove duplicated from sorted aaray.drawio.bkp @@ -0,0 +1,458 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Remove Duplicates from Sorted Array/res/Remove duplicated from sorted aaray.drawio b/Remove Duplicates from Sorted Array/res/Remove duplicated from sorted aaray.drawio new file mode 100644 index 0000000..4255827 --- /dev/null +++ b/Remove Duplicates from Sorted Array/res/Remove duplicated from sorted aaray.drawio @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.45.2 From a776ef2d68e0e45e3ca20f7c32132a086ba8bfa4 Mon Sep 17 00:00:00 2001 From: hitanshu310 Date: Fri, 3 Jan 2025 21:41:27 +0530 Subject: [PATCH 5/5] making image sizes small --- Remove Duplicates from Sorted Array/solution.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Remove Duplicates from Sorted Array/solution.md b/Remove Duplicates from Sorted Array/solution.md index 6d8ce7b..c28698c 100644 --- a/Remove Duplicates from Sorted Array/solution.md +++ b/Remove Duplicates from Sorted Array/solution.md @@ -16,7 +16,7 @@ - We can imagine a scenario where, where at any intermediate stage, our input array is divided into three parts, the first part carries all unique numbers in ascending order, the second part contains the repeated numbers and the third part contains numbers that haven't been processed yet. For 3 sections we need 2 pointers to act as dividers. -

+

- Let's start with 2 pointers, initially all at index 0, 1. The unique pointer at 0, the left of which exist all unique numbers. @@ -24,14 +24,14 @@ our input array is divided into three parts, the first part carries all unique n - In order to process a colony the bounds of a colony must be known, we need to spawn a look-ahead pointer from the seek pointer that moves right to the last number of that colony, to determine the bounds of the colony. -

+

- When processing a number colony, the first element moves to the unique section, the rest, if any move to the repeated section and then a new number colony is processed. - When every colony is processed, atleast one unique element is addded, we swap the seek pointer value with the unique pointer value. The seek pointer always points to a new un-processed number and the unique pointer always points to the first number of the repeated section. -

+

- We have now added a value to the unique section thus we need to increment the unique pointer, the number at the seek pointer is a repeated value and hence the seek pointer must also be incremented, to the value next to the limit pointer, to the start of a new nunmber colony until, the end of the array is reached. -

+

-- 2.45.2