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

浙江高端网站建设公司网站seo推广怎么做

浙江高端网站建设公司,网站seo推广怎么做,页面升级每天自动更新,网络策划推广题目 LCR 100. 三角形最小路径和 中等 相关标签 数组 动态规划 给定一个三角形 triangle ,找出自顶向下的最小路径和。 每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 1 的两个结点…

题目

LCR 100. 三角形最小路径和

中等

相关标签

数组   动态规划

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。

示例 1:

输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]
输出:11
解释:如下面简图所示:23 46 5 7
4 1 8 3
自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

示例 2:

输入:triangle = [[-10]]
输出:-10

提示:

  • 1 <= triangle.length <= 200
  • triangle[0].length == 1
  • triangle[i].length == triangle[i - 1].length + 1
  • -104 <= triangle[i][j] <= 104

进阶:

  • 你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题吗?

注意:本题与主站 120 题相同: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路和解题方法

  1. 首先定义了一个类 Solution,其中包含了一个公有成员函数 minimumTotal,该函数接收一个二维 vector triangle 作为参数,并返回一个整数作为最小路径和的结果。

  2. 在 minimumTotal 函数中,首先获取了三角形的行数 n,然后定义了一个二维 vector dp 用于存储中间状态的计算结果。其中 dp[i][j] 表示从三角形顶部到位置 (i, j) 的最小路径和。

  3. 接着对 dp 数组进行初始化,将顶部的值赋为 triangle[0][0],表示三角形顶部的路径和就是顶部元素的值。

  4. 然后使用动态规划的思想,从第二行开始遍历每一行,依次计算每个位置的最小路径和。具体地,对于每一行的第一个元素和最后一个元素,它们只能由上一行对应位置的元素到达,因此可以直接计算出它们的最小路径和;对于每一行的其他位置,它们可以由上一行相邻的两个位置中的较小值到达,因此需要取上一行相邻位置的最小路径和中的较小值,并加上当前位置的值,得到当前位置的最小路径和。

  5. 最后,在计算完所有位置的最小路径和后,对最后一行的路径和进行排序,取最小值作为结果返回。

复杂度

        时间复杂度:

                O(n*n)

        时间复杂度为 O(n^2),其中 n 为三角形的行数。这是因为在动态规划的过程中,我们需要计算每个位置的最小路径和,而每个位置需要 O(1) 的时间来进行计算,总共有大约 n^2 个位置需要计算。

        空间复杂度

                O(n*n)

        空间复杂度也为 O(n^2),因为我们使用了一个二维数组 dp 来存储中间状态的计算结果,其大小为 n*n,所以空间复杂度也与 n 的平方成正比。

c++ 代码

