728x90
rotatedArraySearch
문제
부분적으로 오름차순 정렬*된 정수의 배열(rotated)과 정수(target)를 입력받아 target의 인덱스를 리턴해야 합니다.
- 부분적으로 정렬된 배열: 배열을 왼쪽 혹은 오른쪽으로 0칸 이상 순환 이동할 경우 완전히 정렬되는 배열
- 예시: [4, 5, 6, 0, 1, 2, 3]은 왼쪽으로 3칸 또는 오른쪽으로 4칸 순환 이동할 경우 완전히 정렬됩니다.
나의 문제 풀이
const rotatedArraySearch = function (rotated, target) {
// TODO : 여기에 코드를 작성합니다.
// 반복문을 돌면서 target과 같은 value의 인덱스를 리턴한다
// return rotated.indexOf(target)
function findArr(target, arr, idx){
for(let i = idx; i < arr.length; i++){
if(target === arr[i]){
return i
}
}
return -1
}
let result = 0;
result = findArr(target, rotated, result)
return result
};
reference
const rotatedArraySearch = function (rotated, target) {
let left = 0,
right = rotated.length - 1;
while (left <= right) {
let middle = parseInt((right + left) / 2);
if (rotated[middle] === target) {
return middle;
}
if (rotated[left] < rotated[middle]) {
// 왼쪽 절반이 정렬되어 있는 상태
if (target < rotated[middle] && rotated[left] <= target) {
right = middle - 1;
} else {
left = middle + 1;
}
} else {
// 오른쪽 절반이 정렬되어 있는 상태
if (target <= rotated[right] && rotated[middle] < target) {
left = middle + 1;
} else {
right = middle - 1;
}
}
}
return -1;
};
728x90
'코플릿 > toyproblem' 카테고리의 다른 글
toy problem 06 (0) | 2021.10.28 |
---|---|
toy problem 05 (0) | 2021.10.28 |
toy problem 04 (0) | 2021.10.21 |
toy problem 03 (0) | 2021.10.20 |
toy problem 02 (0) | 2021.10.20 |