二维矩阵求极小值

给定一个N行M列的二维矩阵,极小值定义为四连通方向上所有不越界的邻居都大于它的值。通过一维问题的二分法思路,可以将问题扩展到二维,采用分治策略,对矩阵长边进行二分,确定包含极小值的区域,最终找到极小值。关键在于划分区域时确保最小值不会流出。
摘要由CSDN通过智能技术生成

问题描述

给定一个不包含重复元素的N行M列二维矩阵,求矩阵的极小值。极小值的定义如下:若一个值是极小值,四连通方向上的的不越界的邻居都比它大。

思路

二维比较难想,我们从一维说起。
对于一维数组来说,如何寻找极小值?
二分法,找到中间位置x,如果x-1处的元素比x+1处的元素小,那么0~x-1之间必然存在一个极小值,从而缩小了范围。

升到二维,这个问题等价于。在平原上,寻找一个坑。这其实非常简单,我们只需要任选一点,从这个点出发始终朝着低处走,一定能够找到极小值点。

升到二维,首先也要想到分治法,降低复杂度。
对于矩阵较长的那个轴,二分之,切一刀。在刀痕处寻找极小值,极小值所在的那一侧必然是包含极小值的。

总之,这个问题只有一个思路:目前发现的最小值所在的区域一定包含极小值。关键在于划分区域的时候要严格保证最小值不会流出区域。

代码

import java.util.Random;

class Main {
int[][] a;
Random r = new Random();

void generate() {
    int rows = r.nextInt(10) + 5;
    int cols = r.nextInt(10) + 5;
    a = new int[rows][cols];
    int b[] = new in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值