zoukankan      html  css  js  c++  java
  • 二维数组中的查找(Python and C++解法)

    题目:

      在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    来源:https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&&tqId=11154&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

    思路:

      需要充分利用数组元素的大小关系。右上角的元素是第一行最大的,同时也是最后一列最小的,从该元素查起。

    1 if(右上角元素 == 目标值)
    2     查找结束
    3 if(右上角元素 > 目标值)
    4     排除右上角元素所在的列
    5 if(右上角元素 < 目标值)
    6     排除右上角元素所在的行

      这样每次查找都会将范围缩小一行或者一列。

    Python解法:

     1 class Solution(object):
     2     def find_target(self, target, array):
     3         i = 0  #
     4         j = len(array[0]) - 1  #
     5         while i <= len(array[0])-1 and j >= 0:  # 当下标还在数组范围内时
     6             array_value = array[i][j]
     7             if array_value == target:
     8                 return True
     9             elif array_value < target:
    10                 i += 1
    11             else:
    12                 j -= 1
    13         return False  # 如果超出数组范围就是没有找到

    C++解法:

     1 class Solution {
     2 public:
     3     bool Find(int target, vector<vector<int> > array) {
     4         int i = 0;
     5         int j = array[0].size() - 1;
     6         while(i <= array[0].size() - 1 && j >= 0) {
     7             int arrayValue = array[i][j];
     8             if(arrayValue == target)
     9                 return true;
    10             else if (arrayValue < target)
    11                 i += 1;
    12             else
    13                 j -= 1;
    14         }
    15         return false;
    16     }
    17 };
  • 相关阅读:
    C#static
    Sql中CHARINDEX用法
    分分钟用上C#中的委托和事件
    为什么使用抽象类?有什么好处?
    【NOIP】普及组2009 细胞分裂
    【VIJOS】P1512 SuperBrother打鼹鼠
    【NOIP】提高组2014
    @NOIP2018
    @NOIP2018
    @NOIP2018
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13169027.html
Copyright © 2011-2022 走看看