我首先把你們當成面試官,來解決這道題。
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 是否等於要找的數,如果大於要找的數,說明要找的數一定在該數的左下方。如果小於要找的數,說明要找的...