题解 | #三角形最小路径和#

三角形最小路径和

https://www.nowcoder.com/practice/c9d44b73dc7c4dbfa4272224b1f9b42c

首先,我一看,这个题目简单,怎么是中等难度呢?

马上奋笔疾书

思路就是从上到下,能选最小就选最小,只走一次。

int minTrace(int** triangle, int triangleRowLen, int* triangleColLen ) {

// write code here

int j = 0;

int sum = triangle[0][0];

for (int i = 1; i < triangleRowLen; i++) {

if (triangle[i][j] < triangle[i][j + 1]) {

sum = sum + triangle[i][j];

}else {

sum = sum + triangle[i][j+1];

j = j+1;

}

}

return sum;

}

一提交不对劲呀,还有两个例子没有通过。

仔细想想应该是:

[[1],[1000,0],[-10000,0,1]],这种情况。

走一次不行,那就全试一遍吧。

#include <stdio.h>

#include<malloc.h>

int minTrace(int** triangle, int triangleRowLen, int* triangleColLen ) {

printf("%d",triangleRowLen);

// write code here

int** arr2 = (int**)malloc(triangleRowLen * sizeof(int**));

int i, j;

for (i = 0; i < triangleRowLen; i++) {

// 得到行首指针,注意相邻行的内存空间不一定连续

// 但同一行内部元素的内存空间是连续的

arr2[i] = (int*)malloc((i+1) * sizeof(int));

}

// 录入数据

for (i = 0; i < triangleRowLen; i++) {

for (j = 0; j <=i; j++) {

arr2[i][j] = 0; // 快速录入预设数据

}

}

arr2[0][0] = triangle[0][0];

if(triangleRowLen>1){

for ( i = 1; i < triangleRowLen; i++) {

for ( j = 0; j <= i; j++) {

if (j == 0) {

arr2[i][j] = arr2[i - 1][j] + triangle[i][j];

}

if (j > 0 && j < i) {

arr2[i][j] = arr2[i - 1][j - 1] < arr2[i - 1][j] ? arr2[i - 1][j - 1] : arr2[i -

1][j];

arr2[i][j] = arr2[i][j] + triangle[i][j];

}

if (j == i) {

arr2[i][j] = arr2[i - 1][j - 1] + triangle[i][j];

}

}

}

}

int min = arr2[triangleRowLen-1][triangleRowLen-1];

for ( i = 0; i < triangleRowLen; i++) {

if (min > arr2[triangleRowLen-1][i]) {

min = arr2[triangleRowLen-1][i];

}

}

return min;

}

全部评论

相关推荐

01-12 09:24
门头沟学院 Java
点赞 评论 收藏
分享
HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务