练习题-二维数组中的查找

《剑指offer》中的一个题目:

在一个二位数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

例如,下面的二位数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含该数字,则返回false。

    int matrix[] = {
        1, 2,  8,  9,
        2, 4,  9, 12,
        4, 7, 10, 13,
        6, 8, 11, 15
    };

代码:

 1 #include <stdio.h>
 2 /*
 3  * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,
 4  * 每一列都按照从上到下递增的顺序排序。请完成一个函数,输入
 5  * 这样一个二维数组和一个整数,判断数组中是否含有该整数。
 6  * rows   : 行数
 7  * comumns: 列数
 8  */
 9 int find_matrix_0(int *matrix, int rows, int columns, int number)
10 {
11     int found = -1;
12
13     // 从右上角开始查找
14     int row = 0;
15     int column = columns - 1;
16
17     while(row < rows && column >= 0)
18     {
19         if(matrix[row * columns + column] == number)
20         {
21             found = row * columns + column;
22             break;
23         }
24         else if(matrix[row * columns + column] > number)
25         {
26             // 如果当前值比查找值大,则当前的一整列都比查找值大,从而跳过当前列
27             column--;
28         }
29         else
30         {
31             // 如果当前值比查找值小,则当前的一整行都比查找值小,从而跳过当前行
32             row++;
33         }
34     }
35
36     return found;
37 }
38
39 int find_matrix_1(int *matrix, int rows, int columns, int number)
40 {
41     int found = -1;
42
43     // 从左下角开始查找
44     int row    = rows - 1;
45     int column = 0;
46     while(row >= 0 && column < columns)
47     {
48         if(matrix[row * columns + column] == number)
49         {
50             found = row * columns + column;
51             break;
52         }
53         else if(matrix[row * columns + column] > number)
54         {
55             // 如果当前值比查找值大,则当前一整行都比查找值大,从而跳过当前行
56             row--;
57         }
58         else
59         {
60             // 如果当前值比查找值小,则当前一整列都比查找值小,从而跳过当前列
61             column++;
62         }
63     }
64
65     return found;
66 }
67
68 int main(void)
69 {
70     int matrix[] = {
71         1, 2,  8,  9,
72         2, 4,  9, 12,
73         4, 7, 10, 13,
74         6, 8, 11, 15
75     };
76     int found;
77
78     found = find_matrix_0(matrix, 4, 4, 7);
79     printf("find_matrix_0 : %d\n", found);
80
81     found = find_matrix_1(matrix, 4, 4, 7);
82     printf("find_matrix_1 : %d\n", found);
83
84     return 0;
85 }
时间: 2024-09-30 10:10:00

练习题-二维数组中的查找的相关文章

二维数组中的查找-牛客网-剑指offer

1.问题描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 2.问题分析 水平方向.垂直方向二重循环查找 3.源代码 package www.nowcoder.com.conquerOffer.array; /** * 二维数组中的查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整

递增二维数组中的查找

/* * 二维数组从左到右,从上到下递增 * 查找输入的数,效率尽可能高 * 思路:从右上角或左下角开始查找 */ import java.util.Scanner; public class findTarget { public static boolean find(int [][]a,int rows,int cols,int target){ boolean found=false; int count=0;//移动次数 if(a!=null){ int row=0; int col=

剑指offer 面试题(二维数组中的查找) (2)

面试题: 二维数组中的查找 /* 题目:   在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成 一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该数. */ ps:(其实前段时间我就做过这道题,今天看到了,觉得还是有点生,那就再来一次吧) 题目分析:  在分析这个问题的时候,我们首先要看,在一个二维数组中查找一个数字是否存在,那么很多人就觉得 简单了,遍历二维数组与所需要查找的数字进行比较不就完了!  不可否认的是你说的是可行的,可是

【剑指Offer面试题】二维数组中的查找

下决心AC所有剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有好处的.加油~ 二维数组中的查找 时间限制:1 秒内存限制:32 兆 特殊判题:否提交:19005解决:3642 题目描述: 在一个

【剑指Offer面试题】九度OJ1384:二维数组中的查找

下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有优点的.加油~ 题目链接地址: http://ac.jobdu.com/problem.php?pid=1384 二维数组中的查找

二维数组中的查找-剑指Offer

二维数组中的查找 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入描述 array: 待查找的二维数组 target:查找的数字 输出描述 查找到返回true,查找不到返回false 思路 因为数组是从左到右从上到下都是递增排序的,所以我们可以从右上角开始查找,如果右上角的数比target大,那它所在的这一列都大,可以舍去,直到找到小的,然后开始从上向下找,若右上

剑指Offer面试题:2.二维数组中的查找

一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 例如下面的二维数组就是每行.每列都递增排序.如果在这个数组中查找数字7,则返回true:如果查找数字5,由于数组不含有该数字,则返回false. 二.解题思路 首先选取数组中右上角的数字.如果该数字等于要查找的数字,查找过程结束:如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查

【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #include <stdio.h> #define col 4 #define rol 4 int yang(int(*p)[col], int num) { int i = 0; int j = col - 1; while (j+1) { int *q = &(p[i][j]); if

【剑指offer】二维数组中的查找

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析: 首先选择数组中右上角的数字.如果该数字等于要查找的数字,查找过程结束:如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行.依次类推,直到查找范围为空. 示例程序: #include <stdio.h> #include <stdlib.h> int