zoukankan      html  css  js  c++  java
  • 剑指offer:01二维数组中的查找

    二叉排序树的定义:二叉排序树,又称为二叉查找树。它或者是一颗空树,或者具有下列性质的二叉树。

        若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;

        若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;

        它的左、右子树也分别为二叉排序树。

     这种树模式下的搜索途径可以遍历或预判所有可能性

    “比大小"式的搜索路径一定构成二叉排序树(例:两人猜数,甲心里想一个数,乙去猜,甲对乙的每次猜测告知其大了还是小了,由第一次直到最后一次正确猜测的路径一定是一棵二叉排序树。

    题目描述

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
    例:
    1 2 4 6
    2 3 5 8
    3 5 7 9
    5 9 11 12
    

    解析:所给出的数组去掉这课具有重叠枝叶的大树中某些相邻节点间的路径后一定包含一棵二叉排序树

    所给出的数组从右上角或左下角开始的以左或右路径分别形成更小分支和更大分支,虽然这是一棵不严格的”二叉排序树“,但是这种途径仍然可以遍历或预判所有可能性,而从左上角或右下角开始的左右分支都是更大或更小分支,这种搜索途径不会遍历和预判所有可能性。

    从右上角开始搜索的代码:

     1 class Solution {
     2 public:
     3     bool Find(int target, vector<vector<int> > array) {
     4         int row = array.size(), col = array[0].size();
     5         int i = 0, j = col-1;
     6         while(i<row && j>=0){
     7             if(array[i][j] == target){
     8                 return true;
     9             }
    10             else{
    11                  array[i][j]>target ? --j : ++i;
    12             }
    13         }
    14         return false;
    15     }
    16 };
  • 相关阅读:
    文件下载断点续传插件webupload插件
    cocos2dx 2.x 粒子渲染时有黑色粒BUG
    VOIP NAT穿越之SIP信令穿越
    hdu 5086 Revenge of Segment Tree(BestCoder Round #16)
    [并发]线程池技术小白
    调用 COM 对象
    switch-case 执行顺序
    HDELETE
    python and java
    部分查询练习题及答案
  • 原文地址:https://www.cnblogs.com/CreatorKou/p/8575967.html
Copyright © 2011-2022 走看看