利用楊氏矩陣找乙個數是否存在

2021-09-25 23:11:16 字數 1025 閱讀 2502

楊氏矩陣,是對組合表示理論和舒伯特演算很有用的工具。它提供了一種方便的方式來描述對稱和一般線性群的群表示,並研究它們的性質。有乙個二維陣列. 陣列的每行從左到右是遞增的,每列從上到下是遞增的. 在這樣的陣列中查詢乙個數字是否存在。 時間複雜度小於o(n);

思路方法:

(1)了解什麼是楊氏矩陣之後我們就可以將它轉化為乙個二維陣列,陣列的每行從左到右是遞增的,每列從上到下是遞增的.

(2)在這樣的陣列中查詢乙個數字是否存在。

(3)先和矩陣左下角的元素進行比較,如果要查詢的元素num較小,則向右移動和右面的元素進行比較;如果要查詢的元素num較大,則向上移動,和上邊一行的元素進行比較。往復迴圈,最差的情況是從左下角一直比到右下角。其時間複雜度為o(m + n)

要注意從右上角出發。如果當前的數等於它,找到,返回true。

如果當前的數< 它, 往下走

如果當前的數 >它,往左走。

最後記得一定要return false

#define _crt_secure_no_warnings

#include#include#define m 5

#define n 6

int find(int arr[m][n], int num)

if (arr[j][k] > num)

}} return 0;

}int main()

,,,, };

int num;

printf("請輸入需要判斷的數:");

在楊氏矩陣中判斷乙個數是否存在

楊氏矩陣是乙個二位陣列,這個陣列無論橫向縱向都是遞增的。比如陣列 1 4 7 2 5 8 3 6 9 要想時間複雜度小於o n 就不能遍歷整個陣列,其實只需判斷這個i行j列的陣列的arr i 1 j 1 是否等於要找的數,如果大於要找的數,說明要找的數一定在該數的左下方。如果小於要找的數,說明要找的...

C語言 在楊氏矩陣中查詢乙個數字是否存在

題目 有乙個二維陣列 楊氏矩陣 陣列的每行從左到右是遞增的,每列從上到下是遞增的。在這樣的陣列中查詢乙個數字是否存在。時間複雜度小於o n 此題的解決思路為 由於陣列的每行從左到右是遞增的,每列從上到下是遞增的,因此右上角的這個數為該數所在這一行最大的數,為該數所在這一列最小的數,我們以陣列右上角的...

楊氏矩陣中查詢乙個數,如何去做?

我首先把你們當成面試官,來解決這道題。1.如果不知道楊氏矩陣,先和面試官溝通一下,一定要問清楚。楊氏矩陣 有乙個二維陣列.陣列的每行從左到右是遞增的,每列從上到下是遞增的.在這樣的陣列中查詢乙個數字是否存在。時間複雜度小於o n 這是必須考慮到的 2.不著急寫 先把思路屢清楚,陣列 1 2 3 1 ...