序言
剑指offer上的题都非常经典,而且在一些大公司,也会出剑指offer上的原题,所以无论从研究和锻炼自己算法能力的还是提升自己求职竞争力的角度来说,都是非常有帮助的。
题目描述
在一个二维数组中,每一行都是从左到右递增,每一列都是从上到下递增,请完成一个函数,输入这样的二维数组和一个整数,判断数组中是否有该整数。
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
解题思路
首先我们选取数组中的右上角,当数组比整数大的时候,我们删除一行列,如果数组比整数小的时候,我们往下移动一行。这样我们就能找到自己所要找的整数
代码实现
package com.test.kemiki;
public class one {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[][] =new int[][]{{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
System.out.println(find(arr, 3,4,4));
}
/**
*
* @param arr 数组
* @param number 要查找的数字
* @param col 列
* @param row 行
* @return
*/
public static boolean find(int [][] arr,int number,int col,int row){
if(arr!=null && col>0 && row>0){
int rows=0;
int cols=col-1;
while(arr!=null&&rows<row &&cols>0){
if(arr[rows][cols]==number){
return true;
}else if(arr[rows][cols]>number){
--cols;
}else{
++rows;
}
}
}
return false;
}
}
输出结果
最终输出结果true。