Skip to content

Commit 3714d08

Browse files
committed
#246 solution
1 parent 5e79d32 commit 3714d08

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
풀이 :
3+
mid를 기준으로 왼쪽이 정렬된 경우, 오른쪽이 정렬된 경우를 나누고
4+
정렬된 숫자 범위에 target값이 존재하느냐에 따라 범위를 이분 탐색으로 좁혀나간다
5+
6+
- 이분탐색 시 종료조건 및 비교조건에서 등호를 포함시킬지 여부 고려 필요
7+
while (left <= right) -> 탐색 범위에 양 끝 인덱스 포함
8+
-> left = mid + 1 또는 right = mid - 1 로 새로운 범위 업데이트
9+
10+
while (left < right) -> 탐색 범위에 오른쪽 끝 인덱스는 제외
11+
-> left = mid + 1 또는 right = mid 로 새로운 범위 업데이트
12+
13+
nums 개수 N
14+
15+
TC : O(logN)
16+
이분 탐색으로 찾아서 log2N의 복잡도를 갖는다
17+
18+
SC : O(1)
19+
*/
20+
21+
#include <vector>
22+
using namespace std;
23+
24+
class Solution {
25+
public:
26+
int search(vector<int>& nums, int target) {
27+
int left = 0, right = nums.size() - 1;
28+
29+
while (left <= right)
30+
{
31+
int mid = left + (right - left) / 2;
32+
33+
if (nums[mid] == target)
34+
return mid;
35+
36+
if (nums[left] <= nums[mid]) {
37+
if (nums[left] <= target && target < nums[mid])
38+
right = mid -1;
39+
else
40+
left = mid + 1;
41+
}
42+
else {
43+
if (nums[mid] < target && target <= nums[right])
44+
left = mid + 1;
45+
else
46+
right = mid - 1;
47+
}
48+
}
49+
return -1;
50+
}
51+
};

0 commit comments

Comments
 (0)