【劍指offer較難部分1】二維陣列中的查詢(java)
阿新 • • 發佈:2021-01-12
題目描述
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
分析
方法一:暴力破解
public class Solution {
public boolean Find(int target, int [][] array) {
//1、暴力破解
boolean flag = false;
for(int i = 0 ; i < array. length ; i++){
for(int j = 0 ; j < array[i].length ; j++){
if(array[i][j] == target){
flag = true;
}
}
}
return flag;
}
}
方法二:二分查詢
由於題中說明陣列橫縱都是有序的,那麼在有序這個條件下進行查詢,可以想到二分查詢。
思路:遍歷每一行子陣列,用二分查詢,判斷是在左半部分還是在右半部分。
public class Solution {
public boolean Find(int target, int [][] array) {
boolean flag = false;
for(int i = 0 ; i < array.length ; i++){
int low = 0;
int high = array[i].length-1;
while(low <= high){
int mid = (low + high)/2 ;
if(target > array[i][mid])
low = mid+1; //左半部分
else if(target < array[i][mid])
high = mid-1; //右半部分
else{
flag = true;
break;
}
}
}
return flag;
}
}