1. 程式人生 > >01、二維陣列中的查詢

01、二維陣列中的查詢

題目描述:

  在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

比如給定以下陣列
[
  [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; }

參考:https://blog.csdn.net/Regemc/article/details/80311033