0
点赞
收藏
分享

微信扫一扫

C调用C++接口

90哦吼 2024-07-24 阅读 43

给定数组arr,arr[i] ==k代表可以从位置i向右跳1~k个距离。比如,arr[2] == 3,代表从位置2可以跳到位置3、位置4或位置5。如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。

解答:

1 整型变量jump,代表目前跳了多少步。整型变量cur,代表如果只能跳jump步,最远能够达到的位置。整型变量next,代表如果在多跳一步,最远能够达到的位置。初始,jump=0,cur=0,next=0。

2 从左到右遍历arr,假设遍历到位置i

如果cur>=i,说明跳jump步可以到达位置i,此时什么也不做。

如果cur<i,说明只跳jump步不能到达位置i,需要多跳一步才行。此时令jump++,cur=next。表示多跳了一步,cur更新成跳jump+1步能够达到的位置,即next。

将next更新成math.max(next,i+arr[i]),表示下一次多跳一步到达的最远位置。

3 最终返回jump即可。

public int jump(int[] arr){
    if(arr == null || arr.length == 0){
        return 0;
    }
    int jump = 0;
    int cur = 0;
    int next = 0;
    for(int i = 0;i < arr.length;i++){
        if(cur < i){
            jump ++;
            cur = next;
        }
        next = Math.max(next,i+arr[i]);
    }
    return jump;
}
举报

相关推荐

0 条评论