矩阵的局部最小元素1.4.19

题目:给定一个含有 N^2 个不同整数的NxN数组a[]。设计一个运行时间和N成正比的算法来找出一个局部最小元素。满足a[i][j] < a[i+1][j]、a[i][j] < a[i-1][j]、a[i][j] < a[i][j-1]、a[i][j] < a[i][j+1]

代码实现

/*------------------------矩阵的局部最小元素--------------------*/

//解题思路
//仿照数据的局部最小元素:每次查找的方向总是小于上一次查找的值(列和行分开看)
//算法设计如下

#include <vector>

using namespace std;

void MatrixPartMinElu(vector<vector<int>> v, int *row, int *col)
{
    //i 和 j是传出的矩阵下标参数
    //行参数
    int Rlo = 0;
    int Rhi = v.size() - 1;
    int Rmid;
    //列参数
    int Clo = 0;
    int Chi = v[0].size() - 1;
    int Cmid;

    while (Rlo <= Rhi && Clo <= Chi)
    {
        Rmid = Rlo + (Rhi - Rlo) / 2;
        Cmid = Clo + (Chi - Clo) / 2;
        //看中间mid大于那个值,每次都向小的继续查找(注意使用二分时一定要有+1/-1,避免死循环)
        if (Rmid != v.size() && v[Rmid][Cmid] > v[Rmid + 1][Cmid])//前面的判断避免行上溢
            Rlo = Rmid + 1;
        else if (Rmid != 0 && v[Rmid][Cmid] > v[Rmid - 1][Cmid])//前面的判断避免行下溢
            Rhi = Rmid - 1;
        else if (Cmid != v[0].size() && v[Rmid][Cmid] > v[Rmid][Cmid + 1])//前面的判断避免列上溢
            Clo = Cmid + 1;
        else if (Cmid != 0 && v[Rmid][Cmid] > v[Rmid][Cmid - 1])//前面的判断避免列下溢
            Chi = Cmid - 1;
        else
        {
            *row = Rmid;
            *col = Cmid;
            return;
        }
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bug.Remove()

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值