日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[剑指offer]面试题3:二维数组中的查找

發(fā)布時(shí)間:2023/12/4 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [剑指offer]面试题3:二维数组中的查找 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

面試題3:二維數(shù)組中的查找
題目:在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請(qǐng)完成一個(gè)函數(shù),輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù),判斷數(shù)組中是否含有該整數(shù)。

解題思路:
首先選取數(shù)組中右上角的數(shù)字。如果該數(shù)字等于要查找的數(shù)字,查找過(guò)程結(jié)束;如果該數(shù)字大于要查找的數(shù)字,剔除這個(gè)數(shù)字所在的列;如果該數(shù)字小于要查找的數(shù)字,剔除這個(gè)數(shù)字所在的行。

代碼如下:
從矩陣的右上角開始找:

#include <iostream> using namespace std; const int N = 4;int a[4][N] = { {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} };bool Find(int(*p)[N], int rows, int cols, int num) {bool flag = false;if (p != nullptr && rows > 0 && cols > 0){int row = 0;int col = cols - 1;while (row < rows && col >= 0){if ((*(*(p + row) + col))==num){flag = true;break;}else if ((*(*(p + row) + col)) > num) --col;else ++row;}}return flag; }int main() {if (Find(a, 4, 4, 13)) cout << "yes" << endl;else cout << "no" << endl;if (Find(a, 4, 4, 14))cout << "yes" << endl;else cout << "no" << endl;return 0; }

代碼如下:
從矩陣的左下角開始找:

#include <iostream> using namespace std; const int N = 4;int a[4][N] = { {1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15} };bool Find(int(*p)[N], int rows, int cols, int num) {bool flag = false;if (p != nullptr && rows > 0 && cols > 0){int col = 0;int row = rows - 1;while (row >= 0 && col < cols){if ((*(*(p + row) + col)) == num){flag = true;break;}else if ((*(*(p + row) + col)) < num) ++col;else --row;}}return flag; }int main() {if (Find(a, 4, 4, 13)) cout << "yes" << endl;else cout << "no" << endl;if (Find(a, 4, 4, 14))cout << "yes" << endl;else cout << "no" << endl;return 0; }

測(cè)試用例:
● 二維數(shù)組中包含查找的數(shù)字(查找的數(shù)字是數(shù)組中的最大值和最小值,查找的數(shù)字介于數(shù)組中的最大值和最小值之間)。
● 二維數(shù)組中沒有查找的數(shù)字(查找的數(shù)字大于數(shù)組中的最大值,查找的數(shù)字小于數(shù)組中的最小值,查找的數(shù)字在數(shù)組的最大值和最小值之間但數(shù)組中沒有這個(gè)數(shù)字)。
● 特殊輸入測(cè)試(輸入空指針)。
本題考點(diǎn):
● 考查應(yīng)聘者對(duì)二維數(shù)組的理解及編程能力。二維數(shù)組在內(nèi)存中占據(jù)連續(xù)的空間。在內(nèi)存中從上到下存儲(chǔ)各行元素,在同一行中按照從左到右的順序存儲(chǔ)。因此我們可以根據(jù)行號(hào)和列號(hào)計(jì)算出相對(duì)于數(shù)組首地址的偏移量,從而找到對(duì)應(yīng)的元素。
● 考查應(yīng)聘者分析問題的能力。當(dāng)應(yīng)聘者發(fā)現(xiàn)問題比較復(fù)雜時(shí),能不能通過(guò)具體的例子找出其中的規(guī)律,是能否解決這個(gè)問題的關(guān)鍵所在。這個(gè)題目只要從一個(gè)具體的二維數(shù)組的右上角開始分析,就能找到查找的規(guī)律,從而找到解決問題的突破口。

總結(jié)

以上是生活随笔為你收集整理的[剑指offer]面试题3:二维数组中的查找的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。