Leetcode解题报告:74. Search a 2D Matrix

来源:互联网 发布:影视后期 知乎 编辑:程序博客网 时间:2024/06/05 23:03

题目大意:

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

  • Integers in each row are sorted from left to right.
  • The first integer of each row is greater than the last integer of the previous row.

难度:Medium

解题思路: 由于这道题中,第 i+1 行的所有元素比第i行都大, 我们可以把这个二维数组简化为一个有序的一维数组。 在二维数组中,一个元素的行列坐标记为x,y,每行的元素个数记为n,行的数目记为m,那么在一维数组中,该元素对应的下标就是x*n+y,在一维数组中,元素按照大小已经排好序了,那么我们可以采取二分查找的方式寻找目标值。 取中间位置的元素为pivot,如果目标值就是这个元素,就返回true。如果目标值比pivot小,就用同样的方法搜索下标比pivot下标小的区间,如果比pivot大,就搜索下标大于pivot下标的区间,直到搜索到目标值返回true,或者区间的起始下标大于终点下标就可以认为数组中没有目标值。  

    具体操作中,我们可以从起始下标0,终止下标为数组的行数*数组的列数-1作为终点下标开始按照如上的思想递归地进行搜索,中间位置mid=(start+end)/2, 在二维数组中对应的位置为(mid/n,mid%n)其中n是每行的元素个数。

   这种方法的时间复杂度就是二分查找的时间复杂度,O(logn)

class Solution {public:bool helper(vector<vector<int>>& nums,int start,int end,int target){int mid=(start+end)/2;int x=mid/nums[0].size();int y=mid%nums[0].size();if(start>end)return false;if(nums[x][y]==target){return true;}else if(nums[x][y]>target){return helper(nums,start,mid-1,target);}elsereturn helper(nums,mid+1,end,target);}bool searchMatrix(vector<vector<int>>& matrix, int target) {if(matrix.size()==0)return false;    else     returnhelper(matrix,0,matrix[0].size()*matrix.size()-1,target);        }};


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 医师面试题号忘了写怎么办 淘宝买东西东西被别人拿走了怎么办 9个月宝宝上肢支撑不好怎么办 宝宝快十一个月了留口水怎么办 两岁宝宝不会自己登着大小便怎么办 小新家的房子被炸了房贷怎么办 怀孕8个月感冒鼻窦炎头疼怎么办 买的全身镜下面的框子坏了怎么办 单位上司姐姐每天要接我上班怎么办 企业微信公众号中的文章边框怎么办 怎么办我在数学答题卡上画了分割线 游泳的时候泳裙飘起来怎么办 两岁宝宝误服了酵素梅怎么办 人被困在山洞里没有氧气怎么办? 一个人太爱你可你不爱他怎么办 牙齿还没掉又长了新牙齿怎么办 两岁宝宝牙齿发黑烂牙怎么办 怀孕八个月被小孩压到肚子了怎么办 在花场上班客人约我出去玩怎么办 小天才电话手表开不了机怎么办 黑色笔芯弄在白色衣服上怎么办 su文件打开是意外的格式怎么办 su卡的动一下就卡怎么办 犀牛vary渲染的太曝光了怎么办 脑子老是乱想幻想控制不住怎么办 猫抓了破了点皮怎么办 小孩子喜欢玩别人家的玩具怎么办 孩子把别人家的玩具玩坏了怎么办 小新和爸妈一起睡觉那他们怎么办 ps画纸画的时候一直在移动怎么办 宝宝磕碰到家具上鼻梁碰破该怎么办 月经推迟11天了怎么办孕测棒单杠 小孩子不小心把蜡笔吃一点怎么办 线切割切割的工件表面有条纹怎么办 苹果手机不能用流量更新吃鸡怎么办 吃鸡更新成雨林如果内存不够怎么办 绝地求生刺激战场背包满了怎么办 绝地求生刺激战场模拟器满了怎么办 绝地求生刺激战场电脑版满了怎么办 绝地求生手游模拟器注册上限怎么办 绝地求生电脑模拟器已达上限怎么办