码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer:二位数组中的查找

时间:2019-03-22 22:41:58      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:准备   数据   ==   复习   数组   ret   else   直接   内容   

  准备找实习期间,复习一下数据相关内容,刷刷题。

题目描述:

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

解题思路:

思路一:由于数组有序,一开始直接想每一行分别用二分来做,结果超时,分析下来这样做的复杂度是O(nlogn)。

思路二:换个角度,同样是二分,但是考虑到右上角的数是当前行的最大值,是当前列的最小值,处于一个中间状态。所以每次选择右上角元素和待查找元素比较,若当前数等于待查找数,则返回true;若当前数大于待查找数,则剔除当前列;否则剔除当前列。分析复杂度O(n)。

代码:

 1 class Solution {
 2 public:
 3     bool Find(int target, vector<vector<int> > array) {
 4         if(array.size()==0)
 5             return false;
 6         int row = 0;
 7         int col = array[row].size()-1;
 8         while(row<array.size() && col>=0)
 9         {
10             if(target == array[row][col])
11                 return true;
12             else if(target > array[row][col])
13                 row++;
14             else
15                 col--;
16         }
17         return false;
18     }
19 };

 

剑指offer:二位数组中的查找

标签:准备   数据   ==   复习   数组   ret   else   直接   内容   

原文地址:https://www.cnblogs.com/LJ-LJ/p/10581366.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!