An OOP Approach to Solving the Famous Two Sum Algorithmic Problem
How to Solve the Two Sum Problem using an Object Oriented Programming Approach?
Problem Statement
Here’s the description of the Two Sum problem:
Given an array of integers
nums
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())
{
if (item.firstValue + list.FirstOrDefault() == target)
{
item.secondValue = list.FirstOrDefault();
item.secondIndex = ++counter;
System.Console.WriteLine(item);
return item.ToResult();
}
else {
item.firstValue = list.FirstOrDefault();
item.firstIndex = ++counter;
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/