C# Programming Questions and Solutions : Two Sum

Friday, October 6, 2023 | Category: Programming, Web Development, C#
Blog Post Image

Question

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

Example 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].

Example 2:

Input: nums = [3,2,4], target = 6
Output: [1,2]

Example 3:

Input: nums = [3,3], target = 6
Output: [0,1]

Constraints:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • Only one valid answer exists.

Follow-up: Can you come up with an algorithm that is less than O(n2) time complexity?

Solution

public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        // Create a dictionary to store the numbers and their indices
        Dictionary<int, int> numIndexMap = new Dictionary<int, int>();
        
        // Iterate through the array
        for (int i = 0; i < nums.Length; i++) {
            // Calculate the complement of the current number
            int complement = target - nums[i];
            
            // If the complement is present in the dictionary, return the indices of the two numbers
            if (numIndexMap.ContainsKey(complement)) {
                return new int[] { numIndexMap[complement], i };
            }
            
            // If the complement is not present, add the current number and its index to the dictionary
            // We add the number to the dictionary only after checking for its complement to avoid using the same element twice
            if (!numIndexMap.ContainsKey(nums[i])) {
                numIndexMap[nums[i]] = i;
            }
        }
        
        // If no solution is found, return null
        return null;
    }
}

Share this article

Other Latest Blog Posts

SO WHAT YOU THINK ?

If you have any questions, please do not hesitate to contact me.

Contact Me