面试题77:二维数组递减路径

2024-04-06 17:38

本文主要是介绍面试题77:二维数组递减路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给定一个二维数组,从左下方元素开始,找出最长一条递减路径,路径只能往右方和上方移动。

例如:

1 3 2

5 4 6

7 9 8

则最长路径为:7->5->4->3->2


思路:

回溯思想。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;void FindPathCore(int row,int col,vector<vector<int>> num, vector<vector<int>> &re,vector<int>&path)
{int size1 = num.size();int size2 = num[0].size();if (row >= size1 || col >= size2 || row<0 || col<0) return;path.push_back(num[row][col]);if (row == 0 && col == size2 - 1) re.push_back(path);if (col<size2 - 1 && ((row == 0 && num[row][col] > num[row][col + 1]) || (num[row][col] > num[row][col + 1])))FindPathCore(row, col + 1, num, re, path);else if (row>0 && ((col == size2 - 1 && num[row][col] > num[row - 1][col]) || (num[row][col] > num[row - 1][col])))FindPathCore(row - 1, col, num, re, path);else re.push_back(path);path.pop_back();
}int GetLargest(vector<vector<int>> re)
{if (re.size() == 0) return 0;unsigned int max = re[0].size();for (unsigned int i = 1; i < re.size(); i++){if (re[i].size() > max) max = re[i].size();}return max;
}int FindPath(vector<vector<int>> num)
{int size1 = num.size();if (size1 == 0) return 0;int size2 = num[0].size();vector<vector<int>> re;vector<int> path;for (int i = size1-1; i >= 0; i--){for (int j = 0; j < size2; j++){if (i == 0 && j == 0) FindPathCore(i, j, num, re, path);else if (i == 0 && num[i][j] >= num[i][j - 1]) FindPathCore(i, j, num, re, path);else if (j == 0 && num[i][j] >= num[i - 1][j]) FindPathCore(i, j, num, re, path);else if (num[i][j] >= num[i][j - 1] && num[i][j] >= num[i - 1][j]) FindPathCore(i, j, num, re, path);}}return GetLargest(re);
}int main(){int N = 5;vector<vector<int>> num(N, vector<int>(N, 0));for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){num[i][j] = i + j;}}num[2][1] = 1;num[2][2] = 0;num[2][3] = -1;num[2][4] = -2;num[1][4] = -3;for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){cout << num[i][j] << " ";}cout << endl;}cout << FindPath(num) << endl;return 0;
}


这篇关于面试题77:二维数组递减路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/880441

相关文章

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键