diff --git a/work/3/Easy/Array/1426.counting-elements.py b/work/3/Easy/Array/1426.counting-elements.py new file mode 100644 index 0000000..9ded1cd --- /dev/null +++ b/work/3/Easy/Array/1426.counting-elements.py @@ -0,0 +1,45 @@ +""" +1426. Counting Elements +Difficulty: Easy +https://leetcode.com/problems/counting-elements/ + +────────────────────────────────────────────────── + +Given an integer array arr, count how many elements x there are, such +that x + 1 is also in arr. If there are duplicates in arr, count them +separately. + + + +Example 1: + +Input: arr = [1,2,3] +Output: 2 +Explanation: 1 and 2 are counted cause 2 and 3 are in arr. + +Example 2: + +Input: arr = [1,1,3,3,5,5,7,7] +Output: 0 +Explanation: No numbers are counted, cause there is no 2, 4, 6, or 8 +in arr. + + + +Constraints: + + • 1 <= arr.length <= 1000 + + • 0 <= arr[i] <= 1000 +""" + + +class Solution: + def countElements(self, arr: List[int]) -> int: + arr_set = set(arr) + count = 0 + for n in arr: + sum = n + 1 + if sum in arr_set: + count += 1 + return count diff --git a/work/3/Easy/Hash Table/1832.check-if-the-sentence-is-pangram.py b/work/3/Easy/Hash Table/1832.check-if-the-sentence-is-pangram.py new file mode 100644 index 0000000..8646333 --- /dev/null +++ b/work/3/Easy/Hash Table/1832.check-if-the-sentence-is-pangram.py @@ -0,0 +1,40 @@ +""" +1832. Check if the Sentence Is Pangram +Difficulty: Easy +https://leetcode.com/problems/check-if-the-sentence-is-pangram/ + +────────────────────────────────────────────────── + +A pangram is a sentence where every letter of the English alphabet +appears at least once. + +Given a string sentence containing only lowercase English letters, +return true if sentence is a pangram, or false otherwise. + + + +Example 1: + +Input: sentence = "thequickbrownfoxjumpsoverthelazydog" +Output: true +Explanation: sentence contains at least one of every letter of the +English alphabet. + +Example 2: + +Input: sentence = "leetcode" +Output: false + + + +Constraints: + + • 1 <= sentence.length <= 1000 + + • sentence consists of lowercase English letters. +""" + + +class Solution: + def checkIfPangram(self, sentence: str) -> bool: + return len(set(sentence.lower())) == 26 diff --git a/work/3/Easy/Two Pointers/344.reverse-string.py b/work/3/Easy/Two Pointers/344.reverse-string.py new file mode 100644 index 0000000..f3d32ad --- /dev/null +++ b/work/3/Easy/Two Pointers/344.reverse-string.py @@ -0,0 +1,47 @@ +""" +344. Reverse String +Difficulty: Easy +https://leetcode.com/problems/reverse-string/ + +────────────────────────────────────────────────── + +Write a function that reverses a string. The input string is given as +an array of characters s. + +You must do this by modifying the input array in-place with O(1) +extra memory. + + + +Example 1: + +Input: s = ["h","e","l","l","o"] +Output: ["o","l","l","e","h"] + +Example 2: + +Input: s = ["H","a","n","n","a","h"] +Output: ["h","a","n","n","a","H"] + + + +Constraints: + + • 1 <= s.length <= 10^5 + + • s[i] is a printable ascii character. +""" + + +class Solution: + def reverseString(self, s: List[str]) -> None: + l = 0 + r = len(s) - 1 + while l < r: + s[l], s[r] = s[r], s[l] + l += 1 + r -= 1 + + """ + Do not return anything, modify s in-place instead. + """ diff --git a/work/3/Medium/Array/15.3sum.py b/work/3/Medium/Array/15.3sum.py new file mode 100644 index 0000000..8506b38 --- /dev/null +++ b/work/3/Medium/Array/15.3sum.py @@ -0,0 +1,89 @@ +""" +15. 3Sum +Difficulty: Medium +https://leetcode.com/problems/3sum/ + +────────────────────────────────────────────────── + +Given an integer array nums, return all the triplets [nums[i], +nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + +nums[j] + nums[k] == 0. + +Notice that the solution set must not contain duplicate triplets. + + + +Example 1: + +Input: nums = [-1,0,1,2,-1,-4] +Output: [[-1,-1,2],[-1,0,1]] +Explanation: +nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0. +nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0. +nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0. +The distinct triplets are [-1,0,1] and [-1,-1,2]. +Notice that the order of the output and the order of the triplets +does not matter. + +Example 2: + +Input: nums = [0,1,1] +Output: [] +Explanation: The only possible triplet does not sum up to 0. + +Example 3: + +Input: nums = [0,0,0] +Output: [[0,0,0]] +Explanation: The only possible triplet sums up to 0. + + + +Constraints: + + • 3 <= nums.length <= 3000 + + • -10^5 <= nums[i] <= 10^5 +""" + + +class Solution: + def threeSum(self, nums: list[int]) -> list[list[int]]: + nums.sort() + result = [] + n = len(nums) + + for i in range(n): + # skip all zero + if i > 0 and nums[i] == nums[i - 1]: + continue + + # two pointers + left = i + 1 + right = n - 1 + target = -nums[i] + + while left < right: + current = nums[left] + nums[right] + + if current == target: + result.append([nums[i], nums[left], nums[right]]) + + # skip duplicates + while left < right and nums[left] == nums[left + 1]: + left += 1 + while left < right and nums[right] == nums[right - 1]: + right -= 1 + + # shift pointers + left += 1 + right -= 1 + + # since sorted, if current < target, then move left + elif current < target: + left += 1 + # since sorted, if current > target, then move right + else: + right -= 1 + + return result