diff --git a/Two Sum/Solution.java b/Two Sum/Solution.java new file mode 100644 index 0000000..3113eb3 --- /dev/null +++ b/Two Sum/Solution.java @@ -0,0 +1,35 @@ +import java.util.Arrays; +import java.util.HashMap; + +class Solution { + public static void main(String[] args) { + int[] test1 = {2, 7, 11, 15}; int target1 = 9; + int[] test2 = {3, 2, 4}; int target2 = 6; + int[] test3 = {3, 3}; int target3 = 6; + + + System.out.println("twoSum( " + Arrays.toString(test1) + ", " + target1 + " ): " + Arrays.toString(twoSum(test1, target1))); + System.out.println("twoSum( " + Arrays.toString(test2) + ", " + target2 + " ): " + Arrays.toString(twoSum(test2, target2))); + System.out.println("twoSum( " + Arrays.toString(test3) + ", " + target3 + " ): " + Arrays.toString(twoSum(test3, target3))); + + } + + static int[] twoSum(int[] nums, int target) { + int[] res = new int[2]; + + HashMap d = new HashMap<>(); + + for (int i = 0; i < nums.length; i++) { + var remainderIdx = d.get(target - nums[i]); + if (remainderIdx != null) { + res[0] = i; + res[1] = remainderIdx; + return res; + } else { + d.put(nums[i], i); + } + } + + return res; + } +} diff --git a/Two Sum/a.out b/Two Sum/a.out new file mode 100755 index 0000000..a5943ac Binary files /dev/null and b/Two Sum/a.out differ diff --git a/Two Sum/solution.c b/Two Sum/solution.c new file mode 100644 index 0000000..cf3e1bb --- /dev/null +++ b/Two Sum/solution.c @@ -0,0 +1,48 @@ +#include + +typedef struct { + int key; + int value; + int used; +} Entry; + +int hash(int key, int size) { + return (key % size + size) % size; +} + +int* twoSum(int* nums, int numsSize, int target, int* returnSize) { + + int tableSize = numsSize * 2; + Entry* table = calloc(tableSize, sizeof(Entry)); + + int* res = malloc(sizeof(int) * 2); + *returnSize = 2; + + for (int i = 0; i < numsSize; i++) { + int complement = target - nums[i]; + int h = hash(complement, tableSize); + + while (table[h].used) { + if (table[h].key == complement) { + res[0] = i; + res[1] = table[h].value; + free(table); + return res; + } + h = (h + 1) % tableSize; + } + + h = hash(nums[i], tableSize); + while (table[h].used) { + h = (h + 1) % tableSize; + } + + table[h].used = 1; + table[h].key = nums[i]; + table[h].value = i; + } + + free(table); + return res; +} + diff --git a/Two Sum/solution.cpp b/Two Sum/solution.cpp new file mode 100644 index 0000000..ddb55cd --- /dev/null +++ b/Two Sum/solution.cpp @@ -0,0 +1,44 @@ +#include +#include +#include + +using namespace std; + +class Solution { +public: + vector twoSum(vector& nums, int target) { + vector res(2); + + unordered_map d; + + for (size_t i = 0; i < nums.size(); i++) { + if (d.find(target - nums[i]) != d.end()) { + res[0] = i; + res[1] = d[target - nums[i]]; + return res; + } else { + d[nums[i]] = i; + } + } + + return res; + } +}; + +int main (int argc, char *argv[]) { + Solution s; + + vector test1 = {2, 7, 11, 15}; int target1 = 9; + vector test2 = {3, 2, 4}; int target2 = 6; + vector test3 = {3, 3}; int target3 = 6; + + vector res1 = s.twoSum(test1, target1); + cout << res1[0] << ' ' << res1[1] << endl; + vector res2 = s.twoSum(test2, target2); + cout << res2[0] << ' ' << res2[1] << endl; + vector res3 = s.twoSum(test3, target3); + cout << res3[0] << ' ' << res3[1] << endl; + + return 0; +} + diff --git a/Two Sum/solution.py b/Two Sum/solution.py new file mode 100644 index 0000000..d9ca9fe --- /dev/null +++ b/Two Sum/solution.py @@ -0,0 +1,10 @@ +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + d: dict = {} + + for i in range(len(nums)): + if (target - nums[i]) in d.keys(): + return [i, d[target - nums[i]]] + else: + d[nums[i]] = i +