在二维数组中查找一个数

在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列也按照从上到下递增的顺序排列。在这样一个序列中查找一个数

1 2 8 9

2 4 9 12

4 7 10 13

6 8 11 15

例如查找7,就从第一行的最左边查找,9大于7,则9以下的也不用再查找,就从8开始,8大于7,8以下的就不用再查找,从2开始查找,2小于7,那么这一行2左边的就不用再查找,就从4开始,4小于7,那么这一行4左边的也不用再查找,从4下面行开始查找,代码如下:

bool Find(int *a, int rows, int cols, int key)

{

int i = 0;

int j = cols;

while (i<rows && j >= 0)

{

if (a[i*cols + j - 1] == key)

{

return  true;

}

else if (a[i*cols + j - 1] > key)

{

j--;

}

else

{

i++;

}

}

return false;

}

int main()

{

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

int ret = Find(a, 4, 4, 18);

if (ret > 0)

{

printf("yes");

}

else

{

printf("no");

}

system("pause");

return 0;

}

时间: 2024-10-12 02:17:51

在二维数组中查找一个数的相关文章

在一个按行列递增的二维数组中查找一个数是否存在

唯一要求:二维数组按行列递增 巧妙的利用二分法的特性,先跟右上角的元素相比,大于行+1,小于列-1,否则返回行列 #include<iostream> using namespace std; #define M 3 void array_bsearch(int array[][M],int value) { int i=0;//行 int j=M-1;//列 while(i<sizeof(array)/M) while(j>=0) { if(value > array[i]

在二维数组中查找一个数,二维数组是从左到右,从上到下依次递增

public class FindNum { public static boolean findANum(int[][] array, int target) { int row = array.length;//行数 int cloumn = array[0].length;//列数 int i = 0; int j = cloumn - 1; boolean found = false; while(i <= row-1 && j >= 0) { if(target &l

数组问题 1.行列有序二维数组中查找2.在一组数成对出现的数中有两个数只出现一次3.在移位数组中查找一个数

一.在一个二维数组中,每一行都按从左到右递增的顺序排序,每一列都按从上到下的递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 首先选取数组中右上角的数字.如果该数字等于要查找的的数字,查找过程结束:如果该数字大于要查找的数字,剔除这个数字所在的列:如果该数字小于要查找的数字,剔除这个数字所在的行.也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围剔除一行或一列,这样每一步都可以缩小查找的范围. 实现过程如下: 运行结果如下:

在一个每一行从左到右递增每一列从上到下递增的二维数组中查找一个整数是否存在——3

给定一个二维数组,数组的特点是:每一行从左到右数据大小依次递增,每一列数据从上到下依次递增,要求判断一个整数是否在这个二维数组中: 设计二维数组如下: 首先,毋庸置疑的的是,遍历一遍数组肯定能判断出来,这也是最笨的方法了,因此,要想提高程序的运行效率就得找出一种高效的方法来查找: 一开始的想法大概都能想到从数组第一行第一列的数开始沿着对角线判断,如果是对角线数据就可以直接返回,比如我们要想查找17这个数,这时候17比0.9.16都要大,因此以0.9.16为对角线的矩形数据就可以排除了,接下来判断

面试题1: 二维数组中查找

本题出自<剑指offer 名企面试官精讲典型编程题>面试题3. 题目3:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下递增的顺序排序.请完成一个函数,输入一个这样的二维数组和整数,判断数组中是否含有该整数. 例如下面的二维数组就是每行每列递增排序.如果在数组中查询7,则返回true:如果查找数字14,由于数组中不包含14,则返回false. 解决方法分析: 首先我们选取二维数组左下角的数字8,由于8大于7,并且8还是第四行的第一个数,因此数字7不可能出现在8所在的行,

面试题03_二维数组中查找_剑指offer系列

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解题思路: 这是一道考查二维数组的理解和编程能力的题. 在二维数组在内存中是连续存储的.在内存中从上到下存储各行元素,在同一行中按照从左到右存储. 因此可以按照行号和列号来计算出相对数组首部的位置. 由于每一行 和 每一列都是有序的,因此,我们可以拿要查找的数与数组的右上角的数进行比较. 因为每一行从左到右递增,每一列

每日一题10:在排序的二维数组中查找

排序的二维数组是这样的:在每一行中元素是递增的,在每一列中元素也是递增的,比如: 11 34 35 47 51 13 37 40 52 61 19 42 50 79 80 给定一个值,判断其是否在这样排序的二维数组中. 首先,先来生成测试数据,思路如下:1)先选择一种将给定输入按升序排列.2)构造一个二维数组,寻找该数组中以第一个元素为起点,确定一个最大的正方形区域(其宽要么与原数组的行或与原数组的列数相同).3)按规则,在这个正方形中,每个对角线元素都不小于从数组起点到这个元素所构成的正方形区

二维数组中查找指定的数

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析:首先选取数组中右上角的数字.如果该数字等于要查找的数字,查找过程结束.如果该数字大于要查找的数字,就剔除这个数字所在的列.如果该数字小于要查找的数字,就剔除这个数字所在的行. 这样通过每次每次删除行或者列,来缩小查找范围. 代码: public class Solution { public boolean Fi

剑指offer-3.二维数组中查找

0 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列按照从上到下递增顺序排序 请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有这个整数. 1 分析 凡是数组有序的首先要想到的是二分查找. 这个二维数组的特点在于,数组中某个点,在该点,右.下方的数都比该数大.左.上的都比该数小. 但是同时判断两个相同维度,比较麻烦. 因此先判断两个不同的维度.也就是说,判断某个点右面和下面,或是左面和上面.那么其中一个方向是大的,另一个方向是小的. 以判断右面和下面为例: 去左