2021. 1. 6. 20:59ㆍ프로그래밍-코딩테스트/LeetCode
Given an array arr of integers, check if there exists two integers N and M such that N is the double of M ( i.e. N = 2 * M).
More formally check if there exists two indices i and j such that :
- i != j
- 0 <= i, j < arr.length
- arr[i] == 2 * arr[j]
정수 배열이 주어진 경우에, 특정 원소 N에 대하여 그것의 Double값을 가진 원소가 있는지 여부를 체크하는 문제
Loop를 두 번 돌려서 일일이 확인할 수도 있겠지만, 시간복잡도가 제곱으로 증가하므로 좋은 방법은 아니다.
그래서
1) 일단 같은 원소는 확인할 필요가 없으니 Set객체를 만들고
2) 배열에 대한 Loop를 돌면서
3) Set객체에 target element에 대한 곱하기2나 나누기2 element가 없다면 Set에 밀어넣어주고
4) 있다면 바로 true를, Loop끝까지 없다면 false를 리턴해주기로 했다.
var checkIfExist = function(arr) {
let indexSet = new Set()
//set 객체 생성
for(let i=0; i<arr.length;i++){
//배열을 돌되
if(indexSet.has(arr[i]/2)||indexSet.has(arr[i]*2)){
//set객체를 index로 두고 Array의 원소와 2배 관계를 갖는지 비교
return true
//2배가 객체가 있다면 true
}else{
indexSet.add(arr[i])
//없다면 index가 되는 set객체에 밀어넣주기
}
}
return false
//끝까지 없다면 false
};
'프로그래밍-코딩테스트 > LeetCode' 카테고리의 다른 글
[Array] Sort Array By Parity (0) | 2021.01.08 |
---|---|
[Array] Move Zeroes (0) | 2021.01.08 |
[Array] Remove Duplicates from Sorted Array (0) | 2021.01.08 |
[Array] Replace Elements with Greatest Element on Right Side (0) | 2021.01.06 |
[Array] Valid Mountain Array (0) | 2021.01.06 |