28. 搜索二維矩陣
阿新 • • 發佈:2018-01-16
ava lin number ron 時間復雜度 二分查找 [] arr 元素
寫出一個高效的算法來搜索 m × n矩陣中的值。
這個矩陣具有以下特性:
- 每行中的整數從左到右是排序的。
- 每行的第一個數大於上一行的最後一個整數。
易錯點:
1:二維數組怎麽判定為空array.length==0
2:二維數組怎麽取它的列數a[0].length,行數a.length
3:while循環中的兩個條件為什麽是邏輯與
兩種思路
一種是:
把每一行看成有序遞增的數組,
利用二分查找,
通過遍歷每一行得到答案,
時間復雜度是nlogn
public
class
Solution {
public
boolean
Find(
int
[][] array,
int
target) {
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
return
true
;
}
}
return
false
;
}
}
另外一種思路是:
利用二維數組由上到下,由左到右遞增的規律,
那麽選取右上角或者左下角的元素a[row][col]與target進行比較,
當target小於元素a[row][col]時,那麽target必定在元素a所在行的左邊,
即col--;
當target大於元素a[row][col]時,那麽target必定在元素a所在列的下邊,
即row++;
public
class
Solution {
public
boolean
Find(
int
[][] array,
int
target) {
int
row=
0
;
int
col=array[
0
].length-
1
;
while
(row<=array.length-
1
&&col>=
0
){
if
(target==array[row][col])
return
true
;
else
if
(target>array[row][col])
row++;
else
col--;
}
return
false
;
}
}
28. 搜索二維矩陣