What type of content would you like to see more on this channel?
Anonymous Poll
29%
A) 📚 Coding resources (books, articles, and tips)
45%
B) 💻 Daily LeetCode-style questions with solutions
3%
C) 🗳 Polls Q-A on coding-related topics
13%
D) 🏆 Coding challenges with leaderboards
10%
E) 🎥 Video explanation
👍2
Leetcode with dani
What type of content would you like to see more on this channel?
I’d be happy if you suggest any specific topic you want to be covered
🌟 Day 6 Challenge: Integer to Roman 🌟
🔗 Problem Link: Integer to Roman
📝 Problem Statement:
Roman numerals are fascinating representations of numbers, constructed using the following symbols:
• I (1), V (5), X (10), L (50), C (100), D (500), M (1000).
To form Roman numerals, we combine these symbols from largest to smallest, using subtraction for specific cases like 4 (IV) and 9 (IX). Your task is to convert any integer between 1 and 3999 into its Roman numeral equivalent!
✨ Examples:
• Input:
• Input:
• Input:
🔍 Approach: Greedy Algorithm with Predefined Values
1. Create a list of pairs (value, symbol) sorted in descending order, including subtractive combinations (e.g., 4, 9, 40).
2. Iterate through this list, subtracting the largest possible value from
💻 Solution Code:
📖 Explanation with Example (1994):
1. Subtract 1000 → 'M', remaining
2. Subtract 900 → 'CM', remaining
3. Subtract 90 → 'XC', remaining
4. Subtract 4 → 'IV'. Result:
⏳ Complexity Analysis:
• Time Complexity: O(1) (fixed number of iterations over 13 symbols).
• Space Complexity: O(1) (output string has a maximum fixed length).
💡 Test Yourself!
Can you solve this problem efficiently?
🔗 Problem Link: Integer to Roman
📝 Problem Statement:
Roman numerals are fascinating representations of numbers, constructed using the following symbols:
• I (1), V (5), X (10), L (50), C (100), D (500), M (1000).
To form Roman numerals, we combine these symbols from largest to smallest, using subtraction for specific cases like 4 (IV) and 9 (IX). Your task is to convert any integer between 1 and 3999 into its Roman numeral equivalent!
✨ Examples:
• Input:
num = 3 → Output: "III"• Input:
num = 58 → Output: "LVIII" (L = 50, V = 5, III = 3)• Input:
num = 1994 → Output: "MCMXCIV" (M = 1000, CM = 900, XC = 90, IV = 4)🔍 Approach: Greedy Algorithm with Predefined Values
1. Create a list of pairs (value, symbol) sorted in descending order, including subtractive combinations (e.g., 4, 9, 40).
2. Iterate through this list, subtracting the largest possible value from
num, and appending the corresponding symbol to your result.💻 Solution Code:
def intToRoman(num: int) -> str:
val_sym = [
(1000, 'M'), (900, 'CM'), (500, 'D'), (400, 'CD'),
(100, 'C'), (90, 'XC'), (50, 'L'), (40, 'XL'),
(10, 'X'), (9, 'IX'), (5, 'V'), (4, 'IV'), (1, 'I')
]
res = []
for value, symbol in val_sym:
while num >= value:
res.append(symbol)
num -= value
if num == 0:
break
return ''.join(res)
📖 Explanation with Example (1994):
1. Subtract 1000 → 'M', remaining
num = 994.2. Subtract 900 → 'CM', remaining
num = 94.3. Subtract 90 → 'XC', remaining
num = 4.4. Subtract 4 → 'IV'. Result:
"MCMXCIV".⏳ Complexity Analysis:
• Time Complexity: O(1) (fixed number of iterations over 13 symbols).
• Space Complexity: O(1) (output string has a maximum fixed length).
💡 Test Yourself!
Can you solve this problem efficiently?
👍2
Day 6 question 2
Difficulty : Hard
▎LeetCode Question: Minimum Window Substring
▎Problem Statement:
Given two strings
▎Example:
• Input:
• Output:
▎Constraints:
•
•
▎Solution Explanation:
1. Initialization: Create dictionaries to store the frequency of characters in string
2. Sliding Window: Expand the window by moving the right pointer. Update the
3. Contraction: When the window contains all required characters, contract the window by moving the left pointer. Update the
4. Result: Return the minimum window substring. If no valid window is found, return an empty string.
▎Python Code:
Here’s the solution using the sliding window technique:
▎Complexity Analysis:
• Time Complexity: O(N + M), where N is the length of string
• Space Complexity: O(M), for storing the frequency of characters in
Difficulty : Hard
▎LeetCode Question: Minimum Window Substring
▎Problem Statement:
Given two strings
s and t, find the minimum window in s which will contain all the characters in t. If there is no such window in s that covers all characters in t, return the empty string "".▎Example:
• Input:
s = "ADOBECODEBANC", t = "ABC"• Output:
"BANC"▎Constraints:
•
1 <= s.length, t.length <= 10^5•
s and t consist of uppercase and lowercase English letters.▎Solution Explanation:
1. Initialization: Create dictionaries to store the frequency of characters in string
t and the current window. Use variables to track the number of unique characters required and formed in the window.2. Sliding Window: Expand the window by moving the right pointer. Update the
window_counts and formed variables.3. Contraction: When the window contains all required characters, contract the window by moving the left pointer. Update the
window_counts and formed variables. While contracting, check if the current window is smaller than the minimum window found so far.4. Result: Return the minimum window substring. If no valid window is found, return an empty string.
▎Python Code:
Here’s the solution using the sliding window technique:
def minWindow(s: str, t: str) -> str:
if not t or not s:
return ""
dict_t = {}
for char in t:
dict_t[char] = dict_t.get(char, 0) + 1
required = len(dict_t)
formed = 0
window_counts = {}
left, right = 0, 0
ans = float('inf'), None, None
while right < len(s):
character = s[right]
window_counts[character] = window_counts.get(character, 0) + 1
if character in dict_t and window_counts[character] == dict_t[character]:
formed += 1
while left <= right and formed == required:
character = s[left]
if right - left + 1 < ans[0]:
ans = (right - left + 1, left, right)
window_counts[character] -= 1
if character in dict_t and window_counts[character] < dict_t[character]:
formed -= 1
left += 1
right += 1
return "" if ans[0] == float('inf') else s[ans[1]: ans[2] + 1]
▎Complexity Analysis:
• Time Complexity: O(N + M), where N is the length of string
s and M is the length of string t.• Space Complexity: O(M), for storing the frequency of characters in
t.👍2
Leetcode with dani
Day 6 question 2 Difficulty : Hard ▎LeetCode Question: Minimum Window Substring ▎Problem Statement: Given two strings s and t, find the minimum window in s which will contain all the characters in t. If there is no such window in s that covers all characters…
I post questions for all of you, so please choose a question based on your experience. Make sure to understand the sliding window technique before attempting to solve this question, as it is a difficult one. This question is intended for those who understand the sliding window concept and have practiced previously
Sure! Here’s the formatted response for the Minimum Average Difference problem, similar to your example:
---
🌟 Day 6 Challenge: Q 3 Minimum Average Difference 🌟 Medium
🔗 Problem Link: Minimum Average Difference
📝 Problem Statement:
You are given a non-negative integer array
✨ Examples:
• Input:
• Input:
• Input:
🔍 Approach: Prefix Sum Calculation
1. Calculate the total sum of the array to help compute right averages.
2. Iterate through each index, maintaining a running sum (left sum) of elements from the start.
3. For each index, compute the left average and right average based on the sums.
4. Calculate the absolute difference between these two averages and track the minimum difference and corresponding index.
💻 Solution Code:
📖 Explanation with Example (1994):
1. For each index, keep track of the left sum and calculate the left average.
2. Compute the right average using the total sum minus the left sum.
3. Calculate the absolute difference between left and right averages.
4. Track the smallest difference and its corresponding index.
⏳ Complexity Analysis:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(1) (only a few variables used for calculation).
💡 Test Yourself!
Can you solve this problem efficiently? Dive in and share your solution with us! Let's see your coding skills shine! 🌟
---
🌟 Day 6 Challenge: Q 3 Minimum Average Difference 🌟 Medium
🔗 Problem Link: Minimum Average Difference
📝 Problem Statement:
You are given a non-negative integer array
nums. Your task is to find the index i such that the absolute difference between the average of the first i + 1 elements and the average of the last n - i - 1 elements is minimized. If there are multiple indices with the same minimum difference, return the smallest index.✨ Examples:
• Input:
nums = [2, 5, 3, 9, 5, 3] → Output: 3• Input:
nums = [0] → Output: 0• Input:
nums = [1, 2, 3, 4, 5, 6] → Output: 2🔍 Approach: Prefix Sum Calculation
1. Calculate the total sum of the array to help compute right averages.
2. Iterate through each index, maintaining a running sum (left sum) of elements from the start.
3. For each index, compute the left average and right average based on the sums.
4. Calculate the absolute difference between these two averages and track the minimum difference and corresponding index.
💻 Solution Code:
def minimumAverageDifference(nums):
n = len(nums)
total_sum = sum(nums) # Calculate the total sum of the array
left_sum = 0 # Initialize left sum
min_diff = float('inf') # Initialize minimum difference to infinity
min_index = -1 # Initialize minimum index
for i in range(n):
left_sum += nums[i] # Update left sum with the current element
# Calculate left average
left_avg = left_sum // (i + 1)
# Calculate right average
if i < n - 1:
right_avg = (total_sum - left_sum) // (n - i - 1)
else:
right_avg = 0 # If it's the last element, right average is 0
# Calculate absolute difference
diff = abs(left_avg - right_avg)
# Update minimum difference and index if a new minimum is found
if diff < min_diff:
min_diff = diff
min_index = i
return min_index
# Example usage:
print(minimumAverageDifference([2, 5, 3, 9, 5, 3])) # Output: 3
print(minimumAverageDifference([0])) # Output: 0
📖 Explanation with Example (1994):
1. For each index, keep track of the left sum and calculate the left average.
2. Compute the right average using the total sum minus the left sum.
3. Calculate the absolute difference between left and right averages.
4. Track the smallest difference and its corresponding index.
⏳ Complexity Analysis:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(1) (only a few variables used for calculation).
💡 Test Yourself!
Can you solve this problem efficiently? Dive in and share your solution with us! Let's see your coding skills shine! 🌟
Leetcode with dani
https://youtu.be/mScpHTIi-kM?si=4DktjUpEx8NiGjDQ
check this in ur free time
🌟 Day 7 Challenge 1: Subarray Sums Divisible by K 🌟
🔗 Problem Link: Subarray Sums Divisible by K
📝 Problem Statement:
Given an integer array
✨ Examples:
• Input:
• Input:
🔍 Approach: Prefix Sum with Remainder Counting
1. Use a prefix sum to keep track of the cumulative sum of elements as you iterate through the array.
2. Calculate the remainder of the prefix sum when divided by
3. Utilize a hash map (or dictionary) to count occurrences of each remainder, allowing you to efficiently determine how many valid subarrays end at each position.
💻 Solution Code:
▎Example usage:
solution = Solution()
print(solution.subarraysDivByK([4, 5, 0, -2, -3, 1], 5)) # Output: 7
print(solution.subarraysDivByK([5], 9)) # Output: 0
📖 Explanation with Example:
1. As you iterate through the array, maintain a running total (
2. For each element, check how many times this remainder has been seen before using the hash map. Each occurrence corresponds to a valid subarray.
3. Update the hash map with the current remainder count for future subarray calculations.
⏳ Complexity Analysis:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(k) (to store counts of remainders).
💡 Test Yourself!
Can you solve this problem efficiently?
🔗 Problem Link: Subarray Sums Divisible by K
📝 Problem Statement:
Given an integer array
nums and an integer k, return the number of non-empty subarrays that have a sum divisible by k. A subarray is a contiguous part of an array.✨ Examples:
• Input:
nums = [4, 5, 0, -2, -3, 1], k = 5 → Output: 7• Input:
nums = [5], k = 9 → Output: 0🔍 Approach: Prefix Sum with Remainder Counting
1. Use a prefix sum to keep track of the cumulative sum of elements as you iterate through the array.
2. Calculate the remainder of the prefix sum when divided by
k. If two prefix sums have the same remainder, the subarray between those indices has a sum divisible by k.3. Utilize a hash map (or dictionary) to count occurrences of each remainder, allowing you to efficiently determine how many valid subarrays end at each position.
💻 Solution Code:
from collections import defaultdict
class Solution:
def subarraysDivByK(self, nums: List[int], k: int) -> int:
prefix_counts = defaultdict(int)
prefix_counts[0] = 1 # Initialize with prefix sum 0 having remainder 0
current_sum = 0
result = 0
for num in nums:
current_sum += num
mod = current_sum % k
result += prefix_counts[mod]
prefix_counts[mod] += 1
return result
▎Example usage:
solution = Solution()
print(solution.subarraysDivByK([4, 5, 0, -2, -3, 1], 5)) # Output: 7
print(solution.subarraysDivByK([5], 9)) # Output: 0
📖 Explanation with Example:
1. As you iterate through the array, maintain a running total (
current_sum) and calculate its remainder when divided by k.2. For each element, check how many times this remainder has been seen before using the hash map. Each occurrence corresponds to a valid subarray.
3. Update the hash map with the current remainder count for future subarray calculations.
⏳ Complexity Analysis:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(k) (to store counts of remainders).
💡 Test Yourself!
Can you solve this problem efficiently?
🌟 Day 7 Challenge: Minimum Size Subarray Sum 🌟
🔗 Problem Link: Minimum Size Subarray Sum
📝 Problem Statement:
Given an array of positive integers
✨ Examples:
• Input:
Explanation: The subarray
• Input:
• Input:
🔍 Approach 1: O(n) Sliding Window
This method uses two pointers to form a window and expands or shrinks it based on the current sum:
1. Initialize: Set two pointers (
2. Expand: Move the right pointer to add elements to
3. Shrink: Once
4. Return: If a valid subarray is found, return its length; otherwise, return 0.
💻 Solution Code:
🔍 Approach 2: O(n log n) Prefix Sum with Binary Search
This method involves creating a prefix sum array and using binary search to find the smallest index where the difference in prefix sums is at least the target.
1. Prefix Sum Array: Create an array such that
2. Binary Search: For each index
3. Update Answer: Calculate the subarray length as
4. Return: Return the minimum length found, or 0 if no valid subarray exists.
💻 Solution Code:
📖 Explanation with Example:
• In the Sliding Window approach, we continuously expand our window by moving the right pointer and check if we can shrink it from the left side once we reach or exceed the target sum.
• In the Prefix Sum with Binary Search approach, we precompute cumulative sums and use binary search to efficiently find valid subarrays.
⏳ Complexity Analysis:
• Sliding Window:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(1) (only a few variables used).
• Prefix Sum with Binary Search:
• Time Complexity: O(n log n) (due to binary search).
🔗 Problem Link: Minimum Size Subarray Sum
📝 Problem Statement:
Given an array of positive integers
nums and a positive integer target, return the minimal length of a subarray whose sum is greater than or equal to target. If there is no such subarray, return 0 instead.✨ Examples:
• Input:
target = 7, nums = [2,3,1,2,4,3] → Output: 2 Explanation: The subarray
[4,3] has the minimal length.• Input:
target = 4, nums = [1,4,4] → Output: 1• Input:
target = 11, nums = [1,1,1,1,1,1,1,1] → Output: 0🔍 Approach 1: O(n) Sliding Window
This method uses two pointers to form a window and expands or shrinks it based on the current sum:
1. Initialize: Set two pointers (
left, right), a running sum (curr_sum), and a variable (min_len) initialized to infinity.2. Expand: Move the right pointer to add elements to
curr_sum.3. Shrink: Once
curr_sum meets or exceeds the target, update min_len and shrink the window from the left until the sum is less than the target.4. Return: If a valid subarray is found, return its length; otherwise, return 0.
💻 Solution Code:
def minSubArrayLen(target, nums):
n = len(nums)
left = 0
curr_sum = 0
min_len = float('inf')
for right in range(n):
curr_sum += nums[right]
while curr_sum >= target:
min_len = min(min_len, right - left + 1)
curr_sum -= nums[left]
left += 1
return min_len if min_len != float('inf') else 0
# Testing the sliding window approach:
print(minSubArrayLen(7, [2, 3, 1, 2, 4, 3])) # Expected Output: 2
print(minSubArrayLen(4, [1, 4, 4])) # Expected Output: 1
print(minSubArrayLen(11, [1, 1, 1, 1, 1, 1, 1, 1])) # Expected Output: 0
🔍 Approach 2: O(n log n) Prefix Sum with Binary Search
This method involves creating a prefix sum array and using binary search to find the smallest index where the difference in prefix sums is at least the target.
1. Prefix Sum Array: Create an array such that
prefix[i+1] = prefix[i] + nums[i] with prefix[0] = 0.2. Binary Search: For each index
i, compute the required bound (prefix[i] + target) and use binary search to find the smallest index j where prefix[j] is at least that bound.3. Update Answer: Calculate the subarray length as
j - i and update the minimal length.4. Return: Return the minimum length found, or 0 if no valid subarray exists.
💻 Solution Code:
def minSubArrayLenBinarySearch(target, nums):
n = len(nums)
# Build prefix sum array
prefix = [0] * (n + 1)
for i in range(n):
prefix[i + 1] = prefix[i] + nums[i]
min_len = float('inf')
# Iterate over prefix sum array
for i in range(n):
bound = prefix[i] + target
# Find the minimal j such that prefix[j] >= bound
j = bisect.bisect_left(prefix, bound)
if j <= n:
min_len = min(min_len, j - i)
return min_len if min_len != float('inf') else 0
# Testing the O(n log n) approach:
print(minSubArrayLenBinarySearch(7, [2, 3, 1, 2, 4, 3])) # Expected Output: 2
print(minSubArrayLenBinarySearch(4, [1, 4, 4])) # Expected Output: 1
print(minSubArrayLenBinarySearch(11, [1, 1, 1, 1, 1, 1, 1, 1])) # Expected Output: 0
📖 Explanation with Example:
• In the Sliding Window approach, we continuously expand our window by moving the right pointer and check if we can shrink it from the left side once we reach or exceed the target sum.
• In the Prefix Sum with Binary Search approach, we precompute cumulative sums and use binary search to efficiently find valid subarrays.
⏳ Complexity Analysis:
• Sliding Window:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(1) (only a few variables used).
• Prefix Sum with Binary Search:
• Time Complexity: O(n log n) (due to binary search).
👍2
🌟 Day 8 Challenge 1: Sum of All Odd Length Subarrays 🌟 Difficulty :Easy
🔗 Problem Link: Sum of All Odd Length Subarrays
📝 Problem Statement:
Given an array of positive integers
✨ Examples:
• Input:
• Input:
🔍 Approach: Counting Contributions Using Prefix Sums
1. Count Subarrays: For each element in the array, determine how many odd-length subarrays include that element.
2. Calculate Ranges: For an element at index
3. Use Remainders: Count the occurrences of each remainder when dividing the prefix sums by 2 to identify odd-length contributions.
💻 Solution Code 1 :
💻 Solution Code 2 optimal:
▎Example usage:
📖 Explanation with Example:
1. For each index
2. Use the counts of ways to select starting and ending positions to determine how many of those subarrays are odd-length.
3. Multiply the value of each element by its count of appearances in odd-length subarrays and sum these contributions for the final result.
⏳ Complexity Analysis:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(1) (no extra space used beyond a few variables).
💡 Test Yourself!
Can you implement this solution efficiently? Dive in and share your approach with us! Let's see your coding skills shine! 🌟
🔗 Problem Link: Sum of All Odd Length Subarrays
📝 Problem Statement:
Given an array of positive integers
arr, return the sum of all possible odd-length subarrays of arr. A subarray is a contiguous subsequence of the array.✨ Examples:
• Input:
arr = [1, 4, 2, 5, 3] → Output: 58• Input:
arr = [1, 2] → Output: 3🔍 Approach: Counting Contributions Using Prefix Sums
1. Count Subarrays: For each element in the array, determine how many odd-length subarrays include that element.
2. Calculate Ranges: For an element at index
i, calculate how many ways it can be included in odd-length subarrays by considering both left and right ranges.3. Use Remainders: Count the occurrences of each remainder when dividing the prefix sums by 2 to identify odd-length contributions.
💻 Solution Code 1 :
class Solution:
def sumOddLengthSubarrays(self, arr: List[int]) -> int:
left = 0
p = [0 for i in range(len(arr)+1)]
p[1] = arr[0]
for i in range(1,len(arr)):
p[i+1] = p[i] +arr[i]
total = 0
for i in range(1,len(p)):
l = 0
while l<i:
if (i-l)%2:
total += p[i]-p[l]
l+=1
return total
💻 Solution Code 2 optimal:
class Solution:
def sumOddLengthSubarrays(self, arr: List[int]) -> int:
total = 0
n = len(arr)
for i, val in enumerate(arr):
left = i + 1 # ways to choose start position
right = n - i # ways to choose end position
# Count of odd-length subarrays that include arr[i]
odd_count = ((left + 1) // 2) * ((right + 1) // 2) + (left // 2) * (right // 2)
total += val * odd_count
return total
▎Example usage:
solution = Solution()
print(solution.sumOddLengthSubarrays([1, 4, 2, 5, 3])) # Output: 58
print(solution.sumOddLengthSubarrays([1, 2])) # Output: 3
📖 Explanation with Example:
1. For each index
i, calculate how many odd-length subarrays can be formed that include arr[i].2. Use the counts of ways to select starting and ending positions to determine how many of those subarrays are odd-length.
3. Multiply the value of each element by its count of appearances in odd-length subarrays and sum these contributions for the final result.
⏳ Complexity Analysis:
• Time Complexity: O(n) (single pass through the array).
• Space Complexity: O(1) (no extra space used beyond a few variables).
💡 Test Yourself!
Can you implement this solution efficiently? Dive in and share your approach with us! Let's see your coding skills shine! 🌟
Leetcode with dani
🌟 Day 8 Challenge 1: Sum of All Odd Length Subarrays 🌟 Difficulty :Easy 🔗 Problem Link: Sum of All Odd Length Subarrays 📝 Problem Statement: Given an array of positive integers arr, return the sum of all possible odd-length subarrays of arr. A subarray…
YouTube
Sum of All Odd Length Subarrays | LeetCode 1588 | Explained and Java Code
In this video I go over problem 1588: Sum of All Odd Length Subarrays. This is a neat problem because although it's labeled as easy, you can optimize it to an O(n) solution. Let me know if you have any questions or video suggestions.
Example: 0:26
Code:…
Example: 0:26
Code:…
🌟 Day 9 Challenge: Count Number of Nice Subarrays 🌟
🔗 Problem Link: Count Number of Nice Subarrays Difficulty: Medium
📝 Problem Statement:
Given an array of integers
▎Two Approaches to Solve the Problem
▎Approach 1: Sliding Window Technique
This approach uses a sliding window to count the number of subarrays with exactly
Explanation:
1. Function
2. Counting Subarrays: For each position of
3. Final Calculation: The main function returns the difference between the counts of subarrays with at most
▎Approach 2: Using Indices of Odd Numbers
This approach tracks the indices of odd numbers directly and counts the valid subarrays based on these indices.
Explanation:
1. Initialization: Similar to the first approach, we initialize variables to track counts and indices.
2. Iterate through the array: For each element, check if it’s odd and update our list of indices (
3. Adjusting for excess odds: When the count exceeds
4. Final Count: After processing, check for any remaining valid segments to add to the total.
▎Complexity Analysis for Both Approaches:
• Time Complexity: O(n), where n is the length of the input array. Both approaches iterate through the array a single time.
• Space Complexity: O(n) in the worst case for storing indices in Approach 2.
▎Example Usage:
🔗 Problem Link: Count Number of Nice Subarrays Difficulty: Medium
📝 Problem Statement:
Given an array of integers
nums and an integer k, a continuous subarray is called nice if it contains exactly k odd numbers. Return the number of nice subarrays.▎Two Approaches to Solve the Problem
▎Approach 1: Sliding Window Technique
This approach uses a sliding window to count the number of subarrays with exactly
k odd numbers.
class Solution:
def numberOfSubarrays(self, nums: List[int], k: int) -> int:
def atMostK(k):
count = 0
left = 0
for right in range(len(nums)):
if nums[right] % 2 == 1:
k -= 1
while k < 0:
if nums[left] % 2 == 1:
k += 1
left += 1
count += right - left + 1
return count
return atMostK(k) - atMostK(k - 1)
Explanation:
1. Function
atMostK(k): This helper function counts the number of subarrays that contain at most k odd numbers. It uses a sliding window where left and right pointers define the current window.2. Counting Subarrays: For each position of
right, if the number is odd, we decrement k. If k becomes negative, we increment left until we have at most k odd numbers again. The number of valid subarrays ending at right is added to the count.3. Final Calculation: The main function returns the difference between the counts of subarrays with at most
k and k-1 odd numbers, which gives us exactly k.▎Approach 2: Using Indices of Odd Numbers
This approach tracks the indices of odd numbers directly and counts the valid subarrays based on these indices.
class Solution:
def numberOfSubarrays(self, nums: List[int], k: int) -> int:
total = 0
count_odd = 0
l = 0
myset = []
for i in range(len(nums)):
if nums[i] % 2: # Check if the number is odd
myset.append(i) # Store the index of the odd number
count_odd += 1
if count_odd > k:
# If we have more than k odd numbers, we need to move the left pointer
if l:
l1 = (myset[l] - (myset[l - 1])) # Distance between two odd indices
r = i - myset[-2] # Distance from the second last odd index to current
total += l1 * r # Count subarrays formed
else:
r = i - myset[-2]
total += (myset[l] + 1) * r # Count subarrays formed when l is 0
l += 1 # Move the left pointer
count_odd -= 1 # Decrease the count of odd numbers
# Check for the last segment if count_odd >= k
if count_odd >= k:
if l:
l1 = (myset[l] - (myset[l - 1]))
r = (len(nums) - myset[-1])
total += l1 * r
else:
r = (len(nums) - myset[-1])
total += (myset[l] + 1) * r
return total
Explanation:
1. Initialization: Similar to the first approach, we initialize variables to track counts and indices.
2. Iterate through the array: For each element, check if it’s odd and update our list of indices (
myset) and counts.3. Adjusting for excess odds: When the count exceeds
k, adjust the left pointer to maintain exactly k odds and calculate valid subarrays based on distances between stored indices.4. Final Count: After processing, check for any remaining valid segments to add to the total.
▎Complexity Analysis for Both Approaches:
• Time Complexity: O(n), where n is the length of the input array. Both approaches iterate through the array a single time.
• Space Complexity: O(n) in the worst case for storing indices in Approach 2.
▎Example Usage:
nums = [1, 1, 2, 1, 1]
k = 3
solution = Solution()
print(solution.numberOfSubarrays(nums, k)) # Output: Number of nice subarrays
💡 Test Yourself!
Feel free to ask for any further modifications or explanations!
LeetCode
Count Number of Nice Subarrays - LeetCode
Can you solve this real interview question? Count Number of Nice Subarrays - Given an array of integers nums and an integer k. A continuous subarray is called nice if there are k odd numbers on it.
Return the number of nice sub-arrays.
Example 1:
Input:…
Return the number of nice sub-arrays.
Example 1:
Input:…
Leetcode with dani
🌟 Day 9 Challenge: Count Number of Nice Subarrays 🌟 🔗 Problem Link: Count Number of Nice Subarrays Difficulty: Medium 📝 Problem Statement: Given an array of integers nums and an integer k, a continuous subarray is called nice if it contains exactly k odd…
post questions for all of you, so please choose a question based on your experience. Make sure to understand the sliding window and prefix sum technique before attempting to solve this question,
Leetcode with dani
https://youtu.be/03ogf95osXw?si=qvW3WGO78Y9-G_yn
For those who didn't see the video, the speaker challenges the old idea that just knowing how to code will guarantee you a good job. With AI becoming more popular, the tech world is changing fast. Big companies like Google, Salesforce, Meta, and Amazon are now using advanced AI tools to do tasks that used to be done by human coders, and they can do them just as well as mid-level engineers. This shift is not only changing how companies hire but also leading to job cuts in the industry.
But the speaker argues that coding isn't going away. Instead, we need to think differently: we should combine our coding skills with new AI tools. He shares a simple five-step plan for developers who want to succeed in this new environment. This plan focuses on having a strong coding foundation, using AI to work more efficiently, understanding how AI works, applying these skills to real projects, and always learning as the field changes.
GPT's opinion : I believe that while AI can handle many routine tasks, the creative and problem-solving parts of coding are still really important. In my opinion, coding makes up about 80% of the development process, with AI helping out with the other 20%—making things easier and taking care of repetitive work. Embracing the combination of human creativity and AI technology is essential for success in the tech world moving forward.
But the speaker argues that coding isn't going away. Instead, we need to think differently: we should combine our coding skills with new AI tools. He shares a simple five-step plan for developers who want to succeed in this new environment. This plan focuses on having a strong coding foundation, using AI to work more efficiently, understanding how AI works, applying these skills to real projects, and always learning as the field changes.
GPT's opinion : I believe that while AI can handle many routine tasks, the creative and problem-solving parts of coding are still really important. In my opinion, coding makes up about 80% of the development process, with AI helping out with the other 20%—making things easier and taking care of repetitive work. Embracing the combination of human creativity and AI technology is essential for success in the tech world moving forward.
👍3