今天我們來聊一下二維數組的查找問題
題目描述:
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
首先,我們需要在腦海中有一個二維數組的模型,然後在對他進行相關操作。
在題目中,我們可以看出二維數組,每一行、每一列,從左到右,從上到下都是依次底層順序的,要在一個這樣的二維數組中查找某一個數可以借鑑他的這個獨特的優勢來有以下第二種思路。
思路:
1、以第一行從左到右,第二行從左到右依次往下至結束這樣O(N)的遍歷,直至找到結果。
2、可以利用上述優勢來進行,可以先找到第一行的最後一個元素,如果所要找的元素比當前元素大,當前元素的縱列++,如果所要找的元素比當前元素小,當前元素的橫行- -,直至找到該元素返回。
需要注意的點:
1、當拿到一個二維數組時,行和列我們都知道是什麼,但是代碼怎麼表示要清楚,經常有人搞反了。
2、在我們進行++,- -操作時,需要注意二維數組的邊界問題,不能越界。
代碼實例如下:
bool Find(int target, vector<vector<int> > array)
{
int row = array[0].size();
int col = array.size();
int i = 0;
int j = col-1;
while(i < row && j >= 0)
{
if(array[i][j] > target)
j--;
else if(array[i][j] < target)
i++;
else if(array[i][j] == target)
return true;
}
return false;
}
謝謝大家。