在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
这个问题有一个很巧妙的方法就是不要从左下角或者右上角开始,而是要从左上角或者右下角开始。这是因为当他从左上角或者右下角开始的话,大于的话选择一个方向,小于的话,选择另一个方向,相当于剪枝。
1 #include<iostream> 2 using namespace std; 3 class Solution { 4 public: 5 bool Find(int target, vector<vector<int> > array) { 6 if (array.size() == 0) 7 { 8 return false; 9 } 10 int y = array[0].size() - 1; 11 int x = 0; 12 while (y >= 0 && x < array.size()) 13 { 14 if (target == array[x][y]) 15 { 16 return true; 17 } else if (target > array[x][y]) { 18 x++; 19 } else if (target < array[x][y]) { 20 y--; 21 } 22 } 23 return false; 24 } 25 };