1. 程式人生 > >劍指offer:二位數組中的查找

劍指offer:二位數組中的查找

while 比較 false als 位數 return 開始 urn 最大

  準備找實習期間,復習一下數據相關內容,刷刷題。

題目描述:

在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

解題思路:

思路一:由於數組有序,一開始直接想每一行分別用二分來做,結果超時,分析下來這樣做的復雜度是O(nlogn)。

思路二:換個角度,同樣是二分,但是考慮到右上角的數是當前行的最大值,是當前列的最小值,處於一個中間狀態。所以每次選擇右上角元素和待查找元素比較,若當前數等於待查找數,則返回true;若當前數大於待查找數,則剔除當前列;否則剔除當前列。分析復雜度O(n)。

代碼:

 1 class Solution {
 2 public:
 3     bool Find(int target, vector<vector<int> > array) {
 4         if(array.size()==0)
 5             return false;
 6         int row = 0;
 7         int col = array[row].size()-1;
 8         while(row<array.size() && col>=0)
9 { 10 if(target == array[row][col]) 11 return true; 12 else if(target > array[row][col]) 13 row++; 14 else 15 col--; 16 } 17 return false; 18 } 19 };

劍指offer:二位數組中的查找