[LeetCode, 리트코드] Two Sum

1. Problem

주어진 정수 배열에서, 서로 더한 값이 특정 수가 되는 두 숫자의 인덱스들을 반환해라.

입력에는 정확히 하나의 해결책만이 존재한다고 가정한다. 또한 한 요소를 두 번이상 사용하면 안된다.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].



2. Solution

 

해쉬를 사용하는 것이 이번 문제의 핵심 키 포인트. 먼저 target의 보수를 구한 후 그 수가 hash에 있는지 찾는다. 없으면 현재 인덱스가 가리키는 값을 해쉬에 넣고 키는 값, 값은 인덱스로 한다. 그리고 해쉬에 보수 정보가 존재하면 현재 인덱스와 그 보수의 인덱스를 반환한다.



3. What I solved

class Solution {
public:
    unordered_map<int, int> hash;
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ret;
        for(int i=0; i < nums.size(); ++i){
            int complement = target - nums[i];
            if(hash.find(complement) != hash.end()){
                ret.push_back(i);
                ret.push_back(hash[complement]);
                break;
            }
            hash[nums[i]] = i;
        }
        return ret;
    }
};



4. Best solution

 

위와 동일

이 글을 공유하기

댓글(0)

Designed by JB FACTORY