commit 32fdc2fb2e027f028ffc0c7a7fc1a8daae20df68 Author: ImAlpha Date: Mon Jun 26 16:39:03 2023 -0700 Test Commit diff --git a/Top150Interview/121BestTimetoBuyandSellStock.py b/Top150Interview/121BestTimetoBuyandSellStock.py new file mode 100644 index 0000000..e69de29 diff --git a/Top150Interview/169MajorityElement.py b/Top150Interview/169MajorityElement.py new file mode 100644 index 0000000..ae3611e --- /dev/null +++ b/Top150Interview/169MajorityElement.py @@ -0,0 +1,37 @@ +# def majorityElement(nums): +# """ +# :type nums: List[int] +# :rtype: int +# """ +# majority = {} +# # Start initial position +# for i in range(len(nums)): +# k = 1 +# if nums[i] in majority: +# # print(f'found {nums[i]} already') +# continue +# # Count the duplicates +# for j in range(i+1, len(nums)): +# if nums[i] == nums[j]: +# k += 1 +# majority[nums[i]] = k +# print(majority) +# # print(max(majority.values())) +# # print(max(majority.items(), key=lambda x: x[1])[0]) +# return max(majority.items(), key=lambda x: x[1])[0] +# majorityElement([2,2,1,1,1,2,2]) + +# Faster runtime and less memory +def majorityElement(nums): + majority = {} # Create an empty dictionary to store the counts of each number + for num in nums: # Iterate over each element in the input list + if num in majority: # Check if the number is already in the dictionary + majority[num] += 1 # If it is, increment its count by 1 + else: + majority[num] = 1 # If it is not, add it to the dictionary with a count of 1 + if majority[num] > len(nums) / 2: # Check if the count of the number exceeds half the length of the list + return num # If it does, return the number as the majority element + return None # If no majority element is found, return None + +result = majorityElement([2, 2, 1, 1, 1, 2, 2]) # Call the function with the input list [2, 2, 1, 1, 1, 2, 2] +print(result) # Print the result \ No newline at end of file diff --git a/Top150Interview/189RotateArray.py b/Top150Interview/189RotateArray.py new file mode 100644 index 0000000..d725579 --- /dev/null +++ b/Top150Interview/189RotateArray.py @@ -0,0 +1,26 @@ +def rotate(nums, k): + """ + Rotate the elements of the list nums to the right by k positions. + + Args: + nums (List[int]): List of integers to be rotated. + k (int): Number of positions to rotate the elements. + + Returns: + None. Modifies nums in-place. + + Example: + >>> rotate([1,2,3,4,5,6,7], 3) + [5, 6, 7, 1, 2, 3, 4] + """ + k %= len(nums) # Adjust k if it's larger than the length of the list + + # Use slicing to shift the elements to the right + nums = nums[-k:] + nums[:-k] + + print(nums) # Print the rotated list (optional) + +# Example usages +rotate([1,2,3,4,5,6,7], 3) +rotate([-1,-100,3,99], 2) +rotate([1,2], 3) \ No newline at end of file diff --git a/Top150Interview/26RemoveElement.py b/Top150Interview/26RemoveElement.py new file mode 100644 index 0000000..73828fc --- /dev/null +++ b/Top150Interview/26RemoveElement.py @@ -0,0 +1,17 @@ +def removeElement(nums, val): + """ + :type nums: List[int] + :type val: int + :rtype: int + """ + k = 0 + for i in range(len(nums)): + if val != nums[i]: + k += 1 + else: + nums[i] = None + print(k) + return k + +# removeElement([0,1,2,2,3,0,4,2], 2) +removeElement([3,2,2,3], 3) \ No newline at end of file diff --git a/Top150Interview/80RemoveDuplicates.py b/Top150Interview/80RemoveDuplicates.py new file mode 100644 index 0000000..2624ec2 --- /dev/null +++ b/Top150Interview/80RemoveDuplicates.py @@ -0,0 +1,31 @@ +def removeDuplicates(nums): + """ + Remove duplicates from a list of integers and return the length of the resulting list. + + Args: + nums (List[int]): A list of integers + + Returns: + int: The length of the resulting list after removing duplicates + + Example: + >>> removeDuplicates([1,1,1,2,2,3]) + 3 + """ + k = len(nums) # Initialize k with the length of the input list nums + + for i in range(len(nums)): + tempNum = 0 + # Iterate over the elements of nums starting from index i + for j in range(i+1, len(nums)): + temp = nums[i] + if temp == nums[j]: # Check if a duplicate element is found + tempNum += 1 + if tempNum > 1 and nums[j] != float('inf'): + # If it's the second occurrence and the element is not already marked as 'inf', + # mark it as 'inf' to indicate it as a duplicate and decrement k by 1 + nums[j] = float('inf') + k -= 1 + + nums.sort() # Sort the list in ascending order + return k # Return the length of the resulting list without duplicates \ No newline at end of file diff --git a/Top150Interview/88MergeSortedArray.py b/Top150Interview/88MergeSortedArray.py new file mode 100644 index 0000000..01f49d9 --- /dev/null +++ b/Top150Interview/88MergeSortedArray.py @@ -0,0 +1,23 @@ + +def merge(self, nums1, m, nums2, n): + """ + :type nums1: List[int] + :type m: int + :type nums2: List[int] + :type n: int + :rtype: None Do not return anything, modify nums1 in-place instead. + """ + count = 0 + # merge unsorted arrays + for j in range(len(nums1)): + if nums1[j] == 0: + nums1[j] = nums2[count] + count += 1 + # # array is filled, now sort, used bubble sort + for i in range(len(nums1)): + for j in range(len(nums1) - i - 1): + if nums1[j] > nums1[j + 1]: + nums1[j], nums1[j+1] = nums1[j+1], nums1[j] + print(nums1) +# merge(0, [1,2,3,0,0,0], 3, [2,5,6], 3) +merge(0, [4,5,6,0,0,0], 3, [1,2,3], 3) \ No newline at end of file diff --git a/Top150Interview/LessonsLearned.md b/Top150Interview/LessonsLearned.md new file mode 100644 index 0000000..b6f5404 --- /dev/null +++ b/Top150Interview/LessonsLearned.md @@ -0,0 +1,17 @@ +# Lessons Learned from LeetCode +## Slicing +- How to use slicing for shifting elements + +``` +my_list = [1, 2, 3, 4, 5] + +# Shift list to the right using positive slicing +shifted_positive = my_list[-2:] + my_list[:-2] +print(shifted_positive) # Output: [4, 5, 1, 2, 3] + +# Shift list to the left using negative slicing +shifted_negative = my_list[2:] + my_list[:2] +print(shifted_negative) # Output: [3, 4, 5, 1, 2] + +``` +- \ No newline at end of file