[LeetCode-45] 基于贪心算法的跳跃游戏 II-最少跳跃次数的求解(C语言版)

/*

题目出处:LeetCode

题目序号:45. 跳跃游戏 II

题目叙述:给定一个长度为 n 的整数数组 nums。初始位置为 nums0。每个元素 numsi 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 numsi 处,你可以跳转到任意 numsi + j 处,返回到达 numsn - 1 的最小跳跃次数。

*/

贪心策略:

每次跳跃从可选择的位置中选择跳到可以达到最远距离的位置。

思路:

(1)每次 index 变动时,跳跃次数加 1;

(2)结束条件判定:当 jump index ≥ length 时,跳跃次数加 1 结束。

程序清单

#include<stdio.h>

#define OK 1

typedef int Status;

Status TestJumpTimes(int *nums, int length) {

int i;

int count = 0; // 跳跃次数

int index = 0; // 起点位置

int jumplength; // 记录当前位置可达到的最远距离

for(i = 0; i < length; i++){

jumpi = i + numsi;

}

if (length == 1) {

printf("您已在终点,无需跳跃,所需的最少跳跃次数为 0 次。"); // 如果起始位置就是终点,则可以到达

return OK;

}

while(jumpindex < length - 1){

int left = index + 1;

int right = jumpindex;

int temp = left; // 保存最远位置对应的索引

while (left < right) { // 寻找可跳的位置

if(jumptemp < jumpleft + 1) {

temp = left + 1;

}

left++;

}

printf("\n");

index = temp; // 跳跃

count++; // 跳跃次数加 1

}

count = count + 1; // 最后一次跳跃

printf("所需的最少跳跃次数为 %d 次。", count);

return OK;

}

int main() {

int n,i;

printf("请输入您想测试的数组的长度:\n");

scanf("%d",&n);

int an;

printf("请输入数组元素:\n");

for (i=0;i<n;i++){

scanf("%d",&ai);

}

TestJumpTimes(a,n);

return 0;

}

运行结果

相关推荐
青山木11 分钟前
Hot 100 --- 在排序数组中查找元素的第一个和最后一个位置
java·数据结构·算法·leetcode
其美杰布-富贵-李15 分钟前
聚类算法详解:K-means、层次聚类与 DBSCAN
算法·机器学习·kmeans·聚类
乱七八糟的屋子29 分钟前
MTL4 (Matrix Template Library) 超详细实战教程|C++高性能稠密/稀疏矩阵计算
c++·矩阵·稀疏矩阵·mtl4·matrixtemplate·c++线性代数·高性能数值计算
碧海银沙音频科技研究院1 小时前
4 BES2710编译环境搭建方法
嵌入式硬件·算法
mifengxing1 小时前
LeetCode 238 除自身以外数组的乘积|无除法O(n)时间+O(1)空间双解法
java·算法·leetcode
依然鸣1 小时前
PTA团体程序设计天梯赛L2真题讲解L2-045-048
数据结构·c++·经验分享·学习·算法·pat考试·pat
有点。2 小时前
C++深度优先搜索(二)
开发语言·c++·深度优先
丢掉幻想准备斗争2 小时前
5.5树与二叉树的应用
算法
ZhouDevin2 小时前
算法论文/模型微调2——仅骨干1%~3% 参数达到与全量微调相当的性能
算法
Sinosecu-OCR2 小时前
文通OCR技术深度解析:自研算法如何搞定复杂场景识别?
算法·ocr·ocr识别系统