二维数组中的查找
package com.cloud.algorithm.demo;
import org.junit.Test;
public class Topic4 {
/**
* 二维数组中的查找
* 在一个二维数组中,每一行都按照从左到右的顺序排序,
* 每一列都按照从上到下递增的顺序排序。请完成一个函数,
* 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*/
@Test
public void topic4_1() {
int[][] arrs = {{1,2,8,9}, {2,4,9,12},{4,7,10,13},{6,8,11,15}};
int i=9;
boolean b = this.demo01(arrs, i);
System.out.println("-----:"+b);
}
private boolean demo01(int[][] arrs,int i) {
//比较最右上角,如果比i大则lenStartIdx-1 如果比i小则hightStartIdx+1
//前提是每个数组一样长,如果不一样长len参数取最长的
if (arrs != null && arrs.length > 0) {
int hight = arrs.length;
int len = arrs[0].length;
int hightInx = hight - 1;//高索引
int lenIdx = len - 1;//长索引
int hightStartIdx = 0;
int lenStartIdx = len - 1;
while (lenStartIdx >= 0 && hightStartIdx <= hightInx) {
if (arrs[hightStartIdx][lenStartIdx] == i) {
return true;
} else if (arrs[hightStartIdx][lenStartIdx] > i) {
lenStartIdx--;
} else {
hightStartIdx++;
}
}
}
return false;
}
}