주제 :
음수가 아닌 정수 배열을 감안할 때, 당신은 처음에 배열의 첫 번째 위치에 있습니다. 배열의 각 요소는 그 위치에 이동할 수있는 최대 길이를 나타냅니다. 당신의 목표는 배열의 마지막 위치에 도달 할 홉의 수를 최소로 사용하는 것입니다.
예 :
입력 : 2,3,1,1,4]
출력 : (2)
설명 : 홉 최소가 최종 위치로 이동 2이다.
인덱스 0 내지 인덱스 1의 위치 1 단계 점프 점프 점프 한 다음 (3)는 배열의 마지막 위치에 도달 한 단계.
설명 :
당신을 가정하면 항상 배열의 마지막 위치에 도달 할 수 있습니다.
아이디어 (각 단계는 가장 먼 거리를 이동할 수 있습니다 각 단계를 발견 한 후 이동합니다)
범위의 범위를 결정할 수 있습니다 현재 홉 홉 홉을 활용할 수, nums.size을 통해 다음 점프 범위 () - 1, 끝!
홉의 수는 오히려 요청의 경로를 점프보다 범위가 결정 될 수 있기 때문에 바로 옆에 뛰어!
나는 1 홉 범위를 + : 최대 거리의 i 번째 홉은 내가 + 1 ~ 가장 먼 거리에있는 각 지점까지 홉.
각 액세스 포인트 번만 O (N)의 시간 복잡도, 공간 복잡도 O (1)
코드;
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size()<=1) return 0;
int step=0, start=0,reach=0;
while( reach <nums.size()-1 ){
int farest=0;
for(int i=start; i<=reach; ++i)
farest=max(farest,i+nums[i]);
start=reach+1;
reach=farest;
step++;
}
return step;
}
};