当前位置: 首页 > news >正文

wordpress 登录后 地址北京seo技术交流

wordpress 登录后 地址,北京seo技术交流,做一手楼盘的网站,广州网站建设吧优质博文:IT-BLOG-CN 一、题目 给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[…

优质博文:IT-BLOG-CN

一、题目

给定一个包含非负整数的m x n网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例 1:
在这里插入图片描述

输入:grid = [[1,3,1],[1,5,1],[4,2,1]]
输出:7
解释:因为路径1→3→1→1→1的总和最小。

示例 2:

输入:grid = [[1,2,3],[4,5,6]]
输出:12

m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 200

二、代码

动态规划

状态定义:设 dp 为大小 m×n 矩阵,其中 dp[i][j] 的值代表直到走到 (i,j) 的最小路径和。

转移方程:题目要求,只能向右或向下走,换句话说,当前单元格 (i,j) 只能从左方单元格 (i−1,j) 或上方单元格 (i,j−1) 走到,因此只需要考虑矩阵左边界和上边界。

走到当前单元格 (i,j) 的最小路径和 = “从左方单元格 (i−1,j) 与 从上方单元格 (i,j−1) 走来的 两个最小路径和中较小的 ” + 当前单元格值 grid[i][j] 。具体分为以下 4 种情况:
当左边和上边都不是矩阵边界时: 即当i!=0, j!=0时,dp[i][j]=min(dp[i−1][j],dp[i][j−1])+grid[i][j] ;
当只有左边是矩阵边界时: 只能从上面来,即当i=0,j!=0时, dp[i][j]=dp[i][j−1]+grid[i][j] ;
当只有上边是矩阵边界时: 只能从左面来,即当i!=0,j=0时, dp[i][j]=dp[i−1][j]+grid[i][j] ;
当左边和上边都是矩阵边界时: 即当i=0,j=0时,其实就是起点, dp[i][j]=grid[i][j];

初始状态:dp 初始化即可,不需要修改初始 0 值。

返回值:返回 dp 矩阵右下角值,即走到终点的最小路径和。
其实我们完全不需要建立 dp 矩阵浪费额外空间,直接遍历 grid[i][j] 修改即可。这是因为:grid[i][j] = min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j] ;原 grid 矩阵元素中被覆盖为 dp 元素后(都处于当前遍历点的左上方),不会再被使用到。

class Solution {public int minPathSum(int[][] grid) {for(int i = 0; i < grid.length; i++) {for(int j = 0; j < grid[0].length; j++) {if(i == 0 && j == 0) continue;else if(i == 0)  grid[i][j] = grid[i][j - 1] + grid[i][j];else if(j == 0)  grid[i][j] = grid[i - 1][j] + grid[i][j];else grid[i][j] = Math.min(grid[i - 1][j], grid[i][j - 1]) + grid[i][j];}}return grid[grid.length - 1][grid[0].length - 1];}
}

时间复杂度 O(M×N) 遍历整个grid矩阵元素。
空间复杂度 O(1) 直接修改原矩阵,不使用额外空间。

空间复杂度可以优化到原地工作,也就是O1,但是会破坏原矩阵的数据。通过分析可以发现,数据在扫描矩阵的时候,原数据信息只在扫描的时候用到一次,后续便不会再使用,所以扫描写dp的时候,可以直接进行覆盖,而不会影响最终的结局。也就是利用了系统为grid分配的内存进行记录动态规划的dp。下面贴上代码(代码写的烂,如果有人读到了,还请见谅)

#define min(x,y) ((x) > (y)) ? (y) : (x)int minPathSum(int** grid, int gridSize, int* gridColSize){unsigned char i,j;for(j = 1; j < *gridColSize;j++)      grid[0][j] += grid[0][j-1];for(i = 1; i < gridSize;i++)          grid[i][0] += grid[i-1][0];for(i = 1; i < gridSize; i++)for(j = 1; j < *gridColSize;j++ ) grid[i][j] += min(grid[i-1][j],grid[i][j-1]);return grid[gridSize-1][*gridColSize-1];
}
http://www.mmbaike.com/news/43304.html

相关文章:

  • 网站做导航的地图厦门关键词排名优化
  • 做任务免费领取东西的网站百度提交网址入口
  • 东莞网站制作百年谷歌优化怎么做
  • 昌大建设怎么样绍兴seo外包
  • 网站seo主管招聘seo是什么味
  • 网站建设项目安排计划表广告推广图片
  • xx市院门户网站建设方案百度关键词优化多少钱一年
  • 免费网站建设一级靠谱的推广平台有哪些
  • 成都建站模板网站制作网络优化工程师主要做什么
  • 北京网站备案号推广一款app的营销方案
  • 建设银行防钓鱼网站百度推广平台登陆
  • 如何用ps做网站首页手机网页制作app
  • 网站 网页制作seo独立站优化
  • 做h5动画的素材网站重庆seo务
  • 上海网站建设服务框架网站推广引流
  • 福州网站制作上海最新事件
  • 做移动网站建设男生技能培训班有哪些
  • 站设计培训课程中国销售网
  • 石英石台面做网单有什么网站海外推广营销系统
  • php动态网站开发唐四薪长尾关键词挖掘爱站工具
  • 茌平网站制作小程序开发收费价目表
  • 如何利用织梦cms做企业网站100个关键词
  • 彩页设计培训seo高级优化方法
  • 电商网站开发人员配置百度提交网站入口
  • 专做五金批发的网站网页代码模板
  • 广东品牌网站建设平台国产系统2345
  • 厦门免费做网站搜索引擎的设计与实现
  • 一个网站做各种好玩的实验seo长尾关键词排名
  • 网站模板如何编辑软件企业网站的作用和意义
  • 网站建设是永久使用吗查淘宝关键词排名软件有哪些