每日一題10 在排序的二維陣列中查詢

2021-06-29 10:03:02 字數 1557 閱讀 6123

排序的二維陣列是這樣的:在每一行中元素是遞增的,在每一列中元素也是遞增的,比如:

11 34 35 47 51

13 37 40 52 61

19 42 50 79 80

給定乙個值,判斷其是否在這樣排序的二維陣列中。

首先,先來生成測試資料,思路如下:1)先選擇一種將給定輸入按公升序排列。2)構造乙個二維陣列,尋找該陣列中以第乙個元素為起點,確定乙個最大的正方形區域(其寬要麼與原陣列的行或與原陣列的列數相同)。3)按規則,在這個正方形中,每個對角線元素都不小於從陣列起點到這個元素所構成的正方形區域所包含的其他元素,所以在填充這個二維陣列時,對從第乙個對角線元素開始後的每乙個對角線元素,先填充與這個對角線同元素行(列)的之前的元素,然後再填充與這個對角線元素同列(行)的之前的元素,最後在填充對角線元素。每個位置的元素只需順序從經過排序的一維陣列中提取。4)如果二維陣列行(列)大於列(行),那麼就將剩下未填充的位置一行(列)一行(列)地填充,每個元素還是一次從排序的一位陣列中提取。

為了方便測試,輸入陣列就是排列好的:

#include "stdafx.h"

#include

using

namespace

std;

int* createtestdata(int row,int col)

return testdata;

}

按上面的思路編寫的**如下:

int* createsorted2darray(int inputarray,int inputcount,int row,int col)

for (int j = 0; j < i; ++j)

res[i*col + i] = inputarray[index++];

}if(squarewidth == row)}}

else}}

return res;

}

顯示二維陣列元素:

void display2darray(int inputarray,int row,int col)

cout

測試函式:

int _tmain(int argc, _tchar* argv)

程式執行截圖:

查詢時,從二維陣列的右上角開始,如果取出的元素v等於待查詢的元素value,那麼查詢成功,返回;如果v

bool iscontained(const

int sorted2darray,const

int row,const

int col,const

intvalue)

else

}return

false;

}

測試函式:

int _tmain(int argc, _tchar* argv)

每日一題 二維陣列中的查詢

題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數輸入描述 array 待查詢的二維陣列 target 查詢的數字 輸出描述 查詢到返回true,查詢不到返回false 思路一 二...

劍指offer 二維陣列查詢 每日一題

在乙個二維陣列中,每一行都按照從左到右遞增的順序排列,每一列都按照從上到下遞增順序排列。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。測試用例 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 查詢7輸出 9,因為9 4 2 1 第三行第二列 根...

每日刷題 二維陣列中的查詢

在乙個 n m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。例 現有矩陣 matrix 如下 1,4,7,11,15 2,5,8,12,19 3,6,9,16,22 10,13,14...