Leetcode Java学习记录——动态规划基础

news2024/11/14 18:50:49

概念

首先想到递归、分治。动态规划本质也一样。
共性:找到重复子问题
差异性:有最优子结构,中途可以淘汰次优解。

动态规划是分治+最优子结构。

例题

斐波那契数列

递归实现,时间复杂度是指数级。
最基础的写法为

int fib(int n){
	if (n <= 0){
		return 0;
	}else if(n==1){
		return 1;
	}else{
		return fib(n-1)+fib(n-2);
	}
}	

简化一点的表达为

int fib(int n){
	return n<=1 ? n : fib(n-1)+fib(n-2);
}

改变时间复杂度的方法:加一个缓存

int fib(int n, int[] memo){
	if(n<=1){
		return n;
	}
	if(memo[n]==0){
		memo[n]= fib(n-1) + fib(n-2);
	}
	return memo[n];
}

递归加记忆化搜索,即为自顶向下的方式。
从叶子节点开始的话就是自底向上。——动态规划模板

int fib(int n){
	if(n<=1){
		return n;
	}
	int[] fib = new int[n-1];
	fib[0]=0;
	fib[1]=1;
	
	for(int i=2;i<=n;i++){
		fib[i] = fib[i-1] + fib[i-2];
	}
	return fib[n];
}

路径计数

只能向右和向下走,记有多少路径
题目:只能向右和向下走,记有多少路径。
分治:

int countPaths(boolean[][]grid, int row , int col){
	if(!validSquare(grid,row,col)) return 0;
	if(isAtEnd(grid,row,col)) return 1;
	return countPaths(grid,row+1,col) + countPaths(grid,row,col+1);
}

DP:

