多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php框架 > 框架設(shè)計(jì) > leetcode || 74、Search a 2D Matrix

leetcode || 74、Search a 2D Matrix

來源:程序員人生   發(fā)布時(shí)間:2015-04-28 08:38:17 閱讀次數(shù):3272次

problem:

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.

For example,

Consider the following matrix:

[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]

Given target = 3, return true.

Hide Tags
 Array Binary Search
題意:給定1個(gè)矩陣:每行遞增,每列遞增,查找target是不是在該矩陣中

thinking:

經(jīng)典2分法的時(shí)間復(fù)雜度為 log(m)+log(n)=log(m*n)

(1)2分法查找鎖定target在矩陣的哪1行

(2)2分法查找target是不是在鎖定的那1行

code:

2分法:時(shí)間復(fù)雜度為log(m)+log(n)=log(m*n)

class Solution { public: bool searchMatrix(vector<vector<int> > &matrix, int target) { int m=matrix.size(); int n=matrix[0].size(); int index=binary_search_1(matrix,target,0,m⑴); if(index<0 || index>=m) return false; return binary_search_2(matrix[index],target,0,n⑴); } protected: int binary_search_1(vector<vector<int> > &matrix, int target, int start, int end) //鎖定target所在行 { if(start>=end) return start; int mid=(start+end)/2; if(target>=matrix[mid][0]&&target<matrix[mid+1][0]) return mid; else if(target<matrix[mid][0]) return binary_search_1(matrix,target,start,mid⑴); else return binary_search_1(matrix,target,mid+1,end); } bool binary_search_2(vector<int> &a, int target, int start, int end) //在鎖定行中查找target { if(start>=end) return a[start]==target; int mid=(start+end)/2; if(a[mid]==target) return true; else if(a[mid]<target) return binary_search_2(a,target,mid+1,end); else return binary_search_2(a,target,start,mid⑴); } };

還有1個(gè)不錯的算法,時(shí)間復(fù)雜度為O(m+n):

class Solution { public: bool searchMatrix(vector<vector<int> > &matrix, int target) { int i = 0, j = matrix[0].size() - 1; while (i < matrix.size() && j >= 0) { if (target == matrix[i][j]) return true; else if (target < matrix[i][j]) j--; else i++; } return false; } };


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 猫咪www免费人成网站 | h视频在线播放 | 男女xx00xx的视频免费观看 | 欧美videos粗暴 | 亚洲无限乱码一二三四区 | 欧美亚洲一区二区三区 | 视频一区二区三区自拍 | 国产精品免费福利 | 一二三四视频免费观看在线看1 | 午夜dj在线观看免费视频www | 琪琪在线影院 | 日韩在线观看一区 | 91精品91| 黄色免费观看网址 | 国产成人精品免费大全 | 欧美高清在线视频在线99精品 | 精品麻豆 | 日本高清免费视频www | 婷婷在线五月 | 日本一区二区三区免费看 | 1区2区| 亚欧毛片 | 亚洲www网站 | 亚洲欧美色综合一区二区在线 | 日本黄色大片 | 国产久视频观看 | 日韩欧美精品综合久久 | 日韩欧美精品在线 | h在线观看免费 | 福利视频一二三在线视频免费观看 | japanese日本护士xxxx18一19 | 国产三级日产三级 | 欧美free hd xxxx movies| 国产成人永久免费视 | www.日韩精品 | 国外一级毛片 | 日韩欧美亚洲 | 久久www免费人成高清 | 成人私拍福利视频在线 | 国产福利第一页 | freexx性video18印度|