面试题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系统下的绝对路径,以下

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

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、方