Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 25 additions & 25 deletions Arrays/Arrays.py
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,53 @@
# Author: OMKAR PATHAK

class Array(object):
''' sizeOfArray: denotes the total size of the array to be initialized
arrayType: denotes the data type of the array(as all the elements of the array have same data type)
arrayItems: values at each position of array
''' size_of_array: denotes the total size of the array to be initialized
array_type: denotes the data type of the array(as all the elements of the array have same data type)
array_items: values at each position of array
'''
def __init__(self, sizeOfArray, arrayType = int):
self.sizeOfArray = len(list(map(arrayType, range(sizeOfArray))))
self.arrayItems =[arrayType(0)] * sizeOfArray # initialize array with zeroes
self.arrayType = arrayType
def __init__(self, size_of_array, array_type = int):
self.size_of_array = len(list(map(array_type, range(size_of_array))))
self.array_items =[array_type(0)] * size_of_array # initialize array with zeroes
self.array_type = array_type

def __str__(self):
return ' '.join([str(i) for i in self.arrayItems])
return ' '.join([str(i) for i in self.array_items])

def __len__(self):
return len(self.arrayItems)
return len(self.array_items)

# magic methods to enable indexing
def __setitem__(self, index, data):
self.arrayItems[index] = data
self.array_items[index] = data

def __getitem__(self, index):
return self.arrayItems[index]
return self.array_items[index]

# function for search
def search(self, keyToSearch):
for i in range(self.sizeOfArray):
if (self.arrayItems[i] == keyToSearch): # brute-forcing
def search(self, key_to_search):
for i in range(self.size_of_array):
if (self.array_items[i] == key_to_search): # brute-forcing
return i # index at which element/ key was found

return -1 # if key not found, return -1

# function for inserting an element
def insert(self, keyToInsert, position):
if(self.sizeOfArray > position):
for i in range(self.sizeOfArray - 2, position - 1, -1):
self.arrayItems[i + 1] = self.arrayItems[i]
self.arrayItems[position] = keyToInsert
def insert(self, key_to_insert, position):
if(self.size_of_array > position):
for i in range(self.size_of_array - 2, position - 1, -1):
self.array_items[i + 1] = self.array_items[i]
self.array_items[position] = key_to_insert
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

# function to delete an element
def delete(self, keyToDelete, position):
if(self.sizeOfArray > position):
for i in range(position, self.sizeOfArray - 1):
self.arrayItems[i] = self.arrayItems[i + 1]
self.arrayItems[i + 1] = self.arrayType(0)
if(self.size_of_array > position):
for i in range(position, self.size_of_array - 1):
self.array_items[i] = self.array_items[i + 1]
self.array_items[i + 1] = self.array_type(0)
else:
print('Array size is:', self.sizeOfArray)
print('Array size is:', self.size_of_array)

if __name__ == '__main__':
a = Array(10, int)
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P01_ReversingArray.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,17 +2,19 @@

import Arrays

def reversingAnArray(start, end, myArray):
while(start < end):
myArray[start], myArray[end - 1] = myArray[end - 1], myArray[start]

def reversing_an_array(start, end, my_array):
while (start < end):
my_array[start], my_array[end - 1] = my_array[end - 1], my_array[start]
start += 1
end -= 1


if __name__ == '__main__':
myArray = Arrays.Array(10)
myArray.insert(2, 2)
myArray.insert(1, 3)
myArray.insert(3, 1)
print('Array before Reversing:',myArray)
reversingAnArray(0, len(myArray), myArray)
print('Array after Reversing:',myArray)
my_array = Arrays.Array(10)
my_array.insert(2, 2)
my_array.insert(1, 3)
my_array.insert(3, 1)
print('Array before Reversing:', my_array)
reversing_an_array(0, len(my_array), my_array)
print('Array after Reversing:', my_array)
26 changes: 14 additions & 12 deletions Arrays/P02_ArrayRotation.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,22 +2,24 @@

from Arrays import Array

def rotation(rotateBy, myArray):
for i in range(0, rotateBy):
rotateOne(myArray)
return myArray

def rotateOne(myArray):
for i in range(len(myArray) - 1):
myArray[i], myArray[i + 1] = myArray[i + 1], myArray[i]
def rotation(rotate_by, my_array):
for i in range(0, rotate_by):
rotate_one(my_array)
return my_array


def rotate_one(my_array):
for i in range(len(my_array) - 1):
my_array[i], my_array[i + 1] = my_array[i + 1], my_array[i]


if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
print('Before Rotation:',myArray)
print('After Rotation:',rotation(3, myArray))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
print('Before Rotation:', my_array)
print('After Rotation:',rotation(3, my_array))

# OUTPUT:
# Before Rotation: 0 1 2 3 4 5 6 7 8 9
Expand Down
22 changes: 12 additions & 10 deletions Arrays/P03_GetMissingNumber.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,21 +2,23 @@

from Arrays import Array

def findMissing(myArray, n):

def find_missing(my_array, n):
n = n - 1
totalSum = (n * (n + 1)) // 2
total_sum = (n * (n + 1)) // 2
for i in range(0, n):
totalSum -= myArray[i]
total_sum -= my_array[i]

return total_sum

return totalSum

if __name__ == '__main__':
myArray = Array(10)
for i in range(len(myArray)):
myArray.insert(i, i)
myArray.delete(4, 4)
print('Original Array:',myArray)
print('Missing Element:', findMissing(myArray, len(myArray)))
my_array = Array(10)
for i in range(len(my_array)):
my_array.insert(i, i)
my_array.delete(4, 4)
print('Original Array:', my_array)
print('Missing Element:', find_missing(my_array, len(my_array)))

# OUTPUT:
# Original Array: 0 1 2 3 5 6 7 8 9 0
Expand Down
5 changes: 3 additions & 2 deletions Arrays/P04_OddNumberOfTimes.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,7 +8,7 @@

# NOTE: This will only work when there is only one number with odd number of occurences.

def printOddOccurences(array):
def print_odd_occurences(array):
odd = 0

for element in array:
Expand All@@ -17,6 +17,7 @@ def printOddOccurences(array):

return odd


if __name__ == '__main__':
myArray = [3, 4, 1, 2, 4, 1, 2, 5, 6, 4, 6, 5, 3]
print(printOddOccurences(myArray)) # 4
print(print_odd_occurences(myArray)) # 4
33 changes: 17 additions & 16 deletions Arrays/P05_CheckForPairSum.py
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
# Author: OMKAR PATHAK

# Given an array A[] of n numbers and another number x, determines whether or not there exist two elements
# in S whose sum is exactly x.
# in S whose total is exactly x.

def checkSum(array, sum):
def check_sum(array, sum):
# sort the array in ascending order
# new changes : made use of Python's inbuilt Merge Sort method
# Reason for such change : Worst case Time complexity of Quick Sort is O(n^2) whereas Worst Case Complexity of Merge Sort is O(nlog(n))
array = sorted(array)

leftIndex = 0
rightIndex = len(array) - 1
left_index = 0
right_index = len(array) - 1

while leftIndex < rightIndex:
if (array[leftIndex] + array[rightIndex] == sum):
return array[leftIndex], array[rightIndex]
elif(array[leftIndex] + array[rightIndex] < sum):
leftIndex += 1
while left_index < right_index:
if (array[left_index] + array[right_index] == sum):
return array[left_index], array[right_index]
elif(array[left_index] + array[right_index] < sum):
left_index += 1
else:
rightIndex += 1
right_index += 1

return False, False


##def quickSort(array):
## if len(array) <= 1:
## return array
Expand All@@ -32,11 +33,11 @@ def checkSum(array, sum):
## return quickSort(left) + middle + quickSort(right)

if __name__ == '__main__':
myArray = [10, 20, 30, 40, 50]
sum = 80
my_array = [10, 20, 30, 40, 50]
total = 80

number1, number2 = checkSum(myArray, sum)
if(number1 and number2):
print('Array has elements:', number1, 'and', number2, 'with sum:', sum)
number1, number2 = check_sum(my_array, total)
ifnumber1 and number2:
print('Array has elements:', number1, 'and', number2, 'with total:', total)
else:
print('Array doesn\'t have elements with the sum:', sum)
print('Array doesn\'t have elements with the total:', total)