leetcode931_下降路径最小和

ops/2025/2/5 5:04:25/

1. 题意

一个N x N的方形数组,从第一行任意列出发,每次向下一行,可以向左向右保护列不动,求到最后一行的最小路径和。

2. 题解

简单动态规划问题
d p [ i ] [ j ] = m [ i ] [ j ] + min ⁡ { d p [ i − 1 ] [ j − 1 ] d p [ i − 1 ] [ j ] d p [ i − 1 ] [ j + 1 ] \begin{equation*} dp[i][j] =m[i][j] +\min \begin{cases} dp[i-1][j-1] \\ dp[i-1][j] \\ dp[i-1][j+1] \end{cases} \end{equation*} dp[i][j]=m[i][j]+min dp[i1][j1]dp[i1][j]dp[i1][j+1]

class Solution {
public:int minFallingPathSum(vector<vector<int>>& matrix) {int n = matrix.size();vector<vector<int>> dp( n,vector<int>(n, 0));for (int i = 0;i < n;i++) {dp[0][i] = matrix[0][i];}int ans = 1000000;for (int i = 1;i < n;i++) {for (int j = 0;j < n;j++) {dp[i][j] = dp[i - 1][j];if (j + 1 < n)dp[i][j] = min(dp[i][j], dp[i-1][j+1]);if (j - 1 >= 0)dp[i][j] = min(dp[i][j], dp[i-1][j-1]);dp[i][j] += matrix[i][j];}}for (int i = 0;i < n;i++) {ans = min(dp[n-1][i], ans);}return ans;}
};

可以像01背包那样,将空间复杂度压缩到O(n)

  • 空间压缩
class Solution {
public:int minFallingPathSum(vector<vector<int>>& matrix) {int n = matrix.size();vector<int> dp(n, 0);for (int i = 0;i < n;i++) {dp[i] = matrix[0][i];}int ans = 1000000;for (int i = 1;i < n;i++) {int pre = dp[0];for (int j = 0;j < n;j++) {int tmp = dp[j];if (j > 0)dp[j] = min(pre,dp[j]);if (j + 1 < n)dp[j] = min(dp[j+1],dp[j]);dp[j] += matrix[i][j];pre = tmp;}}for (int i = 0;i < n;i++) {ans = min(dp[i], ans);}return ans;}
};

http://www.ppmy.cn/ops/155773.html

相关文章

五. Redis 配置内容(详细配置说明)

五. Redis 配置内容(详细配置说明) 文章目录 五. Redis 配置内容(详细配置说明)1. Units 单位配置2. INCLUDES (包含)配置3. NETWORK (网络)配置3.1 bind(配置访问内容)3.2 protected-mode (保护模式)3.3 port(端口)配置3.4 timeout(客户端超时时间)配置3.5 tcp-keepalive()配置…

STM32 ADC

stm32单片机- ADC-技术详细解程序示范&#xff08;FREERTOSHAL多通道DMA&#xff09; - 知乎 (zhihu.com) 记录自己的嵌入式学习之路-CSDN博客 【STM32】ADC_stm32 adc-CSDN博客 STM32——ADC篇&#xff08;ADC的使用&#xff09;_stm32 adc-CSDN博客 【STM32 ADC】-CSDN博客…

手写防抖函数、手写节流函数

文章目录 1 手写防抖函数2 手写节流函数 1 手写防抖函数 函数防抖是指在事件被触发n秒后再执行回调&#xff0c;如果在这n秒内事件又被触发&#xff0c;则重新计时。这可以使用在一些点击请求的事件上&#xff0c;避免因为用户的多次点击向后端发送多次请求。 function debou…

IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统

IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术&#xff0c;提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…

从0到1:C++ 开启游戏开发奇幻之旅(一)

目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境&#xff08;IDE&#xff09; Visual Studio CLion 图形库 SDL&#xff08;Simple DirectMedia Layer&#xff09; SFML&#xff08;Simple and Fast Multim…

AI浪潮下的IT从业者:危机、机遇与进化之路

目录 0. 前言1. 当前形势&#xff1a;站在十字路口1.1 AI的突飞猛进1.2 行业现状分析 2. 核心应对策略2.1 技术深度与广度的平衡2.2 人机协同的工作模式2.3 持续学习与创新 3. 结语 0. 前言 在人工智能快速发展的今天&#xff0c;IT从业者面临前所未有的挑战与机遇。本文将从实…

Effective Objective-C 2.0 读书笔记—— 消息转发

Effective Objective-C 2.0 读书笔记—— 消息转发 文章目录 Effective Objective-C 2.0 读书笔记—— 消息转发前言消息转发机制概述动态方法解析处理dynamic的属性用于懒加载 消息转发快速消息转发完整消息转发 总结 前言 在前面我学习了关联对象和objc_msgSend的相关内容&a…

C++ 常用排序算法

排序算法 算法简介 sort // 对容器内元素进行排序 random_shuffle // 洗牌 指定范围内的元素随机调整次序 merge // 容器元素合并&#xff0c; 并存储到另一容器中 reverse // 反转指定范围内的元素1. sort 功能&#xff1a;对容器内部分区间按某种规则进行排序 函数原型&a…