An OOP Approach to Solving the Famous Two Sum Algorithmic Problem
Problem Statement
Here's the description of the Two Sum problem:
Given an array of integersnums
and an integertarget
, return indices of the two numbers such that they add up totarget
.
Example
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
My Solution
The trick part is here to return the indices. Therefore, you want a way to keep this data throughout the problem.
Thinking in terms of data structures, I use List as it's mutable. As a result, I don't need to keep track of which element we are currently looping.
I build the Class structure based on the final output I want.
Bonus: I also override the ToString method, which greatly helps to debug.
public class Solution {
public int[] TwoSum(int[] nums, int target) {
var item = new Item();
var list = nums.ToList();
item.firstValue = list.First();
item.firstIndex = 0;
list.RemoveAt(0);
var counter = 0;
while (list.Any())
{
var value = list.Where(x => item.firstValue + x == target);
if (value.Any())
{
item.secondValue = value.FirstOrDefault();
item.secondIndex = nums.ToList().LastIndexOf(item.secondValue);
return item.ToResult();
}
else
{
item.firstValue = list.FirstOrDefault();
item.firstIndex = nums.ToList().IndexOf(item.firstValue);
list.RemoveAt(0);
}
}
return item.ToResult();
}
}
public class Item
{
public int firstValue;
public int firstIndex;
public int secondValue;
public int secondIndex;
public int[] ToResult()
{
return new int[] { this.firstIndex, this.secondIndex };
}
public override String ToString()
{
return $"First Value - First Index: {this.firstValue} - {this.firstIndex} --- Second Value - Second Index : {this.secondValue} - {this.secondIndex}";
}
}
I usually use CodeWars to sharpen my programming skills but lately, I'm also been experimenting with LeetCode.
Source:
- LeetCode - https://leetcode.com/problems/two-sum/