1. 程式人生 > 實用技巧 >劍指offer(21):二維陣列中的查詢

劍指offer(21):二維陣列中的查詢

題目描述

在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 兩種思路: 第一種,對每一行使用二分查詢法進行查詢,時間複雜度是O(nlogn) 第二種:從左下角或者右上角開始查詢,例如從右上角開始,往左數字越來越小,往下數字越來越大,那就將target與右上角數字進行比較,如果target大,那麼就往下走,如果target小,那麼就往左走。 C++實現:
class Solution {
public:
    bool Find(int target, vector<vector<int
> > array) { int row = array.size(); if(row == 0) return false; int colnum = array[0].size(); int i = 0; int j = colnum-1; while(i>=0&&i<row&&j>=0&&j<colnum){ if(target == array[i][j])
return true; else if(target > array[i][j]) i++; else j--; } return false; } };