剑指Offer-01.二维数组中的查找

从零到一:Abaqus与Matlab联合仿真的自动化流程构建指南 本文详细介绍了如何构建Abaqus与Matlab联合仿真的自动化流程,涵盖基础架构设计、关键接口技术实现、结果提取与处理技术以及高级参数化优化流程。通过Python脚本作为桥梁,实现数据传递和任务控制,帮助工程师提升仿真效率。特别强调了版本兼容性、异常处理和性能监控等实用技巧。 阅读详情

源自: https://blog.youkuaiyun.com/dawn_after_dark/article/details/80594914

二维数组中的查找

题目描述

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

思路

1. 暴力双层循环解法

2. 曼哈顿问题变形的解法

这时我们可能这样想,可以根据当前位置的数和目标值进行比较,从而决定我们要查找的区域。
假如我们从左上角开始的,如果当前的值小于目标值,那么目标值可能位于该值的右边和下边。这时我们搜索区域其实没有变化,还是跟以前,同时右边和下边的搜索区域还会重叠,造成不必要的判断。
所以我们能不能做到对一个位置进行判断后,就可以将下一次的搜索范围缩小呢?当然能,我们可以利用这个有序的数组的特性,不妨从右上角开始:

  • 如果当前位置的数大于目标值,说明该位置以下的数都大于目标值,所以目标值只可能存在左边,这样我们的搜索范围就可以删除一列。
  • 如果当前位置的数小于目标值,说明该位置以左的数都小于目标值,所以目标值只可能存在于该位置的下边或者右边。又因为右边的区域已是我们考察过得区域(已经删除),所以只能在下边。
  • 重复以上,直到找到目标值为止。或超出数组边界。
    这种思路有种像曼哈顿街区问题的变形,复杂度为O(m + n).
class Solution {
       /**
     * 曼哈顿问题变形的解法
     * 复杂度为O(m + n)
     * @param target
     * @param array
     * @return
     */
    public static boolean Find(int target, int [][] array) {
        //得到数组的行的大小
        int row = array.length;
        //得到数组的列的大小
        int col = array[0].length;
        for(int i = 0, j = col - 1; i < row && j >= 0;) {
            if(target == array[i][j]) {
                return true;
            }
            //小于当前值,则左移
            if(target < array[i][j]) {
                j--;
            } else if(target > array[i][j]) { //大于当前值,则下移
                i++;
            }
        }
        return false;
    }
}

3. 二分查找法

看到排序好的数值的查找问题,首选二分法啊。
我们可以根据每行的最后一个元素进行判断,删除不可能在行,然后从可能存在目标值的行范围开始每行都进行二分查找即可。

public static boolean Find(int target, int [][] array) {
        int row = array.length;
        int col = array[0].length;
        if(row == 0 || col == 0) {
            return false;
        }
        int r = 0;
        /**
         * 先找到目标元素所在的行范围,
         * 因为每一行的最后一个元素是该行的最大值
         * 那么我们只需判断最后一个元素,即快速定位到目标元素所在范围
         */
        for(; r < row && array[r][col - 1] < target; r++);
        //对于每一行的元素用二分法查找是否存在
        for(; r < row; r++) {
            int low = 0;
            int high = col - 1;
            while(low <= high){
                int mid = low + (high - low) / 2;
                if(target == array[r][mid]){
                    return true;
                }else if(target < array[r][mid]){
                    high = mid - 1;
                }else {
                    low = mid + 1;
                }
            }
        }
        return false;
    }
基于cnn version_transformer VIT模型的动物图像分类 完整代码+数据 动物分类教程 阅读详情

相关推荐

Win11下Python脚本不执行?5分钟搞定PATH环境变量配置(VSCode终端实测)

本文针对Win11系统下VSCode终端中Python脚本执行无响应的问题,提供了详细的诊断与解决方案。核心在于正确配置PATH环境变量,通过图形化界面调整Python路径优先级,并分享了VSCode终端环境变量的刷新技巧,帮助开发者在5分钟内快速解决环境配置难题。

weixin_28358083的博客 384

剑指offer-4 二维数组中的查找-思路讲解与代码演示(Java)

