DS二分查找_搜索二维矩阵

Description

使用二分查找法来判断m*n矩阵matrix中是否存在目标值target。

该矩阵有以下特性:

  1. 每行中的整数从左到右升序排列;

  2. 每行的第一个整数大于前一行的最后一个整数。

Input

第一行输入m和n,分别表示矩阵的行数和列数,接着输入m*n个整数。

接着,输入查找次数t,接着依次输入t个整数target。

Output

对于每次查找,若target存在于矩阵中,则输出true,否则输出false。

共输出t行。

Sample

#0
Input

Copy

复制代码
3 4
-1 3 5 7
10 11 16 20
23 30 34 60

3
3
13
16
Output

Copy

复制代码
true
false
true

题目要求:

搜索num在二维矩阵中是否存在,可以直接遍历全部元素,但是可以依据题目条件;

该矩阵有以下特性:

  1. 每行中的整数从左到右升序排列;

  2. 每行的第一个整数大于前一行的最后一个整数。

所以我们可以直接遍历每一行的第一个元素,判断是否存在这个元素,还有是否在这一行

思路:

1.num与第一列每个元素比较一下判断在第几行
2.遍历第几行看能不能查找到num

样例:

1.

2.

3.

关键代码:

判断数在第几行

判断哪一行是否存在着个数

全部代码:

cpp 复制代码
#include <iostream>
#include <string.h>
using namespace std;
const int maxn = 1e2 + 10;
int shuzu[maxn][maxn];
int main()
{
    int n, m;
    while (cin >> n >> m)
    {
        memset(shuzu, 0, sizeof(shuzu));
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)///输入矩阵
            {
                cin >> shuzu[i][j];
            }
        }
        int t;
        cin >> t;
        while (t--)
        {
            int num;
            cin >> num;///要查找的数
            int i = 1;
            for (i = 1; i <= n; i++)
            {
                if (num <= shuzu[i][1])///num找到第一个大于他的数他就在那个数的前一行就是i-1行
                {
                    break;
                }
            }
            if (i == 1)///i=1,说明比第一行最小的数都小,那就不存在这个数
            {
                cout << "false" << endl;
                continue;
            }
            int j;
            for (j = 1; j <= m; j++)///遍历i-1行看看有没有与num相等的数
            {
                if (shuzu[i - 1][j] == num)
                {
                    break;///找到就保留退出循环
                }
            }
            ///tips:数组我开的比较大,所以j如果没找到会变成m+1,如果开的刚刚好的人会出现越界状况
            if (shuzu[i - 1][j] == num)///判断是否与num相等,因为也可能没找到。
            {
                cout << "true" << endl;
            }
            else
            {
                cout << "false" << endl;
            }
        }
    }
    return 0;
}

今天就小小水一下吧!

再见再见再见!!!

相关推荐
生态学者4 小时前
Global Change Biology | 森林越“步调一致”,反而越怕干旱?树木生长与叶片活动的同步之谜
大数据·人工智能·算法·r语言·微信公众平台
lsswear5 小时前
Agent 框架新手入门与实战部署指南
大数据·人工智能·算法
学逆向的5 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
可爱系程序猿6 小时前
模型推理任务弹出找不到 cublas64_12.dll,CUDA 12 矩阵计算库按安装包核对
程序人生·线性代数·矩阵·电脑
Data analyse4566 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
Navigator_Z8 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil2088 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展
光影少年8 小时前
AI Agent、自动化与未来工作
人工智能·算法·架构
牧羊人.3339 小时前
计算机视觉基础 第16章|EigenFace,FisherFace,LBPH传统人脸识别算法
人工智能·算法·计算机视觉
jeo陽9 小时前
04-循环实战:素数、最大公约数、级数求和与枚举法
c语言·开发语言·数据结构