【剑指offer】二维数组中判断是否含有一个整数

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右的递增的顺序排序,每一列都按照从上到下递增的顺序排列。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路:根据二维数组array[][]的特性,行和列均是递增排序,在查找数组中是否含有这个整数target时,可以按照行和列去查找。

123
456
789

则二维数组的行和列分别为:

行数: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 };

 

转载于:https://www.cnblogs.com/xdak/p/10920286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值