public class TwoSum {
    // https://leetcode.com/problems/two-sum/description/
    // Given an array of integers, return indices of the two numbers such that they add up to a specific target.
    // You may assume that each input would have exactly one solution, and you may not use the same element twice.
    // For example: Given nums = [2, 7, 11, 15], target = 9,
    // Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].

    public TwoSum() {
        int[] nums = new int[]{3,2,4};
        int target = 6;
        int result[] = new int[2];

        // Time complexity -> O(n), space complexity -> O(n) for map
        Map map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (map.containsKey(target - nums[i])) {
                result[1] = i;
                result[0] = map.get(target - nums[i]);
                break;
            }
            map.put(nums[i], i);
        }

        /*  BRUTE FORCE! */
        // Time complexity -> O(n^2), space complexity -> O(1)
        for (int i = 0; i < nums.length; i++) {
            for (int j = i; j < nums.length; j++) {
                if (i != j) {
                    if (nums[i] + nums[j] == target) {
                        result[0] = i;
                        result[1] = j;
                        break;
                    }
                }
            }
        }

        System.out.print(result[0] + " " + result[1]);
    }
}