国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Leetcode 120. Triangle

2019-11-14 11:09:46
字體:
來源:轉載
供稿:網友

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

For example, given the following triangle

[ [2], [3,4], [6,5,7], [4,1,8,3]]

The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

Note: Bonus point if you are able to do this using only O(n) extra space, where n is the total number of rows in the triangle.

s思路: 1. 最小路徑和,從上往下,下面的數的坐標只能是上一個數的坐標或坐標加1。枚舉所有路徑,然后找出最小值? 2. 枚舉代碼功能正確,但是TLE?那必須是大量重復計算所致。分析如下: 這里寫圖片描述 如上圖,2到5的路徑有多條,也就是說從5開始往下遍歷需要遍歷多次,這就重復計算了!完全可以從上往下計算到每個位置的最小和,然后不斷迭代進行,也就是在每個位置計算最小和保存起來。這就是DP的思路! 3. 以后做recursive的題,先看看是否會有重復計算,如有,則用DP!!

//方法1:recursive的枚舉所有路徑。TLE?class Solution {public: void helper(vector<vector<int>>& triangle,int level,int pos,int&path,int cur){ if(level==triangle.size()){ path=path<cur?path:cur; return; } helper(triangle,level+1,pos,path,cur+triangle[level][pos]); if(pos+1<triangle[level].size()) helper(triangle,level+1,pos+1,path,cur+triangle[level][pos+1]); } int minimumTotal(vector<vector<int>>& triangle) { // int path=INT_MAX; helper(triangle,0,0,path,0); return path; }};//方法2:dpclass Solution {public: int minimumTotal(vector<vector<int>>& triangle) { // int n=triangle.size(); int path=INT_MAX; for(int i=1;i<n;i++){ triangle[i][0]+=triangle[i-1][0]; triangle[i][i]+=triangle[i-1][i-1]; for(int j=1;j<i;j++){ triangle[i][j]+=min(triangle[i-1][j],triangle[i-1][j-1]); } } for(int i=0;i<n;i++){ path=min(path,triangle[n-1][i]); } return path; }};
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 二连浩特市| 应用必备| 嵊泗县| 法库县| 合江县| 贞丰县| 漳平市| 葵青区| 合肥市| 龙陵县| 泸西县| 汉中市| 攀枝花市| 汉源县| 呼图壁县| 奉新县| 库车县| 灌阳县| 仙游县| 什邡市| 乐山市| 长岭县| 普兰县| 金华市| 霍邱县| 登封市| 安国市| 天津市| 屏南县| 洮南市| 当雄县| 那曲县| 综艺| 普兰县| 应城市| 达州市| 图们市| 咸丰县| 乐都县| 靖江市| 英超|