序言
劍指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。