Search a 2D Matrix II## [更多技术博客 http://vilins.top/](http://vilins.top/)题目Write an efficient algorithm that searches for a value in anmxnmatrix. This matrix has the following properties:Integers in each row are sorted in ascending from left to right.Integers in each column are sorted in ascending from top to bottom.Example:Consider the following matrix:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]Given target 5, returntrue.Given target 20, returnfalse.分析这里不可能用直接搜索的办法去做根据矩阵是有序的根据这个特点首先想到的是二分查找本来实现的算法是对每一行都进行二分查找这样便将一个问题分开为若干个子问题。然后我们发现某些行可以之间去掉因为是有序的当受元素大于target或者末尾元素小于target时我们可以直接跳过。源码class Solution { public: bool searchMatrix(vectorvectorint matrix, int target) { if(matrix.size() 0||(matrix.size() ! 0matrix[0].size() 0)) { return false; } for(int i 0; i matrix.size(); i) { if(matrix[i][matrix[0].size() - 1] target||matrix[i][0] target) { continue; } if(binary_search(matrix[i],target)) { return true; } } return false; } bool binary_search(vectorint m, int target) { int begin 0, end m.size() - 1, middle (begin end)/2; while(begin end) { middle (begin end)/2; if(target m[middle]) { return true; } else if(target m[middle]) { end middle -1; } else { begin middle 1; } } return false; } };## [更多技术博客 http://vilins.top/](http://vilins.top/)