1. 程式人生 > >[劍指offer] 二維數組中的查找

[劍指offer] 二維數組中的查找

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) return
true; 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] 二維數組中的查找