1. 程式人生 > >28. 搜索二維矩陣

28. 搜索二維矩陣

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. 搜索二維矩陣