C ++ 알고리즘 : 욕심 알고리즘 점프 게임 -----

주제 :

음수가 아닌 정수 배열을 감안할 때, 당신은 처음에 배열의 첫 번째 위치에 있습니다. 배열의 각 요소는 그 위치에 이동할 수있는 최대 길이를 나타냅니다. 당신의 목표는 배열의 마지막 위치에 도달 할 홉의 수를 최소로 사용하는 것입니다.

예 :

입력 : 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;
    }
};

추천

출처blog.csdn.net/qq_31820761/article/details/91861869