題目:
有乙個二維陣列,陣列的每行從左到右是遞增的,每列從上到下是遞增的。在這樣的陣列中查詢乙個數字是否存在?
要求:時間複雜度小於o(n);
例:陣列
1 2 3
4 5 6
7 8 9
解題思路:
首先我們肯定不能用常規的依次遍歷來查詢,這樣做時間複雜度不滿足題目要求;那麼我們應該從何處下手呢?
首先我們來觀察楊氏陣列的特點,就是陣列的每行從左到右是遞增的,每列從上到下是遞增的。也就是說陣列的左上角的元素是最小的,右下角的元素是最大的。
這是我們可以發現右上角的元素arr[i][j]從右往左遞減,從上往下遞增;假如我們從右上角的元素開始與要查詢的元素相比較,如果大於要查詢的元素,就令i - -,如果小於要查詢的元素,就令j++;直到找到要查詢的元素。
程式原始碼:
#include
#include
#include
#define col 3
#define row 3
using
namespace
std;
bool find_yang(int arr[col], int data)
return
false;
}void test(),,,
};int data;
cout
<< "請輸入要查詢的數字:"
<< endl;
cin >> data;
if (find_yang(yang, data))
cout
<< "找到了!"
<< endl;
else
cout
<< "沒有找到哦!"
<< endl;
}int main()
程式執行結果:
【程式執行環境】:vs2013
C 在楊氏矩陣中查詢乙個數字
什麼是楊氏矩陣?如果矩陣每一行從左到右是遞增的,每一列從上到下也是遞增的,這樣的矩陣就是楊氏矩陣。如下圖所示 題目 有乙個二維陣列.陣列的每行從左到右是遞增的,每列從上到下是遞增的.在這樣的陣列中查詢乙個數字是否存在。思緒 由於楊氏矩陣從左到右 從上到下都是逐漸遞增的,假如找13這個數,我們先從圖的...
C語言 在楊氏矩陣中查詢乙個數字是否存在
題目 有乙個二維陣列 楊氏矩陣 陣列的每行從左到右是遞增的,每列從上到下是遞增的。在這樣的陣列中查詢乙個數字是否存在。時間複雜度小於o n 此題的解決思路為 由於陣列的每行從左到右是遞增的,每列從上到下是遞增的,因此右上角的這個數為該數所在這一行最大的數,為該數所在這一列最小的數,我們以陣列右上角的...
楊氏矩陣中查詢乙個數,如何去做?
我首先把你們當成面試官,來解決這道題。1.如果不知道楊氏矩陣,先和面試官溝通一下,一定要問清楚。楊氏矩陣 有乙個二維陣列.陣列的每行從左到右是遞增的,每列從上到下是遞增的.在這樣的陣列中查詢乙個數字是否存在。時間複雜度小於o n 這是必須考慮到的 2.不著急寫 先把思路屢清楚,陣列 1 2 3 1 ...