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

2021-08-19 14:12:36 字數 1175 閱讀 5625

我首先把你們當成面試官,來解決這道題。

1.如果不知道楊氏矩陣,先和面試官溝通一下,一定要問清楚。

//楊氏矩陣 

有乙個二維陣列. 

陣列的每行從左到右是遞增的,每列從上到下是遞增的. 

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

時間複雜度小於o(n); 這是必須考慮到的

2.不著急寫**,先把思路屢清楚,

陣列: 

1 2 3             1    2     8     9    

2 3 4             2    4     9      12

3 4 5             4    7     10     13

6     8     11     15

1. 如果你想用兩個for迴圈,時間複雜度為o(n^2);

2.我們可以把它看做一維陣列,如果我們在陣列中取乙個數,分三種情況,第一:如果剛好和要查詢的數字相等時,結束查詢,第二:如果小於這個數,在上部分查詢,第三:如果大於這個數,在下半部分查詢,但你會發現要找的數,在重疊的區域內,這時候變得複雜了,我們解決不了

3.這時候我們就需要找規律,如果從陣列中取的數是右上角或者左下角呢? 每次比較後去掉一列

假設查詢的數字是7,我與陣列的右上角相比較,小於的話,與8比較,然後與2比較,大於它,然後與行比較,直到找到。

**參考如下:

#include#include#includeint found(int *arr,int rows,int cols,int number)

return 0;

} printf("輸入錯誤");

return -1;

}int main()

; scanf("%d",&num);

ret=found(arr[0],4,4,num); //輸入的是第乙個首位址,而不是輸入陣列名(陣列名代表的是第一行的位址)

if(ret == 1)

printf("找到了");

else if(ret == 0)

printf("沒找到");

system("pause");

return 0;

}

我們一定要保證輸入各種異常,程式不會掛掉。

就到這了,希望大家每天都能進步。

C語言 在楊氏矩陣中查詢乙個數

題目 有乙個二維陣列,陣列的每行從左到右是遞增的,每列從上到下是遞增的。在這樣的陣列中查詢乙個數字是否存在?要求 時間複雜度小於o n 例 陣列 1 2 3 4 5 6 7 8 9 解題思路 首先我們肯定不能用常規的依次遍歷來查詢,這樣做時間複雜度不滿足題目要求 那麼我們應該從何處下手呢?首先我們來...

C 在楊氏矩陣中查詢乙個數字

什麼是楊氏矩陣?如果矩陣每一行從左到右是遞增的,每一列從上到下也是遞增的,這樣的矩陣就是楊氏矩陣。如下圖所示 題目 有乙個二維陣列.陣列的每行從左到右是遞增的,每列從上到下是遞增的.在這樣的陣列中查詢乙個數字是否存在。思緒 由於楊氏矩陣從左到右 從上到下都是逐漸遞增的,假如找13這個數,我們先從圖的...

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

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