题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右的递增的顺序排序,每一列都按照从上到下递增的顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:根据二维数组array[][]的特性,行和列均是递增排序,在查找数组中是否含有这个整数target时,可以按照行和列去查找。
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
则二维数组的行和列分别为:
行数:int row = (int)array.size();
列数:int col = (int)array[0].size();
比较规则:我们选取数组右上角的数去和该整数target比较:
1.如果array[i][j]>target,则寻找更小的数比较,即j--;
2.如果array[i][j]<target,则寻找更大的数,即i++;
【注】:比较前可以判断数组是否为空,查找整数是否在数组中。
1 class Solution{ 2 public: 3 bool Find (int target, vector<vector<int>> array) 4 { 5 int row = (int)array.size(); 6 int col = (int)array[0].size(); 7 if (row == 0|| col == 0) 8 return false; 9 if (target <array[0][0]||target >array[row-1][col-1]) 10 return false; 11 int i=0; 12 int j=col-1; 13 while(i<row && j>=0) 14 { 15 if (array[i][j]>target) 16 { 17 j--; 18 } 19 if (array[i][j]<target) 20 { 21 i++; 22 } 23 else 24 { 25 return 1; 26 } 27 } 28 return 0; 29 } 30 };