題目:有乙個二維陣列(楊氏矩陣)陣列的每行從左到右是遞增的,每列從上到下是遞增的。在這樣的陣列中查詢乙個數字是否存在。時間複雜度小於o(n)。
此題的解決思路為:由於陣列的每行從左到右是遞增的,每列從上到下是遞增的,因此右上角的這個數為該數所在這一行最大的數,為該數所在這一列最小的數,我們以陣列右上角的這個數為基準進行比較。若我們要查詢的這個數大於右上角的這個數,而右上角的這個數是這一行中最大的數,所以我們可以去掉一行資料,同理,若我們要查詢的這個數小於右上角的這個數,而右上角的這個數是這一列中最小的數,所以我們可以去掉一列資料。
此時我們定義了乙個函式為find,如果找到我們要查詢的資料我們帶回下標,並返回1,若沒有找到則返回0。這樣在主函式中用ret接收find的返回值即可。
但是這裡需要注意:我們要帶回所查詢資料的下標,這裡我們要用到返回型引數。我們在傳引數時將x和y的位址傳遞給find函式,find函式用指標px和py接收,並使用內部定義的x和y尋找我們要查詢的資料,若找到了,我們令*px=x,*py=y,這樣就很好的將我們所查詢的元素下標帶出。
具體**如下:
#include #include int find(int arr[3][3], int *px, int *py, int k)
} return 0;
}int main()
; int k = 7;
int x = 3;
int y = 3;
int ret = find(arr, &x, &y, k);
if (ret == 1)
else
system("pause");
return 0;
}
C 在楊氏矩陣中查詢乙個數字
什麼是楊氏矩陣?如果矩陣每一行從左到右是遞增的,每一列從上到下也是遞增的,這樣的矩陣就是楊氏矩陣。如下圖所示 題目 有乙個二維陣列.陣列的每行從左到右是遞增的,每列從上到下是遞增的.在這樣的陣列中查詢乙個數字是否存在。思緒 由於楊氏矩陣從左到右 從上到下都是逐漸遞增的,假如找13這個數,我們先從圖的...
C語言 在楊氏矩陣中查詢乙個數
題目 有乙個二維陣列,陣列的每行從左到右是遞增的,每列從上到下是遞增的。在這樣的陣列中查詢乙個數字是否存在?要求 時間複雜度小於o n 例 陣列 1 2 3 4 5 6 7 8 9 解題思路 首先我們肯定不能用常規的依次遍歷來查詢,這樣做時間複雜度不滿足題目要求 那麼我們應該從何處下手呢?首先我們來...
楊氏矩陣中查詢乙個數,如何去做?
我首先把你們當成面試官,來解決這道題。1.如果不知道楊氏矩陣,先和面試官溝通一下,一定要問清楚。楊氏矩陣 有乙個二維陣列.陣列的每行從左到右是遞增的,每列從上到下是遞增的.在這樣的陣列中查詢乙個數字是否存在。時間複雜度小於o n 這是必須考慮到的 2.不著急寫 先把思路屢清楚,陣列 1 2 3 1 ...