首页 > 编程语言 > 详细

剑指offer JZ1 二维数组的查找

时间:2020-10-14 00:22:15      阅读:58      评论:0      收藏:0      [点我收藏+]

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 
解题思路(1):遍历二维数组的每一行,一行中使用二分法查找是否存在target。
* 方法来自牛客网-楚云天
 
C++
 1 class Solution {
 2 public:
 3     bool Find(int target, vector<vector<int> > array) {
 4         bool findTarget = 0;
 5         
 6         for(int i=0; i<array.size(); i++){
 7             int low = 0;
 8             int len = array[i].size();
 9             int high = len - 1;
10             
11             while(low <= high){
12                 int mid = low + ((high - low)>>1);
13                 if( target == array[i][mid]){
14                     findTarget = 1;
15                 }else if(target > array[i][mid]){
16                     low = mid + 1;
17                 }else{
18                     high = mid - 1;
19                 }
20                 if(findTarget) break;
21             }
22             if(findTarget) break;
23         }
24         
25         return findTarget;
26     }
27 };

*二分法使用的注意:

1. 循环条件为 low <= high,low < high 是错误的

2. 计算mid,使用 mid = (low + high) / 2 可能会溢出,此时采用 mid = low + ( high - low ) / 2; 同时,计算机位运算快于除法,采用 mid = low + (high - low)>>1

3. 选择上下边界时不能使用 low = mid 或 high = mid ; 应该使用 low  = mid + 1 或 high = mid -1

 

*****2020/10/13 目前才开始刷题,其他方法后续学的差不多了再补****

 

剑指offer JZ1 二维数组的查找

原文:https://www.cnblogs.com/SAzSkjEydrD2B9yu/p/13812447.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!