题目:

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

思路:

最简单:每一行都使用二分法查找一遍。

更省时间:

二维数组从左到右从上到下递增。
从最后一行找到刚好比target大的位置x,则上一行小于x的角标对应的数均小于target,
移到上一行,在角标x到行末重复上一操作,
以此类推,
每上移一行所需要比较的数字越来越少。
在上述过程中若无法找到相等的数字则不存在。
在每一行找与target接近的数字的过程可以使用二分法,复杂度nlog(n)。

C++:

#include <iostream>
#include <vector> using namespace std; class Solution {
public:
bool Find(int target, vector<vector<int>> array) {
int col = array[].size() - ;
int low = , high = col;
int row = array.size()-;
for (int i = row; i >= ; i--) {
while (low <= high) {
int media = (low + high) / ;
if (target < array[i][media]) {
high = media - ;
}
else if (target > array[i][media]) {
low = media + ;
}
else {
return true;
}
}
//low = 0; 若保留则为每一行均使用简单粗暴的二分法
high = col;
}
return false;
}
}; int main()
{
Solution obj;
int target = ;
vector<vector<int>> arr = { {, , , }, {, , , }, {, , , }, {, , , } };
cout << obj.Find(target, arr) << endl;
cin.get();
cin.get();
return ;
}

Python:

# -*- coding:utf-8 -*-
class Solution:
def Find(self, target, array):
row = len(array)-1
col = len(array[0])-1
low = 0
high = col
for i in xrange(row,-1,-1): # 倒序
while low<=high:
media = (low+high)/2
if target<array[i][media]:
high = media-1
elif target>array[i][media]:
low = media+1
else:
return True
#low = 0 若保留则为吗,每一行均使用二分法直接查找
high = col
return False if __name__ == '__main__':
target = 7
array = [[1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15]]
obj = Solution()
print obj.Find(target, array)

上述代码在牛客网测试,用时和空间占用分别为:

C++:9ms,1372k

Python:300ms,5860k

【算法编程 C++ Python】二维数组查找的更多相关文章

  1. python 二维数组读入

    study from : https://www.cnblogs.com/reaptomorrow-flydream/p/9613847.html python 二维数组键盘输入 1 m = int( ...

  2. php利用array_search与array_column实现二维数组查找

    利用array_search与array_column实现二维数组查找,不用自己写个循环,减少工作量. <?php $userdb = array( 0 => array( 'uid' = ...

  3. (2)剑指Offer之二维数组查找和替换空格问题

    一 二维数组查找 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 问 ...

  4. 剑指Offer编程题1——二维数组中的查找

    剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...

  5. 《剑指Offer》算法题——二维数组查找

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. class Solutio ...

  6. 剑指Offer_编程题之二维数组中的查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.

  7. Python二维数组构造

    周末用python要写个算法用到来二维数组, 一时间还不知道python怎么构造多维数组出来.看到一段不错的代码, 记录一下. Python使用list嵌套实现多维数组, PHP可以使用array嵌套 ...

  8. java se系列(四) 函数、数组、排序算法、二分法、二维数组

    1 函数 1.1  数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表 ...

  9. python二维数组切片

    python中list切片的使用非常简洁.但是list不支持二维数组.仔细研究了一下发现,因为list不是像nampy数组那么规范.list非常灵活.所以没办法进行切片操作. 后来想了两个办法来解决: ...

随机推荐

  1. 简述JavaScript模块化编程(一)

    在早期编写JavaScript时,我们只需在<script>标签内写入JavaScript的代码就可以满足我们对页面交互的需要了.但随着时间的推移,时代的发展,原本的那种简单粗暴的编写方式 ...

  2. CSS-锚点笔记

    注意点: position属性 定义建议元素布局所用的定位机制 {position:static/absolute/relative/fixed;} static:默认值,没有定位 absolute: ...

  3. Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  4. Android为TV端助力记录EditText.setInputType的坑

    如XML中设置android:inputType=”numberDecimal”在Java代码中仅设置setInputType(EditorInfo.TYPE_NUMBER_FLAG_DECIMAL) ...

  5. IVS_技术

    视频监控技术按照设备发展过程分为三个阶段:模拟视频监控.数字视频监控.智能视频监控,如下图: 模拟视频监控 第一代视频监控系统也叫做闭路电视监控系统,简称CCTV(Close Circuit Tele ...

  6. QuickStart系列:Docker部署PostgreSQL

    docker镜像地址: https://hub.docker.com/_/postgres/ https://www.widuu.com/chinese_docker/examples/postgre ...

  7. java Excel文件流输出(后台)没有下载提示

    /**方案: *1. *问题源头应该是前端用的是ajax方式请求路径,要想出现下载Excel的弹窗,我个人理解应该是等同于重新打开一个窗口,而ajax默认不动页面直接将值返回,所以没有提升下载. *解 ...

  8. prometheus-redis-exporter监控redis

    chart地址:https://github.com/helm/charts/tree/master/stable/prometheus-redis-exporter 1.下载chart包 $ hel ...

  9. 学习Microsoft Visio(2)

    常用业务设计图示法 一.业务设计基础 1.名词概念 业务流程图:在公司.部门.岗位的层面上描述一个业务流程的宏观过程. 基本流程图:对某个处理过程的详细逻辑流程进行描述. 静态业务对象图(UML表示法 ...

  10. 如何使用 淘宝 NPM 镜像

    淘宝 NPM 镜像 原文链接 http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同 ...