if a[i,j] = ‘空地’{
	opt[i,j]=opt[i+1,j]+opt[i,j+1];
}else{
	opt[i,j]=0;	
}
class Solution {
    public int uniquePathsWithObstacles(int[][] obstacleGrid) {
        int m = obstacleGrid.length;
        int n = obstacleGrid[0].length;
        if(obstacleGrid[m-1][n-1]==1) return 0;
        int[] cur = new int[n]; // 一维数组表示
        cur[n-1] = 1; //初始化

        //最下一行
        for(int i = n-2; i >= 0 ; --i) {
            if(obstacleGrid[m-1][i] == 1){
                cur[i] = 0;
            }else{
                cur[i] = cur[i+1];
            }
        }

        // 动态规划递推
        for (int i = m-2; i >= 0; --i) {
            if (obstacleGrid[i][n-1] == 1) {
                cur[n-1] = 0; // 处理最右列的情况
            }
            for (int j = n-2; j >= 0; --j) {
                if (obstacleGrid[i][j] == 1) {
                    cur[j] = 0;
                } else {
                    cur[j] += cur[j + 1];
                }
            }
        }
        return cur[0];
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LCP 633 平方数之和 [leetcode - 8]

最近是在研究双指针啊&#xff0c;leetcode刷的题都是这方面的。都记录在最近的文章里&#xff0c;大家有兴趣可以去我主页看看 LCP633 平方数之和 给定一个非负整数 c &#xff0c;你要判断是否存在两个整数 a 和 b&#xff0c;使得 a2 b2 c 。 示例 1&#xff1a; 输入&…

工业相机错峰启动优化方案

为了解决9台工业相机的错峰启动问题&#xff0c;可以通过LabVIEW程序来实现相机启动的优化。这样可以减少USB带宽的瞬间占用&#xff0c;并避免多个相机同时启动导致的资源冲突。下面是实现错峰启动的思路&#xff1a; 1. 分析启动顺序: 分组管理: 将9台相机分为多个组&#xf…

【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task4:源大模型微调实战(持续更新)

1.1 大模型微调技术简介 模型微调也被称为指令微调&#xff08;Instruction Tuning&#xff09;或者有监督微调&#xff08;Supervised Fine-tuning, SFT&#xff09;&#xff0c;该方法利用成对的任务输入与预期输出数据&#xff0c;训练模型学会以问答的形式解答问题&#xf…

exocad椅旁设计工作流程是指的什么,椅旁设计工作流程对初学者有什么帮助

随着牙科智能技术的不断进步&#xff0c;exocad软件的椅旁设计工作内容越来越受到重视。此项工作不仅代表了牙科数字化的新发展趋向&#xff0c;也为牙科专业人员&#xff0c;尤其是新手提供了方便高效的工作方法。本文将详细分析exocad椅旁设计工作流程是指的什么&#xff0c;…

神经网络算法 - 一文搞懂Transformer

本文将从Transformer的本质、Transformer的原理、Transformer架构改进三个方面&#xff0c;带您一文搞懂Transformer。 Transformer架构&#xff1a;主要由输入部分&#xff08;输入输出嵌入与位置编码&#xff09;、多层编码器、多层解码器以及输出部分&#xff08;输出线性层…

神经网络算法--文搞懂LSTM(长短期记忆网络)

本文将从LSTM的本质、LSTM的原理、LSTM的应用 三个方面&#xff0c;带您一文搞懂长短期记忆网络Long Short Term Memory | LSTM。 RNN 面临问题&#xff1a;RNN&#xff08;递归神经网络&#xff09;在处理长序列时面临的主要问题&#xff1a;短时记忆和梯度消失/梯度爆炸。 梯…

智慧导览系统主要在哪些场景有应用

随着信息化和智能化的快速发展&#xff0c;智慧导览系统作为一种新型导览工具&#xff0c;在多个领域展现出其独特的应用价值。该系统通过集合互联网、人工智能、大数据分析等技术&#xff0c;为用户提供更加便捷、高效的导览服务。以下将详细给大家介绍智慧导览系统主要在哪些…

获取阿里云Docker镜像加速器地址

注册并登录阿里云账号&#xff1a;首先&#xff0c;你需要有一个阿里云账号。如果还没有&#xff0c;可以在阿里云官网注册。 访问容器镜像服务&#xff1a;登录后&#xff0c;进入“产品与服务”&#xff0c;找到“容器服务”或“容器镜像服务”。阿里云容器服务 找到镜像加…

Kolmogorov-Arnold Networks——高效、可解释的神经网络的新前沿

引言 神经网络一直处于人工智能发展的前沿&#xff0c;从自然语言处理和计算机视觉到战略游戏、医疗保健、编码、艺术甚至自动驾驶汽车&#xff0c;无所不包。然而&#xff0c;随着这些模型的规模和复杂性不断扩大&#xff0c;它们的局限性正成为重大缺陷。对大量数据和计算能…

gazebo下使用Fast-planner配置(包含mpc局部规划+控制Gazebo小车以及FastPlanner配置)

源码链接&#xff1a; https://github.com/USE-jx/NMPC_CASADI_CPP?tabreadme-ov-file #这是NMPC的 里面有Fast-Planner&#xff0c;但编译可能缺少东西&#xff0c;所以再放一个Fast-Planner的&#xff0c;可以装装缺少的库 https://github.com/HKUST-Aerial-Robotics/Fast-P…

centos7.9系统安装cloudpods

1. 简介&#xff1a; Cloudpods 是一款简单、可靠的企业IaaS资源管理软件。帮助未云化企业全面云化IDC物理资源&#xff0c;提升企业IT管理效率。 Cloudpods 帮助客户在一个地方管理所有云计算资源。统一管理异构IT基础设施资源&#xff0c;极大简化多云架构复杂度和难度&…

1553B总线电缆网络

1553B总线电缆网络 MIL-STD-1553B总线全称为飞行器内部时分命令/响应多路数据总线&#xff08;Aircraft Internal Time Division Command/Response Multiplex Data Bu&#xff09;&#xff0c;它是由美国SAE的AE-9E委员会在军方和工业界的支持下&#xff0c;我国与之对应的标准…

Ubuntu清除缓存的方法--防止系统崩溃

前情提要&#xff1a;虚拟机出现过好几次的崩溃&#xff0c;终于同事发给了一个可以清除缓存的 1&#xff09;崩溃1&#xff1a;之前将虚拟机放置在某盘中&#xff0c;该盘后续一直有别的东西存入&#xff0c;导致ubuntu直接打不开&#xff0c;后续就将虚拟机直接放在电脑单独…

洛谷 P1094 [NOIP2007 普及组] 纪念品分组

题目背景 NOIP2007 普及组 T2 题目描述 元旦快到了&#xff0c;校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡&#xff0c;他要把购来的纪念品根据价格进行分组&#xff0c;但每组最多只能包括两件纪念品&#xff0c; 并且…

RAG Foundry:一个用于增强大语言模型以实现检索增强生成的框架

一、结论写在前面 论文来自Intel Labs。 论文标题&#xff1a;RAG Foundry: A Framework for Enhancing LLMs for Retrieval Augmented Generation 论文链接&#xff1a;https://arxiv.org/pdf/2408.02545 代码&#xff1a;https://github.com/IntelLabs/RAGFoundry 实现检…

这一定是魔法!5个绝招解决苹果微信照片删除了怎么恢复问题

情景一&#xff1a;更新苹果手机系统后&#xff0c;重新打开微信却发现聊天记录中的照片不见了。 情景二&#xff1a;清理微信缓存数据以释放手机空间&#xff0c;再次打开微信发现聊天中的微信照片找不到了。 …… …… 类似于上述的情景在日常生活中时有发生&#xff0c;但…

【数据分享】1929-2024年全球站点的逐日降水量数据(Shp\Excel格式\1万多个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;说到常用的降水数据&#xff0c;最详细的降水数据是具体到气象监测站点的降水数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2024年全…

AI时代的价值盈利②:人工智能将如何改变SaaS应用的定价指标

介绍 随着行业和企业走上人工智能之旅&#xff0c;对每个投资者和商业领袖来说&#xff0c;最紧迫的问题之一是这种变革性技术将如何重塑他们的商业模式。GenAI有望释放巨大的价值&#xff0c;并有可能彻底改变消费者与服务或应用程序的交互方式。虽然它可能会带来巨大的成本&…

热门的蓝牙耳机中,哪种类型更受欢迎?四款热度高的开放式耳机

在如今的耳机市场中&#xff0c;开放式耳机异军突起&#xff0c;成为了众多消费者的新宠。如果你还在为传统入耳式耳机带来的不适而烦恼&#xff0c;那么开放式耳机绝对值得你一试。它不仅能让你在享受音乐的同时&#xff0c;依然可以清晰感知周围环境&#xff0c;保障你的安全…

函数与二元关系在编程中的应用

目录 引言 函数的基本概念与编程应用 二元关系与其在编程中的实现 函数与关系的高级编程应用 总结与应用 引言 函数与二元关系是计算机科学中描述元素间相互作用的核心工具。它们在算法设计、数据库管理、图论及各种建模任务中发挥着不可或缺的作用。掌握函数与二元关系的…