Jump Game II

Jump Game II 題解


題目描述

Jump Game II
即計算從起始位置到達目的位置的最短路徑長度。某點可達的下一點應在以此點爲半徑,此點的可達路長爲半徑的範圍內。還有一個限制,全部點在同一直線上。
某點的可達路長存儲在數組中,數組第一個元素存儲起始位置的信息,最後一個元素存儲目的位置的信息。
如:A = [2,3,1,1,4],一個最短路徑爲{A0}->{A1}->{A4},即最短路長爲2數組

題解

利用BFS(廣度搜索)便可。時間複雜度爲O(N),空間複雜度可優化至O(1)(由於不要求得出路徑且全部點在同一直線上)。優化

代碼

class Solution {
public:
    int jump(vector<int>& nums) {
        if (nums.size() < 2)
            return 0;
        long i = 0, max = 0, step = 1, end = nums.size() - 1;
        do {
            long j = i;
            for (i = max + 1; j < i; ++j) {
                long tmp = j + nums[j];
                if (tmp > max) {
                    if (tmp >= end)
                        return step;
                    max = tmp;
                }
            }
            ++step;
        } while (i <= max);
        return -1;
    }
};

總結

主要應用了圖論中廣度搜索的思想。spa

相關文章
相關標籤/搜索