C++二分法求解

二维数组中的查找

http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

    本题目的是判断给定数据是否存在于已知二维数组中。则可直接使用暴力法,遍历二维数组求解。但由于此方法时间复杂度高达O(n^(2)),即可能会导致运行超时。故而,需另辟蹊径。
    显然,当target的值大于右上角元素时,其一定不会位于第一行,故可排除,行数i增加1;则再次与此时右上角数据(第二行)比较,若小于该元素,则可将最后一列排除,列数j减少1,再次与右上角元素比较......
    则可发现,依上述方法,每次都是与当前位于右上角的元素进行比较,故而可形成程序中所示的循环。(与右上角元素比较,是因为其大小位于整个二维数组的中间几个位置,与它比较,可以将整个二维数据划分为两部分,并基本可确定target位于哪一部分,从而缩小判断范围,以减小时间复杂度。)
class Solution {
public:
    bool Find(int target, vector > array) {
        int m = array.size();
        int n = array[0].size();
        int i = 0, j = n - 1;
        while(i = 0) {
            if (array[i][j] > target) {
                j--;
            }
            else if (array[i][j] < target) 
                i++;
            else 
                return true;
        }
        return false;
    }
};
全部评论

相关推荐

02-24 17:39
门头沟学院 Java
神哥不得了:神哥来啦~专业技能的话建议不要前面空那么多,八股的话建议先把高频top 50的八股多巩固几遍,千万不要看那些假高频八股。项目的话,建议换两个高质量的项目上去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务