Um momento
Leetcode / 1. Two Sum

Pick a programming language:

Here is the source code for the solution to this problem.

# runtime O(n^2)
# def two_sum(nums: list[int], target: int):
#     for i in range(0, len(nums) - 1):
#         for j in range(i + 1, len(nums)):
#             a = nums[i]
#             b = nums[j]
#             if a + b == target:
#                 return [i, j]

# time O(n)
# space O(n)  
def two_sum(nums: list[int], target: int):
    seen = {}
    for i in range(len(nums)):
        difference = target - nums[i]
        if difference in seen:
            return [seen[difference], i]
        seen[nums[i]] = i
    return [-1, -1]

def test():
    testcase1 = two_sum([2, 7, 11, 15], 9)
    assert testcase1[0] == 0
    assert testcase1[1] == 1
    assert len(testcase1) == 2

    testcase2 = two_sum([3, 2, 4], 6)
    assert testcase2[0] == 1
    assert testcase2[1] == 2

    testcase3 = two_sum([3, 3], 6)
    assert testcase3[0] == 0
    assert testcase3[1] == 1

if __name__ == '__main__':
    test()
#include <vector>
#include <cassert>
#include <map>

using namespace std;

// time O(n^2)
// space O(1)
// vector<int> twoSum(vector<int>& nums, int target)
// {
//     vector<int> indices = {-1, -1};

//     for (int i = 0; i < nums.size() - 1; i++) {
//         for (int j = i + 1; j < nums.size(); j++) {
//             if (nums.at(i) + nums.at(j) == target) {
//                 indices.at(0) = i;
//                 indices.at(1) = j;
//                 return indices;
//             }
//         }
//     }

//     return indices;
// }

// time O(n)
// space O(n)
vector<int> twoSum(vector<int>& nums, int target)
{
    vector<int> indices = {-1, -1};
    map<int, int> seen;

    for (int i = 0; i < nums.size(); i++)
    {
        int difference = target - nums.at(i);
        map<int, int>::iterator it = seen.find(difference);
        if (it != seen.end()) {
            indices.at(0) = it->second;
            indices.at(1) = i;
            return indices;
        }

        seen.insert({nums.at(i), i});
    }

    return indices;
}

void test()
{
    vector<int> nums = {2, 7, 11, 15};
    auto testcase1 = twoSum(nums, 9);
    assert(testcase1[0] == 0);
    assert(testcase1[1] == 1);

    nums.assign({3, 2, 4});
    auto testcase2 = twoSum(nums, 6);
    assert(testcase2[0] == 1);
    assert(testcase2[1] == 2);

    nums.assign({3, 3});
    auto testcase3 = twoSum(nums, 6);
    assert(testcase3[0] == 0);
    assert(testcase3[1] == 1);
}

int main()
{
    test();
    return 0;
}
func twoSum(nums []int, target int) []int {
	ans := []int{-1, -1}
	var hashMap map[int]int = make(map[int]int)

	for i, num := range nums {
		var difference int = target - num

		if index, ok := hashMap[difference]; ok {
			ans[0] = index
			ans[1] = i
			return ans
		} else {
			hashMap[num] = i
		}
	}

	return ans
}
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] indices = new int[] { -1, -1 };
        HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();

        for (int i = 0; i < nums.length; i++) {
            int difference = target - nums[i];
            if (hashMap.containsKey(difference)) {
                indices[0] = hashMap.get(difference);
                indices[1] = i;
                return indices; // or break;
            }
            else {
                hashMap.put(nums[i], i);
            }
        }

        return indices;
    }
}
use std::collections::HashMap;

impl Solution {
    pub fn two_sum(nums: Vec<i32>, target: i32) -> Vec<i32> {
        let mut hashMap = HashMap::new();
        let mut indices = vec![-1, -1];

        for (i, num) in nums.iter().enumerate() {
            let diff = target - num;
            if let Some(&value) = hashMap.get(&diff) {
                indices[0] = value;
                indices[1] = i as i32;
                return indices;
            }
            else {
                hashMap.insert(num, i as i32);
            }
        }

        return indices;
    }
}
public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        int[] indices = new int[] { -1, -1 };
        Dictionary<int, int> hashMap = new Dictionary<int, int>();

        for (int i = 0; i < nums.Length; i++) {
            int difference = target - nums[i];
            if (hashMap.ContainsKey(difference)) {
                indices[0] = hashMap[difference];
                indices[1] = i;
                break;
            }
            else if (!hashMap.ContainsKey(nums[i])) {
                hashMap.Add(nums[i], i);
            }
        }

        return indices;
    }
}
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: