題目是:乙個二維矩陣,給乙個數,判斷這個數存不存在於這個矩陣當中,當然,這個矩陣也是乙個有規律的矩陣。即從上往下,從左往後都是遞增的。
最普通的就是從上到下,從左到右乙個乙個的進行判斷尋找。這時,在最壞情況下,就得將整個矩陣輪訓一遍。那麼時間複雜度就為o(n),那麼可不可以減少呢?就要從這個矩陣的特殊地方開始了。
因為這個矩陣是從上到下,從左到右遞增的,那麼我們可以首先將第一行最後一列的元素和要判斷的數進行比較,如果大了,那麼就可以將最後一列刪掉,如果小了就將第一行刪掉 ,以為這個數是第一行最大的,第一列最小的。接下來遞迴呼叫該矩陣。直到找到該數,或者沒有該數存在。看**
#include using namespace std;
bool i***ist(int num,int row,int field,int key)
if (key < num[i*field+j])
if (key > num[i*field+j])
}
return false;
}int main()
; bool result = i***ist((int*)num,3,3,5);//將其轉換為一位陣列,比較靈活一些
if (result)
cout<<"yes"<
在乙個二維陣列中查詢乙個數
在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。int juge int matrix,int xlen,int ylen,int key xlen 表示列的數,ylen表示行數 i...
35 求乙個矩陣中最大的二維矩陣
求1個矩陣中最大的二維矩陣 1。單就這一題來說,首先方法就是遍歷 include using namespace std int a 5 int m 3 int n 5 void max matrix void cout 矩陣是 1 1 s 1 s 1 int main void 還有1種情況,給定...
求乙個二維陣列的最大子矩陣
演算法描述 本題可以使用窮舉法,但是那樣不容易實現以及效率不高,我們的想法是,將二維陣列變成一維陣列,再將此 一維陣列 按照上次的做法既可求出最大子陣列,怎麼樣將二維變成一維呢 例如我們做的是四行四列的陣列,將每一行用乙個sum來表示,則有sum 1 sum 2 sum 3 sum 4 sum 1 ...