在有序二维数组中查找一个数是否存在
一个二维数组,从上到下依次递增,从左到右依次递增,,给出一个key,在数组中查找是否存在,存在则返回该数字,否则返回-1
package com.tangbaobao.offer;
import org.junit.Test;
/**
* 二维数组的查找
*
* @author 唐学俊
* @create 2018/03/28
**/
public class Test2 {
@Test
/**
* 从右边开始找,每次先缩小行的范围,再缩小列的范围
*/
public void fun1() {
int[][] arr = new int[][]{
{1, 2, 8, 9},
{2, 4, 9, 12},
{4, 7, 10, 13},
{6, 8, 11, 15}};
int num = this.findNum(arr, 5);
System.out.println(num);
}
/**
*查找算法
*/
private int findNum(int arr[][], int key) {
//定义两个指针,指向右上角
int rows = 0;
int columns = arr.length-1;
//1.先用key比较右上角的值
while (rows < arr.length && columns >=0){
//如果找的数小于右上角的数,则key一定不在这一行
if(key < arr[rows][columns]){
columns --;
//如果找的数比这一列数大,则rows++
}else if(key > arr[rows][columns]){
rows ++;
//否则数组中如果存在这个数,就被找到了,不然数组中没有这个数
}else{
return arr[rows][columns];
}
}
return -1;
}
}