Merge pull request #310 from Sankalp7943/sankalp/arrays
chore(Python): add sankalp arrayspull/313/head
commit
abe0910350
|
@ -2,6 +2,9 @@
|
|||
|
||||
## Arrays
|
||||
1. [Count Inversions](arrays/counting_inversions.py)
|
||||
2. [Majority Element](arrays/majority_element.py)
|
||||
3. [Rotate Array](arrays/rotate_array.py)
|
||||
4. [Missing Number](arrays/missing_number.py)
|
||||
|
||||
## Linked Lists
|
||||
1. [Doubly](linked_lists/doubly.py)
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
"""
|
||||
Algorithm Type: Array Traversal
|
||||
Time Complexity: O(n)
|
||||
"""
|
||||
numbers = [2, 2, 5, 6, 2, 6, 2, 10, 2]
|
||||
|
||||
def majority_element(numbers):
|
||||
m = float("inf")
|
||||
cnt = 0
|
||||
for num in numbers:
|
||||
if cnt == 0:
|
||||
m = num
|
||||
cnt += 1
|
||||
elif m == num:
|
||||
cnt += 1
|
||||
else:
|
||||
cnt -= 1
|
||||
# to verify the most frequent number is greater than length of aaray//2
|
||||
recheck_cnt = 0
|
||||
for num in numbers:
|
||||
if num == m:
|
||||
recheck_cnt += 1
|
||||
return m if recheck_cnt > len(numbers)//2 else None
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(majority_element(numbers))
|
|
@ -0,0 +1,15 @@
|
|||
"""
|
||||
Algorithm Type: Array Traversal
|
||||
Time Complexity: O(n)
|
||||
"""
|
||||
numbers = [1, 2, 4, 3, 6, 7, 9, 8, 10]
|
||||
n = 10
|
||||
|
||||
def missing_number(numbers, n):
|
||||
s = sum(numbers)
|
||||
expected_s = (n*(n+1))//2 #for C++ or similar, keep in mind expected_s can overflow MAX INT limit.
|
||||
return expected_s - s
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(missing_number(numbers, n))
|
|
@ -0,0 +1,26 @@
|
|||
"""
|
||||
Algorithm Type: Array Traversal
|
||||
Time Complexity: O(n)
|
||||
"""
|
||||
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||
k = 3
|
||||
|
||||
def rotate_array(numbers, k):
|
||||
n = len(numbers)
|
||||
k = k % n
|
||||
if k == 0:
|
||||
return numbers
|
||||
for i in range(n-k):
|
||||
if i>((n-k)//2):
|
||||
break
|
||||
numbers[i], numbers[n-k-(i+1)] = numbers[n-k-(i+1)], numbers[i]
|
||||
|
||||
for i in range(k):
|
||||
if i>k//2:
|
||||
break
|
||||
numbers[-1-i], numbers[-k+i] = numbers[-k+i], numbers[-1-i]
|
||||
reversed_numbers = numbers[::-1]
|
||||
return reversed_numbers
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(rotate_array(numbers, k))
|
Loading…
Reference in New Issue