劍指off:在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣一個二維陣列和一個整數,判斷陣列中是否含有該整數
阿新 • • 發佈:2018-12-11
題目描述
在一個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
思路:
從左下角x開始尋找,x為此列最大數字,此行最小數字。如果目標數小於x,則這一行消除。如果目標數大於x,此列消除。迴圈當找到或者不存在停止
程式碼:
bool Find(int target, vector<vector<int>> array) { int rowcount = array.size();//行數 int colcount = array[0].size();//列數 int i, j; for (i = rowcount - 1, j = 0; i >= 0 && j < colcount;)//從左下角開始遍歷 { if (target == array[i][j]) { return true; } if (target < array[i][j])//目標數比當前數小,從上一行繼續查詢 { --i; continue; } if (target > array[i][j])//目標數比當前數大,從下一列開始查詢 { ++j; continue; } } return false; } };
測試:
int main()
{
vector<vector<int>> array = { {1,2,8,9},{2,5,9,10},{4,7,10,12},{6,8,11,13} };
int i = 7;
Solution s;
if (s.Find(i, array))
{
cout << "true" << endl;
}
else
cout << "false" << endl;
}