贪心算法+题目

news/2025/3/5 5:20:57/

算法>贪心算法

  • 跳跃游戏
  • 跳跃游戏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/news/1576739.html

相关文章

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_read_token

ngx_conf_read_token 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf) {u_char *start, ch, *src, *dst;off_t file_size;size_t len;ssize_t n, size;ngx_uint_t found, need_space, last_space, sharp_comm…

7.1.2 计算机网络的分类

文章目录 分布范围交换方式 分布范围 计算机网络按照分布范围可分为局域网、广域网、城域网。局域网的范围在10m~1km&#xff0c;例如校园网&#xff0c;网速高&#xff0c;主要用于共享网络资源&#xff0c;拓扑结构简单&#xff0c;约束少。广域网的范围在100km&#xff0c;例…

Windows10 Xming6 + Xshell7 实现远程 ubuntu-24.04.1-desktop gui 界面本地展示

Windows10 Xming6 + Xshell7 实现远程 ubuntu-24.04.1-desktop gui 界面本地展示 1 运行环境2 实现思路3 XMing3.1 工具下载安装与配置3.2 XMing 配置3.3 XMing配置4 Xshell 7 配置5 远程机器配置6 测试1 运行环境 本地Windows系统:Windows10 专业版 远程Linux系统: ubuntu-…

AI本地化部署强劲驱动GPU,LPU等AI芯片和服务器的爆发性寻求

人工智能技术正在经历从云端到边缘的深刻变革&#xff0c;这一转变催生了AI基础设施建设的全新需求。在数据安全、实时响应和成本优化的多重驱动下&#xff0c;AI本地化部署已成为不可逆转的趋势&#xff0c;推动GPU、LPU等AI芯片及配套服务器系统进入爆发性增长周期。这场变革…

【leetcode hot 100 560】和为K的子数组

解法一&#xff1a;用左右指针寻找字串&#xff0c;如果和>k&#xff0c;则减少一个数&#xff08;left&#xff09;&#xff1b;如果和<k&#xff0c;则加上一个数&#xff08;right&#xff09;。 class Solution {public int subarraySum(int[] nums, int k) {int nu…

从 Transformer 到 DeepSeek-R1:大型语言模型的变革之路与前沿突破

本文参考引用&#xff1a;medium-大型语言模型简史 2025年初&#xff0c;DeepSeek开源了一款开创性且高性价比的「大型语言模型」&#xff08;Large Language Model, LLM&#xff09; — — DeepSeek-R1&#xff0c;引发了AI领域的巨大变革。 本文回顾LLM的发展历程&#xff0…

Android Studio 新版本Gradle发布本地Maven仓库示例

发布代码到JitPack示例&#xff1a;https://blog.csdn.net/loutengyuan/article/details/145938967 以下是基于 Android Studio 24.2.2&#xff08;Gradle 8.10.2 AGP 8.8.0 JDK17&#xff09; 的本地 Maven 仓库发布示例&#xff0c;包含aar和jar的不同配置&#xff1a; 1.…

【java--数据结构】顺序表

1. 线性表的概念 线性表&#xff08;Linear List&#xff09;是一种基本的数据结构&#xff0c;它是由相同类型的元素组成的有限序列。线性表中的元素具有一对一的线性关系&#xff0c;即除了第一个元素和最后一个元素外&#xff0c;每个元素都有且仅有一个直接前驱和一个直接…