[https://leetcode.com/problems/two-sum/submissions/]
릿 코드 문제가 면접에 나오기 좋아 보인다.ㅎㅎ; 공부하자.
음 이 문제는 배열이 주어져 있을때, 특정 수가 되는 두 수의 위치를 구하는 것인데,
나는 어떻게 했냐면, 배열을 정렬하고, 합을 두 수로 만든다는 것에서, 작은 것과 큰것을 더하고 투포인터 방식으로 둘중에 한쪽을 줄여서 찾는 방식으로 풀었다.
이전에 백준에서 풀어본 문제라 그냥 자연스럽게 떠오른거 같다.....
근데 음 솔루션을 보니
1. 브루트 포스
2. 투패스 해쉬 테이블로 ,시간 절약
왜 투패스냐면 두번 이터레이트 하는데, 첫번째는 해쉬테이블에 값을 넣고, 두번째는 타겟과의 차이값이 해쉬테이블에 있는지 확인 하는것이다.
3. 원패스 해쉬 테이블
그냥 한번의 이터레이션에서 한번에 넣고, 바로 값이 있는지 확인해도 된다.
**내가 사용한 방법은 투포인터다. 시간 복잡도는 o(logn)이긴 할듯.
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<pair<int,int>>vec;
for(int i=0;i<nums.size();i++){
vec.push_back(make_pair(nums[i],i));
}
sort(vec.begin(),vec.end());
int st = 0, dt = nums.size()-1;
int sum ;
while(st < dt){
sum = vec[st].first + vec[dt].first;
if( target < sum ){
dt --;
}else if( target > sum){
st++;
}
else{
break;
}
}
vector<int> ans;
ans.push_back(vec[st].second);
ans.push_back(vec[dt].second);
return ans;
}
};
'알고리즘 문제 풀기' 카테고리의 다른 글
<백준> 11400번 단절선, 이중 연결 요소. (0) | 2020.04.04 |
---|---|
<leet code> Add Two Numbers ,etc/ c++ malloc vs new (0) | 2020.03.12 |
<백준> 17070번 : 파이프 옮기기1 (0) | 2020.03.12 |
<leet code> 이번에는 풀음. Median of Two Sorted Arrays (0) | 2020.03.12 |
투포인터 - 백준:2143번 두 배열의 합 (0) | 2020.02.26 |