首页 > 其他分享 >【剑指Offer】1、二维数组中的查找

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

时间:2023-06-13 23:55:21浏览次数:51  
标签:数字 Offer int 二维 查找 数组 该列 array

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

题目描述:

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

解题思路:

很明显,由于该二维数组上到下递增,左到右递增的特殊性,遍历整个矩阵进行查找不是该题目的意图所在。总结规律我们可以发现:应该从矩阵的右上角或者左下角开始查找。

以右上角为例,首先选取右上角的数字,如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则说明该列其他元素都大于要查找的数字,便可以删掉该列;如果该数字小于要查找的数字,则说明该行其他元素也都小于要查找的数字,便可以删掉该行。

这样,每一次比较都可以剔除一行或者一列,进而缩小查找范围,时间复杂度为O(n)。

举例:

比如在下面的二维数组中查找数字7,查找过程如下:

编程实现(Java):

public class Solution {
    public boolean Find(int target, int [][] array) {
        /*
        思路:从左下角(或者右上角)开始查找,因为该行右边大于它,上边小于它,每次比较可以删除某一行或者某一列
        注意:左上和右下不可以,因为无法减小问题规模(行和列都无法删除)
        */
        if(array==null)
            return false;
        int row=array.length; //行数
        int col=array[0].length; //列数
        for(int i=row-1,j=0;i>=0&&j<col;){ //从左下角开始查找
            if(array[i][j]==target) //找到
                return true;
            else if(array[i][j]>target) //不可能在该行,跳过该行
                i--;
            else //不可能在该列,跳过该列
                j++;
        }
        return false;
    }
}

标签:数字,Offer,int,二维,查找,数组,该列,array
From: https://www.cnblogs.com/bujidao1128/p/17479020.html

相关文章

  • 数据结构 查找1
    考纲内容1.查找的基本概念查找:从数据集合中查找满足某种条件的数据元素查找结果中要注意,有查找成功和查找失败查找表:用于查找的数据集合,定义有各种相关的操作:查询特定元素、根据条件检索数据、插入和删除。静态/动态查找表:根据查找表中定义的操作种类区分没有定义插入和删......
  • 二维码
        Wewillsupportitsoon!Click2k/4ktodownloadvideosfirst.ProSubscriptionwillautomaticallyreneweverymonthbeforeyouunsubscribe. Monthly $2.99/month1000+embeddedvimeoplayersitessupportedSupportvi......
  • Java基本查找,二分查找,选择排序
    一、基本查找packagecom.itheima.d8_sort_binarysearch;/***基本查找*/importjava.util.Scanner;publicclassTest3{publicstaticvoidmain(String[]args){//1、定义一个数组(基本查找)int[]arr={12,95,1,3,76,4,2,93,56,49,67};......
  • 1817.查找用户活跃分钟数
    问题描述1817.查找用户活跃分钟数(Medium)给你用户在LeetCode的操作日志,和一个整数k。日志用一个二维整数数组logs表示,其中每个logs[i]=[IDᵢ,timeᵢ]表示ID为IDᵢ的用户在timeᵢ分钟时执行了某个操作。多个用户可以同时执行操作,单个用户可以在同一分钟内......
  • 373. 查找和最小的 K 对数字 (Medium)
    问题描述373.查找和最小的K对数字(Medium)给定两个以升序排列的整数数组nums1和nums2,以及一个整数k。定义一对值(u,v),其中第一个元素来自nums1,第二个元素来自nums2。请找到和最小的k个数对(u₁,v₁),(u₂,v₂)...(uₖ,vₖ)。示例1:输入:nums1......
  • 制作巡更点二维码
    制作巡更点二维码添加网页链接添加网页链接一、准备材料材料1.实施提供工地巡更路线图(图片或dwg文件)材料2.odoo后台初始化配置文件.xlsx(国家质量基地为例)二、制作步骤:1.参考材料1标注的点位信息,将点位和路线信息按照下图格式输入材料2中如需新增巡检人岗位信息选择......
  • 如何使用Stable Diffusion生成艺术二维码?
    硬件准备物理内存:至少16G(8G直接安装阶段就卡死)N卡:此处我使用GTX16606G(2019年双12购买)操作系统windows11软件准备网络要通畅git:https://git-scm.com/download/winPython:https://www.python.org/ftp/python/3.10.6/python-3.10.6-amd64.exeCUDA驱动:https://develo......
  • stream(流) 查找方法
    stream(流)查找方法StreamAPI提供了allMatch、anyMatch、noneMatch、findFirst和findAny方法importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importjava.util.Optional;importjava.util.stream.Collectors;importjava.util.stream.Stream;public......
  • 记录一次查找文件中何处使用制表符(tab)
    尝试一直接在编辑器中显示不可见字符,看了半天也没有找到尝试二在vi中打开目标文件使用命令:setlist,制表符显示成^I,换行符显示成$直接输入/\t快速定位到制表符,此时可以输入n继续查找下一个查找结束,再输入setnolist......
  • 经验分享 - 我是如何拿到硅谷顶级科技公司的 10 个 offer ?
    代我太太发文:经过3个月精心准备,我拿到了Google,Facebook,Netflix,linkedin,Snapchat,RokuTV,Amazon,Signal,Wealthfront,ToyotaResearchInstitute一共10个硅谷公司的offer。airbnb结果还没出,uber,dropbox面试体验不好,最后onsite直接withdraw。SoundhoundintuitHR自己说......