3,二维数组查找

题意:每行每列递增,判断数组是否有target,数组有*重复*元素。

思路1:二分,从最右上角开始比较,<target,该行排除,>target,该列排除。

public class Solution {

public boolean Find(int target, int [][] array) {

if (array == null || array.length == 0) {

return false;

}

if (array[0] == null || array[0].length == 0) {

return false;

}

int rows = array.length;

int cols = array[0].length;

boolean found = false;

int row = 0;

int col = array[0].length - 1;

while(row < rows && col >= 0){

if (array[row][col] == target){

found = true;

break;

} else if (array[row][col] < target){

row++;

} else {

col--;

}

}

return found;

}

}

测试用例:

1、数组有要找的元素(该元素是最大,最小、介于之间)

2、没有要找的元素(该元素是超出最大,最小、介于之间没有)

3、空指针

时间: 2024-08-22 08:57:30

3,二维数组查找的相关文章

php利用array_search与array_column实现二维数组查找

在看php手册数组函数时,看到了一个高赞的用户回答传送门,利用array_search与array_column实现二维数组查找,不用自己写个循环,减少工作量. <?php $userdb = array( 0 => array( 'uid' => 100, 'name' => 'Sandra Shush', 'url' => 'urlof100' ), 1 => array( 'uid' => 5465, 'name' => 'Stefanie Mcmoh

offer 二维数组查找

二维数组查找: (1)C语言实现方式: 测试用例:int AA[16]={1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15}; bool Find1(int * target, int rows,int colums,int number) //输入的行数和列数 { int row=0, colum=colums-1; //实时变化的 /下标 if (target==NULL||rows<=0||colums<=0)//保持 { return false; } whil

二维数组查找

问题描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 特点:如下图,基本上是一个m*n的矩阵,排列顺序如题目描述的一样 思路:从右上角的数开始查找,对于右上角的数来说,他的左侧的数比自己小,下方的数比自己大,如图:将待查找的数据与右上方的数比较时,如果比9小,查再查找9左边的数,如果比9大,则继续查找9下方的数,依次继续比较,知道找到或者x>=矩阵行数或者y<0,换句话说

二维数组查找元素

简介 数组是一种比较简单的数据结构,它占据一块连续的内存并按照顺序存储数据.在创建时,需要先指定数组的容量大小,然后根据大小分配内存.因此数组的空间效率不是很好,经常会有空闲的区域没有充分利用.由于数组内存是连续的,所以可以用下标访问元素,时间效率比较高. 题目 在一个二维数组中,每一行都是按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排列,完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数 1 2 8  9 2 4 9  12 4 7 10 13 6 8 11

C++二维数组查找题

题目:在一个二维数组中,每一行都按照从左到右递增的顺序,每一列都按照从上到下递增的顺序排序,完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该函数. 如二维数组: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 查找数字7,存在返回true:查找数字5,不存在,返回false: 处理方法: 从最右上角的数字开始,如果查找数小于该数,则查找数一定位于该数左侧,排除该列,继续查找左侧剩下的矩阵: 如果查找数大于该数,则查找数一定位于该数下侧,排除该行,继续查

行列有序的二维数组查找

描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入描述: array: 待查找的二维数组 target:查找的数字 输出描述: 查找到返回true,查找不到返回false 解析 分冶法 这种行和列分别递增的矩阵,有一个专有名词叫做杨氏矩阵,由剑桥大学数学家杨表在1900年推提出,在这个矩阵中的查找,俗称杨氏矩阵查找.以查找数字6为例,因为矩阵的行和列都是递增的,所以整

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

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

二维数组查找——剑指offer

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该整数. 1 #include <stdio.h> 2 #include<stdbool.h> 3 int main() 4 { 5 int find(int matrix[4][4], int rows, int columns, int number); 6 int a[4][4] = {{ 1, 2, 8, 9 },

《剑指Offer》算法题——二维数组查找

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. class Solution { public: bool Find(vector<vector<int> > array, int target) { int col = array.size(); int i = 0; while (i < col) { int j = array[i].size()

剑指offer整理-------二维数组查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 1 public boolean Find(int target, int[][] matrix) { 2 3 int row = 0; 4 int col = matrix[0].length - 1; 5 /*从二维数组的右上角开始寻找,因为每一行的最右侧为最大 6 值,先从每一行找,找不到则换行,此