面试题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

相关文章

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::