# Solving Leetcode Interviews in Seconds with AI: Maximum Number of Distinct Elements After Operations


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "3397" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> You are given an integer array nums and an integer k. You are allowed to perform the following operation on each element of the array at most once:  Add an integer in the range [-k, k] to the element.  Return the maximum possible number of distinct elements in nums after performing the operations.   Example 1:  Input: nums = [1,2,2,3,3,4], k = 2 Output: 6 Explanation: nums changes to [-1, 0, 1, 2, 3, 4] after performing operations on the first four elements.  Example 2:  Input: nums = [4,4,4,4], k = 1 Output: 3 Explanation: By adding -1 to nums[0] and 1 to nums[1], nums changes to [3, 5, 4, 4].    Constraints:  1 <= nums.length <= 105 1 <= nums[i] <= 109 0 <= k <= 109  

	# Explanation
	Here's a breakdown of the approach and the Python code:

*   **Greedy Approach:** For each number in the sorted array, try to make it distinct by adding the minimum possible value within the `[-k, k]` range such that it doesn't collide with previously considered distinct numbers.
*   **Set to Track Distinct Numbers:** Use a set to efficiently keep track of the distinct numbers we've already created.
*   **Iterate and Adjust:** Iterate through the sorted array, and for each number, check if a distinct number can be formed within its adjustable range `[num - k, num + k]`. Prefer to form the smallest distinct number possible in that range to leave room for subsequent elements.

*   **Runtime Complexity:** O(n log n) due to sorting.
*   **Storage Complexity:** O(n) in the worst case, due to the set.

	
	# Code
	```python
	def max_distinct_elements(nums, k):
    nums.sort()
    distinct_nums = set()
    count = 0
    for num in nums:
        min_val = num - k
        max_val = num + k

        found = False
        for val in range(min_val, max_val + 1):
            if val not in distinct_nums:
                distinct_nums.add(val)
                count += 1
                found = True
                break
        if not found and num not in distinct_nums and -k <=0 <=k:
            if (num) not in distinct_nums:
                distinct_nums.add(num)
                count+=1

    return count
	```
			
