회전 정렬 배열 검색 II
(예 를 들 어 배열
[0,0,1,2,2,5,6]
은 [2,5,6,0,0,1,2]
로 변 할 수 있다.주어진 목표 값 이 배열 에 존재 하 는 지 여 부 를 판단 하기 위해 함 수 를 만 듭 니 다.반환
true
이 존재 하지 않 으 면 반환 false
합 니 다.예시 1:
: nums = [2,5,6,0,0,1,2], target = 0
: true
예시 2:
: nums = [2,5,6,0,0,1,2], target = 3
: false
제목 분석:
이 문 제 는 회전 정렬 배열 을 검색 하 는 확장 입 니 다. 그 차이 점 은 배열 의 요 소 를 반복 할 수 있 습 니 다. 결 과 는 target 이 배열 에 있 는 지 여 부 를 판단 하 는 것 입 니 다. target 이 배열 에 있 는 위 치 를 되 돌려 주 는 것 이 아 닙 니 다.
배열 의 요 소 를 중복 할 수 있 기 때문에 문제 가 발생 할 수 있 습 니 다. 배열 을 회전 할 때 회전 하 는 위 치 는 target 일 수 있 습 니 다. 즉, 여러 target 을 분리 하 는 것 입 니 다. 예 를 들 어 배열
[0,0,1,2,2,5,6]
은 [2,5,6,0,0,1,2]
로 변 할 수 있 고 target = 2. 이 럴 때 회전 정렬 배열 의 구분 방법 을 검색 하면 target > nums[mid]
또는 target < nums[mid]
기준 으로 2 분 에 충돌 문제 가 발생 하기 때문에 여 기 는 nums[mid] > nums[left]
또는 nums[mid] < nums[left]
를 기준 으로 해 야 한다.이 문제 의 도형 분석 은 검색 회전 정렬 배열 과 유사 하 다.
코드 구현:
public boolean search(int[] nums, int target)
{
int left = 0;
int right = nums.length - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (nums[left] == target || nums[mid] == target || nums[right] == target)
return true;
else if (nums[mid] > nums[left])
{
if (target > nums[mid])
left = mid + 1;
else
{
if (target > nums[left])
right = mid - 1;
else
left = mid + 1;
}
}
else if (nums[mid] < nums[left])
{
if (target < nums[mid])
right = mid - 1;
else
{
if (target > nums[left])
right = mid - 1;
else
left = mid + 1;
}
}
else
left++;// , , target
}
return false;
}
주 함수:
public static void main(String[] args)
{
S2 s = new S2();
System.out.println(s.search(new int[]{2, 5, 6, 0, 0, 1, 2}, 5));
System.out.println(s.search(new int[]{1, 1, 3, 1}, 3));
System.out.println(s.search(new int[]{1, 1, 3, 1}, 2));
}
실행 결과:
true true false
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.