leetcode LCR121.寻找目标值-二维数组

news2024/9/22 17:24:47

目录

  • 问题描述
  • 示例
  • 具体思路
    • 思路一
    • 思路二
  • 代码实现

问题描述

m*n 的二维数组 plants 记录了园林景观的植物排布情况,具有以下特性:

  • 每行中,每棵植物的右侧相邻植物不矮于该植物;
    每列中,每棵植物的下侧相邻植物不矮于该植物。

题目链接:https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/description/

示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
相似题目链接(与leetcode 240题相同): https://leetcode-cn.com/problems/search-a-2d-matrix-ii/

具体思路

  这个题目和杨氏矩阵是一样的。
  杨氏矩阵:有一个二维数组,数组的每行从左到右都是递增的,每列从上到下都是递增的,在这样的数组中查找一个数字是否存在。
例如有一个矩阵为:
1 2 3
4 5 6
7 8 9

思路一

  直接对该二维数组进行遍历,但该种方法的时间复杂度为 O ( N 2 ) O(N^2) O(N2),在此不考虑。

思路二

  我们可以找到行列的交界处,比如[0][2],即数字3这个位置,通过观察,我们可以发现,该数字是所在行中的最大数字,所在列中的最小数字,可以用目标数target和该交界处数字进行比较,如果target大于该数,则表示比这行最大的数还要大,所以一定不在这一行,舍弃该行,向下行进行查找。 如果target小于该数,则表示target比这列最小的数还要小,所以一定不在这一列,舍弃该列,向左边行进行查找。依次类推,找到返回true,找不到返回false
在这里插入图片描述

如果用[2][0]也是可以的,思路则反过来。
在这里插入图片描述

代码实现

