diff --git a/algorithms/Python/README.md b/algorithms/Python/README.md index 49dc6d79..f43cc1f8 100644 --- a/algorithms/Python/README.md +++ b/algorithms/Python/README.md @@ -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) diff --git a/algorithms/Python/arrays/majority_element.py b/algorithms/Python/arrays/majority_element.py new file mode 100644 index 00000000..f371169f --- /dev/null +++ b/algorithms/Python/arrays/majority_element.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)) diff --git a/algorithms/Python/arrays/missing_number.py b/algorithms/Python/arrays/missing_number.py new file mode 100644 index 00000000..110ee57a --- /dev/null +++ b/algorithms/Python/arrays/missing_number.py @@ -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)) diff --git a/algorithms/Python/arrays/rotate_array.py b/algorithms/Python/arrays/rotate_array.py new file mode 100644 index 00000000..f4a621de --- /dev/null +++ b/algorithms/Python/arrays/rotate_array.py @@ -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))