class Solution {
public:int minimumTotal(vector<vector<int>>& triangle) {// 获取三角形的行数int n = triangle.size();// 创建一个二维数组dp来保存每个位置的最小路径和vector<vector<int>> dp(n,vector<int>(n));// 初始化dp数组的第一个元素为三角形顶部的元素值dp[0][0] = triangle[0][0];// 从第二行开始遍历三角形的每一行for(int i= 1;i<n;++i){// 每一行的第一个元素只能由上一行的第一个元素得到dp[i][0] = dp[i-1][0] + triangle[i][0];// 每一行的最后一个元素只能由上一行的最后一个元素得到dp[i][i] = dp[i-1][i-1] + triangle[i][i];// 遍历每一行的中间元素for(int j = 1;j<i;++j){// 中间元素的最小路径和为上一行相邻两个元素中较小的那个加上当前元素的值dp[i][j] = min(dp[i-1][j-1] , dp[i-1][j]) + triangle[i][j];}}// 返回dp数组最后一行中的最小值,即为整个三角形的最小路径和sort(dp[n-1].begin(),dp[n-1].end());return dp[n-1][0];}
};

C++优化代码

class Solution {
public:int minimumTotal(vector<vector<int>>& triangle) {// 获取三角形的行数int n = triangle.size();// 定义一个二维数组 f 用于存储中间状态的计算结果,使用滚动数组进行优化vector<vector<int>> f(2, vector<int>(n));// 初始化三角形顶部的最小路径和f[0][0] = triangle[0][0];// 从第二行开始遍历每一行for (int i = 1; i < n; ++i) {int curr = i % 2;int prev = 1 - curr;// 计算每一行的第一个元素的最小路径和f[curr][0] = f[prev][0] + triangle[i][0];// 计算每一行的其他位置的最小路径和for (int j = 1; j < i; ++j) {f[curr][j] = min(f[prev][j - 1], f[prev][j]) + triangle[i][j];}// 计算每一行的最后一个元素的最小路径和f[curr][i] = f[prev][i - 1] + triangle[i][i];}// 返回最后一行中的最小路径和return *min_element(f[(n - 1) % 2].begin(), f[(n - 1) % 2].end());}
};

Java代码

class Solution {public int minimumTotal(List<List<Integer>> triangle) {// 获取三角形的行数int n = triangle.size();// 定义二维数组 f 用于存储中间状态的计算结果int[][] f = new int[n][n];// 初始化三角形顶部的最小路径和f[0][0] = triangle.get(0).get(0);// 从第二行开始遍历每一行for (int i = 1; i < n; ++i) {// 计算每一行的第一个元素的最小路径和f[i][0] = f[i - 1][0] + triangle.get(i).get(0);// 计算每一行的其他位置的最小路径和for (int j = 1; j < i; ++j) {f[i][j] = Math.min(f[i - 1][j - 1], f[i - 1][j]) + triangle.get(i).get(j);}// 计算每一行的最后一个元素的最小路径和f[i][i] = f[i - 1][i - 1] + triangle.get(i).get(i);}// 对最后一行的路径和进行排序,取最小值作为结果返回int minTotal = f[n - 1][0];for (int i = 1; i < n; ++i) {minTotal = Math.min(minTotal, f[n - 1][i]);}return minTotal;}
}

Java优化代码

class Solution {public int minimumTotal(List<List<Integer>> triangle) {// 获取三角形的行数int n = triangle.size();// 定义一个二维数组 f 用于存储中间状态的计算结果,使用滚动数组进行优化int[][] f = new int[2][n];// 初始化三角形顶部的最小路径和f[0][0] = triangle.get(0).get(0);// 从第二行开始遍历每一行for (int i = 1; i < n; ++i) {int curr = i % 2;int prev = 1 - curr;// 计算每一行的第一个元素的最小路径和f[curr][0] = f[prev][0] + triangle.get(i).get(0);// 计算每一行的其他位置的最小路径和for (int j = 1; j < i; ++j) {f[curr][j] = Math.min(f[prev][j - 1], f[prev][j]) + triangle.get(i).get(j);}// 计算每一行的最后一个元素的最小路径和f[curr][i] = f[prev][i - 1] + triangle.get(i).get(i);}// 对最后一行的路径和进行排序,取最小值作为结果返回int minTotal = f[(n - 1) % 2][0];for (int i = 1; i < n; ++i) {minTotal = Math.min(minTotal, f[(n - 1) % 2][i]);}return minTotal;}
}

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

http://www.dtcms.com/wzjs/800669.html

相关文章:

  • 网站恶意注册app 与网站
  • 设计做兼职的网站求推荐各地人社app大全官网
  • 网站 改版个人开发网站
  • 网站建设投资东网站建设
  • 开发 网站 费用杭州建站网站建设
  • 搭建wap网站网络营销的5种营销方式
  • 南昌 网站 公司网页备用页
  • 网站安全建设模板简述建设一个商务网站的过程
  • 做问卷兼职有哪些网站苏州互联网公司工资
  • 傻瓜建站湖北雨水最新消息
  • 邯郸如何做企业网站安阳工学院图书馆找做网站的书在哪
  • 邵阳做网站价格软件项目管理工作内容
  • dedecms做的网站如何上线深圳市seo上词贵不贵
  • 个人网站可以做咨询吗公司做网站要企业认证
  • 网站开发最新流程wordpress自己制作主题
  • 青岛网站快速排名优化城建网官网
  • 群晖做网站服务器速度快吗wordpress添加上下文
  • 关于企业微网站建设方案wordpress搭建漫画站
  • 网站备案背景幕布下载太湖县住房与建设局网站
  • app网站公司创意江苏网站建设
  • 正规的招聘网站网站中查看熊掌号怎么做的
  • 宁波做网站哪家好wordpress启用GZIP压缩
  • 怎么做网页版手机版网站电商网站界面设计流程
  • 企业设计网站公司排行榜佛山网站建设专家评价
  • 广东省住房城乡建设厅官方网站wordpress 4.0 中文
  • 网站营销策略组合成都做网站设计哪家最权威
  • 电子商务网站定制定制网站开发是什么
  • 河北省建设厅管网站cms页面
  • 视频网站 外链郑州设计网站公司
  • 晋城住房保障和城乡建设管网站淄博那里有做网站的