题目描述 给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。 例如: Consider the following matrix: [ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26...

a1776868的博客 189

海思Hi3516CV610--SPI NAND Flash移植实战:从手册到驱动的完整适配

本文详细介绍了海思Hi3516CV610芯片上SPI NAND Flash的移植实战,包括从手册解读到驱动适配的完整流程。以GD5F2GM7UEYIGR Flash为例,重点讲解了关键参数确认、模式选择、时序配置以及U-Boot和Linux内核驱动的具体实现步骤,帮助开发者快速完成Flash移植工作。

weixin_29158413的博客 447

二维数组中的查找思路及正确代码

二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数。 剑指offer上给出的答案是从右上角或左下角的数开始排除查找,我正在尝试使用二分查找的方法,代码完成但是还存在些bug。 bug1: error:表达式必须包含指向对象的指针类型; 错误的代码是:(使用二分查找...

一个代码小白的进阶之路 391

高效低功耗设计:PMOS电子开关在墨水屏与ADC采样电路中的创新应用

本文深入探讨了PMOS电子开关在低功耗设计中的创新应用,特别是在墨水屏和ADC采样电路中的关键作用。通过详细分析PMOS的导通机制和近乎零静态功耗特性,展示了其在待机低功耗场景下的显著优势,并提供了实用的电路设计技巧和元器件选型建议,帮助工程师实现极致的功耗优化。

weixin_29193359的博客 162

四足机器人如何用对抗运动先验(AMP)实现复杂地形行走?Unitree Go1实战解析

本文深入解析了四足机器人Unitree Go1如何通过对抗运动先验(AMP)算法实现复杂地形行走。AMP结合模仿学习与对抗训练,使机器人仅凭本体感知就能适应未知地形。文章详细介绍了AMP的核心架构、仿真训练工程实践以及在Unitree Go1上的部署优化方案,展示了其在极端地形下的卓越性能表现。

weixin_29050513的博客 328

多思路解决二维数组中的查找

二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 暴力解法 class Solution { ...

softbreezee的博客 229

【接地系统篇】电力系统接地技术详解:从基本原理到实际应用

接地是为电流返回电源提供的一条低阻抗通道。简单来说,就是为故障电流修建一条"安全回家"的路,防止电流通过人体或其他不应带电的部件。接地系统选择原则安全性优先:TN-S系统安全性最高,适合重要场所经济性考虑:TN-C系统成本最低,适合一般工业连续性要求:IT系统供电连续性最好,适合特殊场所灵活性选择:TN-C-S系统兼顾经济与安全,应用最广。

2301_81299416的博客 2224

二维数组的高效查找

二维数组的查找 剑指offer 04 题目描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 class Solution { public boolean findNumberIn2DArray(int[][] matrix, int target) { if(matrix == null || matrix.length == 0

Aylwang的博客 654

Cleo Synchronization接口任意文件读取漏洞CVE-2024-50623 附POC

微信公众号搜索:南风漏洞复现文库该文章 南风漏洞复现文库 公众号首发Cleo。

nnn2188185的博客 480

【AI智能体】Claude Code +Superpowers 项目实战操作详解

Claude Code +Superpowers 项目实战操作详解

congge 4049

【剑指offer】01——二维数组中的查找

题目描述   在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如: 输入一个二维数组: [ [2,4,7], [3,6,12], [5,10,15] ] 输入一个整数:5,返回 true 输入一个整数:8,返回 false 一、解题思...

Daycym的博客 1031

Python DEAP 库深度解析:从基础架构到高级应用

DEAP 是一个基于 Python 的开源框架,专门用于实现和运行各种进化算法,旨在帮助用户轻松地构建和调整进化算法,用于解决各种优化和搜索问题。本节中,介绍了 DEAP 相较于其它进化计算框架的优势,以及 DEAP 中重要的工具 creator 和 Toolbox。

盼小辉丶的博客 5088

剑指offer_01 二维数组中的查找

今天开始更新一些编程题,首先是《剑指offer》上的名企面试典型编程题: 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 首先题目中的关键语句是“每一行都是按照从左到右递增的顺序排序,每一列都是按照从上到下递增的顺序排序”,这个信息...

Python_programer的博客 458

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

剑指offer-01 二维数组中的查找

个人笔记记录使用 目前只基于一种解法 快速刷完剑指offer 本题使用最简单的暴力遍历数组法 #暴力法遍历数组 def find(tar,array): i = 0 j = 0 k = len(array) l = len(array[0]) for i in range(k): for j in range(l): ...

qq_35912099的博客 227

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

剑指Offer-01-二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 package hhy.offer; /** * 01.二维数组中的查找 * * 从右上角开始往下进行查找,逐步去掉不满足条件的行或者列 * */ public class Test0...

qq_27512741的博客 255

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

剑指offer01——二维数组中的查找

剑指offer01——二维数组中的查找 一、 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二、解题方法 1.暴力遍历法 此处开头无需判断二维数组是否为空 public class Solution { //暴力遍历法 public boolean Find(int target, int [][] array) { i

qq_45657451的博客 161

【剑指offer系列01✨】二维数组中的查找

内容介绍 本系列我将带着大家一起刷剑指offer的题目,欢迎大家一起交流一起讨论⭐️⭐️⭐️,希望能得到大家的????和???????? 题目介绍: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断该数组中是否含有该整数。 思路:当任取数组中的一个数字的时候有三种情况: 当数组中选择的数字刚好等于要寻找的数,则结束寻找 如果选择的数字小于要查找的数,则要查找的数在该数的右边或下面 如果选择的数字大于要

weixin_52134286的博客 1279

01 图解剑指Offer 二维数组中的查找 Java题解

这里写自定义目录标题剑指Offer 01 二维数组中的查找 Java题解 剑指Offer 01 二维数组中的查找 Java题解 public class Solution { public boolean Find(int target, int [][] array) { int row = 0; int col = array[0].length - 1; while(row < array.length &&amp

Vaxue的博客 322

剑指Offer #01 二维数组中的查找(Java描述)

题目来源:牛客网-剑指Offer专题 题目地址:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 题目解析 方法一: 暴力法,遍历二维数组,时间复杂度为 O(n2)O(n^2)O(n2) public class Solut...

Veggie的博客 1万+

剑指Offer01 二维数组中的查找

剑指Offer01: 二维数组中的查找 题意 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路 因为二维数组中的元素从左到右递增,从上到下也递增,所以可以从左下角或者右上角开始搜索,从左下角开始搜索时,若当前元素大于目标元素,则向右走一步,若小于,则往上走一步。 代码 class Solution { public: bool Find(int tar

qq_39109729的博客 119

【剑指Offer】01、二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 题解一:二分查找 1 /** 2 把每一行看成有序递增的数组, 3 利用二分查找,通过遍历每一行得到答案 4 时间复杂度是nlogn 5 ...

princecharming666的博客 100

剑指Offer-01二维数组中的查找

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 分析 1.暴力遍历法(最容易想到) 通过遍历该二维数组中的每一个元素,并与target进行比较,相等返回true,不等返回false; 2.左上查找法 3.右下查找法 代码 public class Solution { public boolean Find(int target, int [

STAR 159

剑指Offer-01——二维数组中的查找

题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 题目来源:牛客网   首先看看什么是二维数组:下面的数组就是一个int[3][5]的数组。 我一看到,就想的是直接遍历比较。(果然还是太菜了啊。)然后又想到昨天面试时,字节跳动的面试官小姐姐说的...

H1517043456的博客 242

JZ01 剑指offer 二维数组中的查找

第1题 二叉搜索树与双向链表 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 class Solution { public: bool Find(int target, vector<vector<int> > array) { if(array.empty()) return false;

KazeHelloWorld的博客 192

【剑指offer】_01 (二维数组中的查找)

题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路 我们从右上角的那个数开始走,如果给定的数比当前数大,说明要找的数在当前列的下面,所以直接让行++,如果给定的数比当前数小,说明在当前数的右边,所以让列- -,一直循环,一直到数组越界条件...

LXY的博客 177
上一篇: Java做题时基本知识汇总(持续更新)
下一篇: 剑指Offer-总目录
happytaohaha
博客等级 码龄9年 37粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值