即計算從起始位置到達目的位置的最短路徑長度。某點可達的下一點應在以此點爲半徑,此點的可達路長爲半徑的範圍內。還有一個限制,全部點在同一直線上。
某點的可達路長存儲在數組中,數組第一個元素存儲起始位置的信息,最後一個元素存儲目的位置的信息。
如: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