[劍指offer] 二維數組中的查找
阿新 • • 發佈:2017-11-25
margin for 判斷 == span 跳過 條件 tex 是否
題目描述
在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
主要思路是對於數組的每一行進行二分查找。
優化:若某一行的結尾小於目標值或開頭大於目標值,則此行一定沒有此值直接跳過。
我的代碼:
class Solution { public: bool Find(int target, vector<vector<int> > array) { int len1 = array.size(), len2 = array[0].size(); if (!len1 || !len2) return false; int i = 0, j = len1 - 1; while (i < len1 - 1 && array[i][len2-1] < target) i++; // 註意這裏的邊界條件 while (j > 0 && array[j][0] > target) j--; if (array[i][len2-1] == target || array[j][0] == target) returntrue; for (; i <= j; i++) { int l = 0, r = len2 - 1; int mid = (l + r) / 2; while (l <= r) { mid = (l + r) / 2; if (mid < 0 || mid >= len2) break; if (array[i][mid] == target) return true;if (array[i][mid] > target) r = mid - 1; else l = mid + 1; } } return false; } };
題目描述
在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。[劍指offer] 二維數組中的查找