贪心算法+题目

embedded/2025/3/5 5:12:40/

算法>贪心算法

  • 跳跃游戏
  • 跳跃游戏2

在这里插入图片描述
在这里插入图片描述

跳跃游戏

题目在这里插入图片描述
拿到题目就暴力穷举,我用的是dfs,加上备忘录之后还是超出时间限制。就考虑一下算法>贪心算法。你想 我在[0,n-2]位置遍历求出可以跳跃的最远距离,用farthest更新最大值,如果>=终点就返回true。

DFS递归:时间复杂度最坏是O(N*N)
在这里插入图片描述

class Solution {//dfsint[]memo;public boolean canJump(int[] nums) {memo=new int[nums.length];//memo[i]我在下标i出能不能到达终点 能1 不能0 没有访问-1Arrays.fill(memo,-1);//我站在下标为0的位置 求能不能跳到终点return dfs(nums,0);}//定义:从startIndex为起点,返回能不能到达终点boolean dfs(int[]nums,int startIndex){//到了终点 返回trueif(startIndex==nums.length-1){return true;}//startIndex曾经访问过,不再重复访问if(memo[startIndex]!=-1){return memo[startIndex]==1;}int steps=nums[startIndex];//可以跳跃几步for(int i=1;i<=steps;i++){//跳跃i步 看看我在下标startIndex+i位置可不可以到达终点if(dfs(nums,startIndex+i)==true){memo[startIndex+i]=1;return true;}}return false;}
}

贪心:时间复杂度O(N)

class Solution {public boolean canJump(int[] nums) {int n=nums.length;int farthest=0;for(int i=0;i<n-1;i++){//不断更新最远index 在i位置的最远距离是i+nums[i]farthest=Math.max(farthest,i+nums[i]);if(farthest<=i){return false;}}return farthest>=n-1;}
}

跳跃游戏2

题目在这里插入图片描述

class Solution {//dfs 暴力穷举final int bigVal=100000;int[] memo;public int jump(int[] nums) {int sz=nums.length;memo=new int[sz];//memo[i]:记录在下标为i处到达终点的最小步数Arrays.fill(memo,-1);return dfs(nums,0);}//定义:以startIndex为起点,返回到达终点的最小跳跃次数int dfs(int[]nums,int startIndex){//起点就是终点 跳跃0步if(startIndex==nums.length-1){return 0;}//曾经访问过if(memo[startIndex]!=-1){return memo[startIndex];}//不可跳跃if(nums[startIndex]==0){return bigVal;}int minStep=bigVal;int steps=nums[startIndex];//从startIndex可以跳steps步for(int i=1;i<=steps;i++){//找出最小的跳跃次数if(startIndex+i<nums.length){memo[startIndex+i]=dfs(nums,startIndex+i);minStep=Math.min(minStep,memo[startIndex+i]+1);}}return minStep;}
}

贪心:O(N)

class Solution {//贪心 public int jump(int[] nums) {int farthest=0,end=0,jump=0;int sz=nums.length;for(int i=0;i<sz-1;i++){farthest=Math.max(farthest,nums[i]+i);//可以跳到[i+1,farthest]之间,if(i==end){jump++;end=farthest;}}return jump;}
}

http://www.ppmy.cn/embedded/170098.html

相关文章

HarmonyOS学习第12天:解锁表格布局的奥秘

表格布局初相识 不知不觉&#xff0c;我们在 HarmonyOS 的学习旅程中已经走到了第 12 天。在之前的学习里&#xff0c;我们逐步掌握了 HarmonyOS 开发的各种基础与核心技能&#xff0c;比如组件的基本使用、布局的初步搭建等&#xff0c;这些知识就像一块块基石&#xff0c;为我…

【每日八股】计算机网络篇(二):TCP 和 UDP

目录 TCP 的头部结构&#xff1f;TCP 如何保证可靠传输&#xff1f;1. 确认应答机制2. 超时重传3. 数据排序与去重4. 流量控制5. 拥塞控制6. 校验和 TCP 的三次握手&#xff1f;第一次握手第二次握手第三次握手 TCP 为什么要三次握手&#xff1f;问题一&#xff1a;防止历史连接…

Qt之QStateMachine等待

在项目中经常需要等待&#xff0c;我们模拟0-30的数&#xff0c;假如我们其中5&#xff0c; 25的数需要进行等待&#xff0c;等待用户处理完自己事情后&#xff0c;按下按钮继续&#xff0c;找Qt的项目中有一个 QStateMachineqstatemmachine类提供了一个分层有限状态机。 QSta…

visual Studio Code安装

目录 一、软件下载 二、软件安装 一、软件下载 Visual Studio Code - Code Editing. RedefinedVisual Studio Code redefines AI-powered coding with GitHub Copilot for building and debugging modern web and cloud applications. Visual Studio Code is free and avail…

深入解析 Kubernetes CRD:原理、特点与典型应用场景

深入解析 Kubernetes CRD:原理、特点与典型应用场景 一、CRD 的本质与原理 1.1 什么是 CRD? CRD(Custom Resource Definition) 是 Kubernetes 提供的核心扩展机制,允许用户自定义 API 资源类型。通过 CRD,开发者可以将业务逻辑抽象为 Kubernetes 原生资源模型,实现与…

【AI深度学习基础】NumPy完全指南进阶篇:核心功能与工程实践(含完整代码)

NumPy系列文章 入门篇进阶篇终极篇 一、引言 在掌握NumPy基础操作后&#xff0c;开发者常面临真实工程场景中的三大挑战&#xff1a;如何优雅地处理高维数据交互&#xff1f;如何在大规模计算中实现内存与性能的平衡&#xff1f;怎样与深度学习框架实现高效协同&#xff1f;…

RT-DETR融合YOLOv12中的R-ELAN结构

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《YOLOv12: Attention-Centric Real-Time Object Detectors》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2502.12524 代码链接&#xff1a;https://gitcode.com…

2025国家护网HVV高频面试题总结来了04(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 一、HVV行动面试题分类 根据面试题的内容&#xff0c;我们将其分为以下几类&#xff1a; 漏洞利用与攻击技术 …