leetcode329
public class Solution
{
bool[,] tags;//用于标记是否已经访问过,false未访问,true已访问
int[,] records;//用于标记以当前为起点的最长升序列长度(上下左右四向最长的) private int MaxOfFour(int a, int b, int c, int d)
{
return Math.Max(Math.Max(a, b), Math.Max(c, d));
} private int GetLongestFromPoint(int[,] matrix, int i, int j, int prenum)
{
var row = matrix.GetLength();
var column = matrix.GetLength(); if (i < || i >= row || j < || j >= column)
{
//坐标不合法
return ;
} var curnum = matrix[i, j];//当前坐标
if (prenum >= curnum)
{
return ;
}
else
{
if (tags[i, j])//当前节点已经访问,直接返回结果
{
return records[i, j];
} //当前节点尚未访问过
tags[i, j] = true;//当前节点未访问,将当前节点标记为已经访问 //向上
var maxup = ;
var up_i = i - ;
var up_j = j;
if (up_i >= )
{
maxup = GetLongestFromPoint(matrix, up_i, up_j, curnum);
} //向下
var maxdown = ;
var down_i = i + ;
var down_j = j;
if (down_i < row)
{
maxdown = GetLongestFromPoint(matrix, down_i, down_j, curnum);
} //向左
var maxleft = ;
var left_i = i;
var left_j = j - ;
if (left_j >= )
{
maxleft = GetLongestFromPoint(matrix, left_i, left_j, curnum);
} //向右
var maxright = ;
var right_i = i;
var right_j = j + ;
if (right_j < column)
{
maxright = GetLongestFromPoint(matrix, right_i, right_j, curnum);
} var max = + MaxOfFour(maxup, maxdown, maxleft, maxright);
records[i, j] = max;//标记当前节点的最大升序列长度
return max;
}
} public int LongestIncreasingPath(int[,] matrix)
{
var row = matrix.GetLength();
var column = matrix.GetLength();
if (row == && column == )
{
return ;
}
tags = new bool[row, column];
records = new int[row, column];
for (int i = ; i < row; i++)
{
for (int j = ; j < column; j++)
{
tags[i, j] = false;
records[i, j] = ;
}
}
int maxlen = ;//用于记录全局最长升序列长度 for (int i = ; i < row; i++)
{
for (int j = ; j < column; j++)
{
if (!tags[i, j])//当前节点还没有计算过
{
GetLongestFromPoint(matrix, i, j, matrix[i, j] - );
}
maxlen = Math.Max(maxlen, records[i, j]);//更新全局最大升序列长度
}
} return maxlen;
}
}
leetcode329的更多相关文章
- [Swift]LeetCode329. 矩阵中的最长递增路径 | Longest Increasing Path in a Matrix
Given an integer matrix, find the length of the longest increasing path. From each cell, you can eit ...
随机推荐
- ALGO-152_蓝桥杯_算法训练_8-2求完数
记: 掌握完数的概念 AC代码: #include <stdio.h> int main(void) { int i,j,sum; ; i <= ; i ++) { sum = ; ...
- ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)
问题描述 我们可以把由“”和“”组成的字符串分为三类:全“”串称为B串,全“”串称为I串,既含“”又含“”的串则称为F串. FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种.由一个长 ...
- sql培训
1.select--查询语句 select * from table; select cols from table; select cols from table where condition; ...
- 【ApplicationContext】通过实现ApplicationContextAware接口获取bean
SpringApplicationUtils.java import org.springframework.beans.BeansException; import org.springframew ...
- Qt QListWidget实现图片缩略图列表
转载:v_xchen_v 目标: 将本机中的多张图片以缩略图的形式显示在列表中 环境: 我们已经做好了菜单栏和文件选择对话框.参考:http://blog.csdn.net/v_xchen_v/art ...
- web环境中微信JS-SDK配置
一.公众号相关设置 首先,在公众号中进行JS安全域名的设置,在公众号设置-功能设置中选择JS接口安全域名,点击设置进入设置对话框.按照要求逐步进行,完成设置. 二.页面请求发送与处理 引入所需js: ...
- Hadoop概念学习系列之谈hadoop/spark里为什么都有,YARN呢?(四十一)
在Hadoop集群里,有三种模式: 1.本地模式 2.伪分布模式 3.全分布模式 在Spark集群里,有四种模式: 1.local单机模式 结果xshell可见: ./bin/spark-submit ...
- vue之v-if和v-show
v-if v-if主要用来进行条件渲染. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- 时间同步chrony
时间同步chrony [root@compute02 ~]# yum install chrony 编辑配置文件 将sever区块下的内容修改为时间服务器的地址 .此处可以写局域网内的 ...
- Git revert及其他一些回退操作
放弃本地的代码和本地提交,希望会退到远程分支的某次提交时,使用git reset --hard fa042ce. 本地已提交,但是发现有问题,想要撤销本地的提交,使用git checkout /trs ...