【Minimum Path Sum】cpp
2024-08-20 21:53:08
题目:
Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers along its path.
Note: You can only move either down or right at any point in time.
代码:
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if ( grid.empty() ) return ;
const int m = grid.size();
const int n = grid[].size();
vector<int> dp(n, INT_MAX);
dp[] = ;
for ( int i=; i<m; ++i )
{
dp[] += grid[i][];
for ( int j=; j<n; ++j )
{
dp[j] = grid[i][j] + std::min(dp[j-], dp[j]);
}
}
return dp[n-];
}
};
tips:
典型的“DP+滚动数组”,时间复杂度O(m*n),空间复杂度O(n)。
=============================================
第二次,用偷懒的做法了,二维dp直接写了。
class Solution {
public:
int minPathSum(vector<vector<int>>& grid) {
if ( grid.empty() ) return ;
int dp[grid.size()][grid[].size()];
fill_n(&dp[][], grid.size()*grid[].size(), );
dp[][] = grid[][];
for ( int i=; i<grid[].size(); ++i ) dp[][i] = dp[][i-]+grid[][i];
for ( int i=; i<grid.size(); ++i ) dp[i][] = dp[i-][]+grid[i][];
for ( int i=; i<grid.size(); ++i )
{
for ( int j=; j<grid[i].size(); ++j )
{
dp[i][j] = min(dp[i][j-],dp[i-][j])+grid[i][j];
}
}
return dp[grid.size()-][grid[].size()-];
}
};
最新文章
- Google自己的下拉刷新组件SwipeRefreshLayout
- jquery中each()函数
- php实现新闻页面
- WdatePicker日历控件使用方法(转)
- 动画原理——线性来回运动&;&;波动
- 将数据从服务器端同步到手机上, 并且需要离线工作,Couchebase Mobile 也许是目前最好的解决方案:
- $(function(){})和$(document).ready(function(){}) 的区别
- redis3.2.6 集群安装
- redis命令详解
- js分析 猫_眼_电_影 字体文件 @font-face
- CentOS安装和配置Mysql
- Webpack + vue 搭建
- springmvc 怎么响应json数据
- I2C和I2S的区别和使用方法
- WinForm ListView虚拟模式加载数据 提高加载速度
- vue+webpack 遇到的问题总结
- 笔记函数 - Ring0 Sleep()
- python直接下载图片到内存
- Redis 操作列表数据
- 自定义redis序列化工具