From 1434f88cb4bc50d061b1ec89da4f4e86cba42d0f Mon Sep 17 00:00:00 2001 From: LunaticProgrammer Date: Fri, 2 Oct 2020 01:28:07 +0530 Subject: [PATCH 1/4] added findMiddleElement method to LinkedList datastructure --- Linked Lists/P03_FindingMidOfLinkedList.py | 29 ++++++++++++++++++ .../SinglyLinkedList.cpython-37.pyc | Bin 0 -> 2823 bytes 2 files changed, 29 insertions(+) create mode 100644 Linked Lists/P03_FindingMidOfLinkedList.py create mode 100644 Linked Lists/__pycache__/SinglyLinkedList.cpython-37.pyc diff --git a/Linked Lists/P03_FindingMidOfLinkedList.py b/Linked Lists/P03_FindingMidOfLinkedList.py new file mode 100644 index 0000000..2d65353 --- /dev/null +++ b/Linked Lists/P03_FindingMidOfLinkedList.py @@ -0,0 +1,29 @@ +# Author: VARNIT SHARMA (LunaticProgrammer) + +import SinglyLinkedList + +def findMid(myLinkedList): + if not myLinkedList or not myLinkedList.head.next: return myLinkedList.head + + slow = myLinkedList.head + fast = myLinkedList.head + + while fast and fast.next: + slow = slow.next + fast = fast.next.next + + return slow + + +if __name__ == '__main__': + myLinkedList = SinglyLinkedList.LinkedList() + for i in range(10, 0, -1): + myLinkedList.insertAtStart(i) + print("LinkedList",end=" ") + myLinkedList.printLinkedList() + print() + midleElement = findMid(myLinkedList) + print("The middle element of the LinkedList is",midleElement.data) + + # OUTPUT: + # The middle element of the LinkedList is 6 diff --git a/Linked Lists/__pycache__/SinglyLinkedList.cpython-37.pyc b/Linked Lists/__pycache__/SinglyLinkedList.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f653049e44e7eb9341fd37da55c2c552b5beb44f GIT binary patch literal 2823 zcma)8&u<$=6yBL#uh$zp32F(Y6qHsy;ELu@5C=f0w1r+Ot5QIfjK#|J47C$yoy@M& z)N)SlmH#0*@(&=vpR!j@{ug@U`)1ecBu!D*nm51az3;v6&GMrn)&8jv4#uh&3$%}sz>at)HMMAk+E=wxiFMw|iVBPQ`l*AF#*ETCSyk0b#v7Pf zqb5~3l{08kE89-9-h=(+=c08VCHWdcJ8hwywp4YCMzn!KRbB&u@>LaeMFpyc+E<}k zL0we>CpI##HB!3O<6-<*OO%Hw$vVVTOr6M?N=PWc7SU?T%v0U8n|ZN5N}F!xC3^U~ z;Woqle>#R9fAd@Ko6awZHc98OYvMuYkxq8g(SE1j?V*0IP3I9#xx1a3aW5Sko!lKK zgZRbWr?1lfDDFHN#JgH;J{crw(%Htu@Krv71|OH!V$ihG>B+x zG1sG6{8*RB$dw$~0+X=zH>Ke@ITnJjNQ{qGR!wwDgX`!d_Ea&cTV2IOPhf^0YZmK7 z?wvY2h3g76B3E-!!;4%4{eE6UG4cLj7>5NIwsRa-UkRp#=v{qF6~J)f{lHi??*_wz zuDzuJU^qc01q@=`-P2K&g;BIOQsW`p^(Zi=!J;VQ!^jDt4p-zCUmyq3s@vgWy?ihueB1Hk%@Ib*!46Apx_>z8S>nGOY_b zWnQZH_RqN9@@dU3UK)3kCNN}7Nnfmr$@S&r)`i6-tx2cSRbQb)0LsC2e4Xac#IdwD zkrQu}eXN+us2E>3)wK|8%PBzl6E&h)@I~ zkSJnu?F@=@%gY;-0VpwSp#xVFLtw6^LIH!I^{^LcT+U5h+^=XAl#s2-?WaZ`4o2f- zGlrR)Nq;mRs?C1)P;bUa96NdwkmxRRg@Oz~+^D-<-!FDsj5Nh;P%M+hMyx>lK&LOY zj_+ZG%^0E$--WeUT*m7ytSQjiC^>jK?<6GiJ7|rSL=0PIk z@<`<E(tGae&Pf1Z4-0+-}YE(UMaE z;@#m`p0CH&=%d@kD%Z5iRS%v57Q%_O$MWC{g0!^l5T-rB&7aRD>=JSQ@SKHB#F@u1 zUc~JyJ=CeT3H}*YA-g2v1!j7}a|vCd6}spnhLaD@xFO$J(v;jO?}|I Date: Fri, 2 Oct 2020 01:34:18 +0530 Subject: [PATCH 2/4] added comments for better understanding --- Linked Lists/P03_FindingMidOfLinkedList.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Linked Lists/P03_FindingMidOfLinkedList.py b/Linked Lists/P03_FindingMidOfLinkedList.py index 2d65353..faad4d6 100644 --- a/Linked Lists/P03_FindingMidOfLinkedList.py +++ b/Linked Lists/P03_FindingMidOfLinkedList.py @@ -3,6 +3,16 @@ import SinglyLinkedList def findMid(myLinkedList): + ''' + The approch is simple: + 1. creating a fast pointer that is moving and skipping one element of the linked-list + 2. creating a slow pointer that goes through every next element in the linked-list + 3. when the fast pointer has reached the end the slower one is supposed to be at mid + 4. return the element pointed by slow pointer + + Time-O(logN) where N is the number of elements in linked-list + + ''' if not myLinkedList or not myLinkedList.head.next: return myLinkedList.head slow = myLinkedList.head From 096bd4fbfd536527c56e3a0260ae70d38ff2441b Mon Sep 17 00:00:00 2001 From: LunaticProgrammer Date: Fri, 2 Oct 2020 03:12:03 +0530 Subject: [PATCH 3/4] added KthLargestElement problem --- Heap/P03_FindKthLargestElementInArray.py | 30 +++++++++++++++++++++++ Heap/__pycache__/Heap.cpython-37.pyc | Bin 0 -> 2346 bytes 2 files changed, 30 insertions(+) create mode 100644 Heap/P03_FindKthLargestElementInArray.py create mode 100644 Heap/__pycache__/Heap.cpython-37.pyc diff --git a/Heap/P03_FindKthLargestElementInArray.py b/Heap/P03_FindKthLargestElementInArray.py new file mode 100644 index 0000000..12738ac --- /dev/null +++ b/Heap/P03_FindKthLargestElementInArray.py @@ -0,0 +1,30 @@ +import Heap + +def findKthLargestElement(nums:list,k:int): + ''' + The problem here is to find the Kth Largest Element from the array. + to solve this we could've used sort and given the answer but it would've cost us O(N*logN) where N is the number of elements in the array + + to even optimize that solution we can use heaps. + the idea here is: + 1. create a min-heap with adding all the values as negative to it + 2. deleting till second last step + 3. returning the element at the last step as the answer + + T - O(N +K*log(N)) where K is the position of Kth largest element and N is the number of elements in the array + + ''' + h=Heap.BinaryHeap() + [h.insert(-num) for num in nums] + [h.delete() for _ in range(k-1)] + + return -h.delete() + + +if __name__ == '__main__': + + nums=[2,3,5,6,4] + k=2 + kthLargestElement = findKthLargestElement(nums,k) + + print("the Kth("+str(k)+") largest element is",kthLargestElement) \ No newline at end of file diff --git a/Heap/__pycache__/Heap.cpython-37.pyc b/Heap/__pycache__/Heap.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e23348a4ed47b724a6e0c04f784fe471f0d8e9c GIT binary patch literal 2346 zcmah~O>Y`U7@nD3V8NK$j@8)dhoT-LQPoy%Z6nKyY)g%*3RSVvMu>I=%*3n>%X)T6 zF~TR(|ACJ^_td|#*Pi$bKJ|HLV2z2Tg65r>cfQ`|c|Z1OeZ9o+`=|Qe|J!5iUz#j_ z1q@!I#Y2c6m}HWFKvQhu)VbmlRu@W49Vw(EU73^lv)m2mOu4cEeeQ-$#Q)61G%xcH zol#L>5&wc`NCI!bcnd=EGd^ZMdPuyElcF}m z0{YbL;B30q9%!w?5b>IEPbRK(de{8>Kyor^L8}FMs3>qgYzDW8}qtk4o zZzFx2oG2yo&=gB-E{JmrC*!3v76+v35Q3e_;uhZKmhwQuz79tN!< z?fd%&-F~~-jSu&;BUPcviqt*t2O%aoOpIpb6{5;sf*4;=RavFV?r4(<^rM?Is#=%~ z8)Gi{6DGxls~beznC}__t$vqXF#X!y6RqP|T!vu0!gtWNd5Mpo?=8~y)M`kHqn_2ohCd0Qx-?p*%g6p@i&)9897jxH$G2$BT zBDWabwZTAItAP{d8gk5%D@09i;uX+OFQ;BF2#-5KS6ZjIHrA*j)XP{3dV`)_egxGj z+M=QTr2j|wIacEe1mhd<4f%)q(e@JXY;%U4yp)CFYfLP1DIQz&u6|-Qr!)r(#EU^V zAJa|~o=4d}vxoGji_kN8txJXVBJsUQD~hcZTzUt(XK1nci101$iKl4yO3;G0k7|br zxg(s0$tXcoerQAhY*tAQmrw}8)bA(+&H7Z_puSKrN*kn9qTsBhP_!O%qJE@zasM1a zeNC#aN|dbirCLFf=Iz>Z0%H@X1UMDA2F_WIO1m%f3^9~>riO_vft3E&!j8>%Lg1@` zDr@U3dCeEYFUP`^l2<0POkP3b?BL|(H}itv+9)&yVGc2Mx+=W$kA-N9L_OE+2B@|V z_$n>728dqzfP8-kvJ7|>gDVl3ZLL+;sCI_Up7Q;)=nE2*>Pv#Y0GhrnL}N_nJ?^<)&MSI(uY`Zmtj@@{Gb-*ga{=Y$ zjE;=F6YJ6!wQ3>F_gm+xotPta(dw8d(_Ey3FtIimyB@G1^$sks!_1J4!#v*>6@&l< HL52SZ$g; Date: Fri, 2 Oct 2020 13:00:10 +0530 Subject: [PATCH 4/4] removed pyc cache files --- Heap/__pycache__/Heap.cpython-37.pyc | Bin 2346 -> 0 bytes .../__pycache__/SinglyLinkedList.cpython-37.pyc | Bin 2823 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Heap/__pycache__/Heap.cpython-37.pyc delete mode 100644 Linked Lists/__pycache__/SinglyLinkedList.cpython-37.pyc diff --git a/Heap/__pycache__/Heap.cpython-37.pyc b/Heap/__pycache__/Heap.cpython-37.pyc deleted file mode 100644 index 1e23348a4ed47b724a6e0c04f784fe471f0d8e9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2346 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