劍指offer(1)二維陣列中的查詢
阿新 • • 發佈:2018-11-27
題目描述
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
解題思路
方法一 最最最簡單的,直接便利全部元素,有相同的就返回true,沒有就返回false
缺點就是太費時間了
程式碼如下
class Solution { public: bool Find(int target, vector<vector<int> > array) { for(int i=0;i<array.size();i++) { for(int j=0;j<(array[0].size());j++) { if(array[i][j]==target) {return true;} } } return false; } };
方法二 既然該陣列說了,每行的最後一個是最大的,每列的最後一個是最大的,那麼可以簡化一部分流程,先使目標數值與每行的最後一個比較,如果要是小的話,就證明本行內沒有相同的資料,如果要是大於等於的話,證明該行記憶體在存在該數值的可能,從這一行開始進行查詢,可以直接從該行進行全部查詢,也可以接下來判斷列,程式碼如下
class Solution { public: bool Find(int target, vector<vector<int> > array) { int a = 0, b = 0; for (int ii = 0; ii<array.size(); ii++) { if (target <= array[ii][array[0].size() - 1]) { a = ii; break; } } for (int iii = 0; iii<array[0].size(); iii++) { if (target <= array[array.size() - 1][iii]) { b = iii; break; } } for (int i = a; i<array.size(); i++) { for (int j = b; j<(array[0].size()); j++) { if (array[i][j] == target) { return true; } } } return false; } };
fxxk!這個程式碼 不知道為什麼顯示您的程式發生段錯誤,可能是陣列越界,堆疊溢位(比如,遞迴呼叫層數太多)等情況引起
百度了一下段錯誤的定義
所謂的段錯誤 就是指訪問的記憶體超出了系統所給這個程式的記憶體空間
大概是超出了程式的記憶體空間大小。這道題要求記憶體空間為32768K