剑指offer2--二维数组中的查找(数组使用)

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

思路:

因为是从左到右,从上到下都是按照顺序的,所以先从右上角开始找。

(1)从第一行开始,右上角最后一个,如果当前数比要找的数大,则向左移动。

(2)如果当前的数,比要找的数小,则向下移动。

#include <iostream.h>

bool find(int * matrix,int rows,int columns,int number)
{
	int row=0;
	bool found = false;
	int column = columns -1;
    while(row<rows && column>=0)
	{
	   if (matrix[row*columns+column] == number)
       {
	      found = true;
		  break;
	   }
	   else if(matrix[row*columns+column] > number)
	   {
	      --column;
	   }
	   else
	   {
	      row++;
	   }
	}

	return found;
}

void main()
{
	int m[4][4]={1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
	bool a = find(m[0],4,4,5);
    cout << a;

}
时间: 2024-10-18 15:09:46

剑指offer2--二维数组中的查找(数组使用)的相关文章

剑指offer—二维数组中找数

题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组中右上角的数字.如果=要找的数字,结束.如果大于要找的数字,剔除这个数字所在的列:如果小于要找的数字,剔除这个数字所在的行. #include <iostream> using namespace std; void find(int a[][4],int rows,int columns,int

剑指Offer_4_二维数组中的查找

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 例 :     1   2    8     9 2   4    9    12 4   7   10   13 6   8   11   15 在这个数组中查找数字 9 ,  则返回true . 查找数子5 ,则返回false . 分析 : 因为二位数组每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺

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

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

剑指offer——二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. # -*- coding:utf-8 -*- class Solution: # array 二维列表 def Find(self, target, array): # write code here row=0 col=len(array[0])-1 while(row<len(array)

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

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:从左下角开始寻找,如果小于target,就往右找,如果大于target就往上找. function Find(target, array) { var r = array.length; var c = array[0].length; var i = r-1; var j = 0; whil

C#版剑指Offer-001二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.例如:下面的二维数组就是每行.每列都递增排序.如果在这个数组中查找数字7,则返回true:如果查找数字5,由于数组不含有该数字,则返回false. 解题思路 看到该题目想到的最简单暴力做的做法就是直接遍历数组查找.但是实际上一般都要用效率更高的做法,该题目有两个重要条件,从左到右递增,从上到下递增

剑指Offer1:二维数组中的查找

一:题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.二:解题思路:target值为要找的数<第1种>暴力搜索,两重for循环遍历.时间复杂度O(n^2)<第2种>从数组最右上或最左下开始.时间复杂度O(n)如图:右上: 如果target值小于当前数组的值,则只用将数组列减一:如果target值大于当前数组的值,则只用将数组行加一.左

剑指offer----1.二维数组查找

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路:从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小.于是,target比这个元素小就往上找,比这个元素大就往右找.如果出了边界,则说明二维数组中不存在target元素. 答案: class Solution { public: bool Find(int target, v

剑指offer:二维数组的查找

题目:二维数组的查找 思路: 由于二维数组是从左到右,从上到下是递增的,所以可以从右上角或者左下角开始选择, 比如从右上角开始, 右上角的值都比目标值大的话,而右上角所在列的值都比右上角的值大,则所在列排除. 右上角的值都比目标值小的话,而右上角所在行的值都比右上角的值小,则所在行排除. 以此类推,查找会以行或者列的范围进行缩小.直到得到与目标值相同的值或者没有相同值. 图解: 而右上角所在列的值都比目标值大,则排除所在列. 有 图解: 代码: class Solution { public b

剑指offer(二十七)之数字在排序数组中出现的次数

题目描述 统计一个数字在排序数组中出现的次数 我用了两种方法求解,思路都比较简单直接,看代码都懂了,就不做介绍啦 代码1: <span style="font-size:18px;">public class Solution { public int GetNumberOfK(int [] array , int k) { int num=0; for(int i=0;i<array.length;i++){ if(array[i]==k){ num++; } }