본문 바로가기
Programming Solve/Leetcode

Leetcode(리트코드) Two sum

by msm1029 2021. 3. 15.
반응형

문제 링크 : leetcode.com/problems/two-sum/

 

리트코드를 처음 들어간 기념으로 문제를 보자마자 생각나는대로 풀어보았는데

시간복잡도가 거슬려서 조금 더 효율 좋은 방법을 찾아보았다.

 

1. 브루트 포스 방식 - O(N^2)

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> ans; //return할 answer 벡터 생성
        bool br = false; //이중 for문을 벗어나기 위해 break 변수
        
        for(int i=0; i<nums.size(); i++){
            for(int j=i+1; j<nums.size(); j++){
                if((nums[i] + nums[j]) == target){ //만약 nums 배열의 i번째 수 + j번째 수가 target과 같다면
                    ans.push_back(i);
                    ans.push_back(j); //ans배열에 i, j를 넣고 for문을 멈춘다.
                    br = true;
                    break;
                }
            }
            if(br) break;
        }
        
        return ans;
    }
};

 

2. 해쉬 맵

직접 코드를 짜진 않았으므로 pseudo code로 대체한다.

 

unordered_map<int, int> hash;

를 선언하고

 

for문 안에서
int tmp = target - nums[i]

if(hash.find(tmp) != hash.end()){

    ans.push_back(i);
    ans.push_back(hash[tmp]);
    break;
}

else{ hash[nums[i]] = i; }

 

return ans;와 같이 풀어주면 된다.

반응형