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

2021-08-15 15:16:40 字數 1106 閱讀 3850

題目:

有乙個二維陣列,陣列的每行從左到右是遞增的,每列從上到下是遞增的。在這樣的陣列中查詢乙個數字是否存在?

要求:時間複雜度小於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 ...