class Solution {
public:
    bool findTargetIn2DPlants(vector<vector<int>>& plants, int target) {
		//需要考虑输入为空数组时的判断,如果是空数组的话无法对其进行访问
        if (plants.size() == 0 || plants[0].size() == 0) //plants.size()表示是有几个vector<int>(行),plants[0].size()表示第0个vector里面有多少个元素(列)
        {
            return false;
        }

        int i = 0;   //二维数组的第0行
        int j = plants[0].size() - 1;  //二维数组第0行的最后一个元素下标

        while (i < plants.size() && j >= 0)
        {
            if (target < plants[i][j])  //目标值比第0行最后一个元素小就往左边进行查找
            {
                j--;
            }
            else if (target > plants[i][j]) //目标值比第0行最后一个元素大就往下查找
            {
                i++;
            }
            else
            {
                return true;
            }
        }
        return false;
    }
};
class Solution {
public:
    bool findTargetIn2DPlants(vector<vector<int>>& plants, int target) {
        int i = plants.size() - 1, j = 0;   //最后一行的第1个元素
        while (i >= 0 && j < plants[0].size())
        {
            if (plants[i][j] > target) i--;
            else if (plants[i][j] < target) j++;
            else return true;
        }
        return false;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1543346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

刷题DAY27 | LeetCode 39-组合总和 40-组合总和II 131-分割回文串

39 组合总和&#xff08;medium&#xff09; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates…

电脑中msvcp140_codecvt_ids.dll丢失的解决方法,实测有效的方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是缺少某个DLL文件。而msvcp140CODECVTIDS.dll就是其中之一。那么&#xff0c;msvcp140CODECVTIDS.dll是什么&#xff1f;msvcp140CODECVTIDS.dll文件属性又是什么呢&#xff1f;msvcp140C…

抖音小店怎么选品?从六点下手,才能选出爆款产品!

大家好&#xff0c;我是电商糖果 选品是做店的核心&#xff0c;它直接关系到店铺的流量和转化率&#xff0c;也就是店铺的收益。 这也是糖果在以往的文章中反复强调的&#xff0c;选品可以说非常重要了。 关于新手选品不知道从何下手&#xff0c;糖果自己总结了一下选品需要…

C++项目——集群聊天服务器项目(五)网络模块与业务模块

今天来正式书写集群聊天服务器网络模块与部分业务模块的代码 环境搭建C项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置-CSDN博客 Json第三方库 muduo网络库 MySQL数据库 一、工程目录创建 项目通过CMake编译&#xff0c…

C语言例4-2:判断某些字符型变量中存放的是否为大写字母或数字字符。

代码如下&#xff1a; //判断某些字符型变量中存放的是否为大写字母或数字字符。 #include<stdio.h> int main(void) {int x1, x2, x3, x4; //数据定义语句char c1a, c2B, c31, c4!; //数据定义语句x1c1>A&&c1<Z; //表达式判断c1是否…

安卓studio连接手机之后,一两秒之后就自动断开了。问题解决。

太坑了&#xff0c;安卓studio链接手机之后。几秒之后就断开了。我以为是adb的问题&#xff0c;就重新安装了一下adb。并且在环境变量中配置了Path的路径。然而并没有什么用啊。 经过排查原来是数据心虚了。线的接触不良。导致你刚接通的瞬间有相对较强的电流是因为有瞬间高电压…

精酿啤酒:酿造工艺的细节与品质的关联

啤酒的酿造工艺是一个复杂而精细的过程&#xff0c;每一个环节都可能影响的品质和口感。Fendi Club啤酒作为一家注重品质和口感的品牌&#xff0c;在酿造工艺的细节方面有着严格的要求和杰出的技艺。 原料的选择是决定啤酒品质的重要因素之一。Fendi Club啤酒选用上好的大麦、水…

【日常记录】【CSS】css实现汉堡菜单

文章目录 1、介绍2、布局3、鼠标移入变成 X 1、介绍 在移动端或者响应式中&#xff0c;可能会遇到 三个横线 鼠标移动到的时候&#xff0c;会变成 一个 X 符号&#xff0c;这个就是汉堡菜单 2、布局 <style>* {margin: 0;padding: 0;box-sizing: border-box;}body {displ…

ros找不到生成的可执行文件[rosrun] Couldn‘t find executable named hello_world_cpp below

catkin_make之后source ./devel/setup.bash source之后运行节点的时候,ros找不到可执行文件&#xff08;其实tab键补不齐就没找到了&#xff09; 手动查找发现生成的可执行文件在build下不在devel/lib下&#xff0c;所以白source&#xff0c;压根找不到。 查找原因说是因为CMa…

基于 C++ STL 的图书管理系统213行

定制魏&#xff1a;QTWZPW&#xff0c;获取更多源码等 目录 一、实践项目名称 二、实践目的 三、实践要求 四、实践内容 五、代码框架参考 六、代码效果展示 七、完整代码主函数展示 一、实践项目名称 基于 C STL 的图书管理系统 二、实践目的 通过设计和实现一个基于…

NAT---网络地址转换技术

Network Address Translation 1、起源&#xff1a;ip地址不够用 2、作用&#xff1a;让私网地址映射成公网地址&#xff0c;进而访问网络。 3、私网Ip地址的范围&#xff1a; A类&#xff1a;10.0.0.0-10.255.255.255 B类&#xff1a;172.16.0.0-172.31.255.255 C类&…

【八股】Java 线程状态转化

线程一共有六种状态 1. NEW - 新建 public static void main(String[] args) throws ExecutionException, InterruptedException {Thread t new Thread(() -> {System.out.println("running");}, "t1");System.out.println(t.getState()); // 线程创…

【MySQL系列】Public Key Retrieval is not allowed

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

简单学习下MQTT(2)

MQTT 简介 MQTT 是非常简单的协议&#xff0c;最初由 IBM 的两位工程师 Andy Stanford-Clark 以及 Arlen Nipper 在 1999 年为监控输油管道设计的。它被设计的场景就是有限的带宽、轻量级以及很小的耗电量&#xff0c;在那个时候&#xff0c;卫星宽带就是那么小&#xff0c;且…

RPA使用Native Messaging 协议实现浏览器自动化

RPA 即机器人流程自动化&#xff0c;是一种利用软件机器人或人工智能来自动化业务流程中规则性、重复性任务的技术。RPA 技术可以模拟和执行人类在计算机上的交互操作&#xff0c;从而实现自动化处理数据、处理交易、触发通知等任务。帮助企业或个人实现业务流程的自动化和优化…

基于ssm的医院住院管理系统论文

摘 要 随着时代的发展&#xff0c;医疗设备愈来愈完善&#xff0c;医院也变成人们生活中必不可少的场所。如今&#xff0c;已经2021年了&#xff0c;虽然医院的数量和设备愈加完善&#xff0c;但是老龄人口也越来越多。在如此大的人口压力下&#xff0c;医院住院就变成了一个问…

计算机软考初级含金量高吗?

并不是说软考初级就没有含金量&#xff0c;对于想评初级职称的考生来说还是很有用处的。根据 国人部 发[2003]39号&#xff1a;通过考试获得证书的人员&#xff0c;表明其已具备从事相应专业岗位工作的水平和能力&#xff0c;用人单位可根据工作需要从获得证书的人员中择优聘任…

技术复盘:Flash Memory揭秘(1)

目录 1.Flash基本原理概述 1.1 Non-volatile Memory的分类 1.2 Flash编程\擦除原理 2.小结 1.Flash基本原理概述 1.1 Non-volatile Memory的分类 Flash在嵌入式领域是非常重要的角色&#xff0c;主要用于存储数据代码&#xff0c;为代码的执行提供基础保证等。 实际上&a…

marvelous designer打开发现gizmo(变换控制器)只有一个方向上有面控制器,缺另外两个面控制器

出现这种问题&#xff0c;其实是因为选中了屏幕坐标系 在3D界面下空白处点右键&#xff0c;选择gizmo&#xff0c;然后选择屏幕坐标系之外别的选项就能恢复到常规有多个面的控制器。

不能从所选图层建立3d模型--模大狮模型网

在Revit中&#xff0c;从所选图层直接创建3D模型并不是一个常规的操作方式。通常情况下&#xff0c;你需要手动创建文字或者图形&#xff0c;然后将其转换为3D模型。 如果你有一个平面上的文字或图形&#xff0c;想要将其转换为3D模型&#xff0c;你可以使用以下步骤&#xff1…