您的位置:首页 > 其它

Leetcode - Jump Game Two

2014-07-26 06:24 302 查看
和Jump Game思路差不多,都是DP,关键是要用一个数组maxNumbers[k]存储走k步的话,最远能够到达的序号,注意数组maxNumbers[]是递增的。

class Solution {
public:
const int MAXVALUE = 1 << 30;

int findMinStepToIndex(int maxNumbers[],int maxSteps,int index)
{
if (index == 0)
return 0;

int left = 1;
int right = maxSteps;

while (left < right)
{
int m = (left + right) / 2;

if (maxNumbers[m] < index)
{
left = m + 1;
}
else if (maxNumbers[m] > index)
{
if (maxNumbers[m - 1] < index)
return m;
else if (maxNumbers[m - 1] == index)
return m - 1;
else
right = m - 1;
}
else
{
return m;
}
}

return (right + left) / 2;
}

int jump(int A[], int n) {
int* maxNumbers = new int
;//mark the max number that steps i can walk.
int maxIndex = 0;
int maxNumber = 0;//the max index we can walk to.
maxNumbers[0] = 0;
for (int i = 1; i < n; i++){
maxNumbers[i] = 0;
}
int maxSteps = 0;

for (int i = 0; i < n - 1; i++){

if (maxNumber < i + A[i])
{
int cMinStep = findMinStepToIndex(maxNumbers, maxSteps, i);

maxNumbers[cMinStep + 1] = i + A[i];
maxNumber = i + A[i];

maxSteps = cMinStep + 1;

if (maxNumber >= n - 1)
return maxSteps;
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: