01、二維陣列中的查詢
阿新 • • 發佈:2018-11-25
題目描述:
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
比如給定以下陣列
[
[1, 2, 8, 9],
[2, 4, 9, 12],
[4, 7, 10, 13],
[6, 8, 11, 15]
]
Given target = 9, return true.
Given target = 20, return false.
解題思路:
思路關鍵的地方在於右上角點的選取,因為這個點的值是所在列的最小值和所在行的最大值,這就意味著:
- 要查詢的數值如果比右上角的值大,那麼它將大於整個行;
- 要查詢的數值比如果右上角的值小,那麼它將小於整個列。
如果相等的話,查詢就結束了。
Demo:
bool Find(int target, vector<vector<int> > array)
{
bool output = false;
int rows = array.size();
int cols = array[0].size();
if (rows >= 0 && cols >= 0)
{
int row = 0;
int col = cols - 1;
while (row < rows && col >= 0)
{
if (array[row][col] == target)
{
output = true;
break;
}
// 如果當前值比目標值大,則列減一
else if (target < array[ row][col])
{
col--;
}
// 如果當前值比目標值小,則行加一
else
row++;
}
}
return output;
}