劍指offer:二位數組中的查找
阿新 • • 發佈:2019-03-23
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:二位數組中的查找