zoukankan      html  css  js  c++  java
  • 《剑指offer

    题目描述

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
     
    开始想到的是从左上角开始搜索,这样搜索可能重复,可以标记去重。
    但是从左下角开始向右上角搜索比较高效。
     
    测试数据集
        //[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
        std::vector<std::vector<int>> array = {{1,2,8,9},
                                               {2,4,9,12},
                                               {4,7,10,13},
                                               {6,8,11,15}};
        
        Solution s;
        cout<<s.Find(15, array);
    

    代码:

    #include <stdlib.h>
    #include <vector>
    
    using namespace std;
    class Solution {
    public:
        bool Find(int target, vector<vector<int>> array) {
            return this->Search2(target, array, (int)(array.size())-1, 0);
        }
        
        bool Search1(int target, vector<vector<int>> array, int x, int y) {
            
            if(x < array.size() && y < array[x].size())
            {
                if(target == array[x][y])
                {
                    return true;
                }
                else if(target > array[x][y])
                {
                    return  (this->Search1(target, array, x, y+1) ||
                             this->Search1(target, array, x+1, y));
                }
            }
            return false;
        }
        
        
        //从左下角往上往右的方向寻找,最简单
        bool Search2(int target, vector<vector<int>> array, int x, int y) {
            
            if(x < array.size() && y < array[x].size())
            {
                if(target == array[x][y])
                {
                    return true;
                }
                else if(target < array[x][y])
                {
                    return this->Search2(target, array, x-1, y);
                }
                else
                {
                    return this->Search2(target, array, x, y+1);
                }
      
            }
            return false;
        }
    };
  • 相关阅读:
    14_java之变量|参数|返回值|修饰符
    NYOJ 202 红黑树 (二叉树)
    NYOJ 138 找球号(二) (哈希)
    NYOJ 136 等式 (哈希)
    NYOJ 133 子序列 (离散化)
    NYOJ 129 树的判定 (并查集)
    NYOJ 117 求逆序数 (树状数组)
    NYOJ 93 汉诺塔 (数学)
    HDU 2050 折线分割平面 (数学)
    天梯赛L2-008 最长对称子串 (字符串处理)
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/9897229.html
Copyright © 2011-2022 走看看