当前位置: 首页 > article >正文

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

/*

题目出处:LeetCode

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

题目叙述给定一个长度为 n 的整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处,返回到达 nums[n - 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 jump[length];    // 记录当前位置可达到的最远距离 
    for(i = 0; i < length; i++){
        jump[i] = i + nums[i];
    } 
    if (length == 1) {
        printf("您已在终点,无需跳跃,所需的最少跳跃次数为 0 次。");    // 如果起始位置就是终点,则可以到达 
        return OK;
    }
    while(jump[index] < length - 1){
        int left = index + 1;
        int right =  jump[index]; 
        int temp = left;                        // 保存最远位置对应的索引 
        while (left < right) {                    // 寻找可跳的位置 
            if(jump[temp] < jump[left + 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 a[n];
    printf("请输入数组元素:\n");
    for (i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    TestJumpTimes(a,n);
    return 0;
}

运行结果


http://www.kler.cn/a/380115.html

相关文章:

  • UI自动化测试 —— CSS元素定位实践!
  • Unity 使用Netcode实现用户登录和登出
  • 通过不当变更导致 PostgreSQL 翻车的案例分析与防范
  • HarmonyOS 移动应用开发
  • 软件测试面试八股文个人总结
  • 【MySQL】架构
  • Meta AI 推出机器人开源项目:推动触觉感知和人机交互的前沿研究
  • 安装中文版 Matlab R2022a
  • 基于STM32的智能温室环境监测与控制系统设计(代码示例)
  • Vue前端开发:元素动画效果之过渡动画
  • selinux和防火墙
  • 音频中sample rate是什么意思?
  • 为什么 5g 物理信道 采用不同的调制方式
  • ubuntu20.04 加固方案-检查是否设置登录超时
  • 【解决办法】无法使用右键“通过VSCode打开文件夹”
  • Linux云计算个人学习总结(二)
  • 宝顶白芽,慢生活的味觉盛宴
  • elastic search查找字段的方法
  • 考研要求掌握的C语言程度(插入排序)
  • 15分钟学 Go 第 36 天:Go的反射基础
  • 【K8S系列】Kubernetes 中 Service 的流量不均匀问题【已解决】
  • 江协科技STM32学习- P34 I2C通信外设
  • 统信UOS适配C#
  • 华为配置WLAN跨VLAN的三层漫游示例
  • LeetCode 热题100(七)【链表】(1)
  • 友思特应用 | FantoVision边缘计算:多模态传感+AI算法=新型非接触式医疗设备