剑指offer题解合集——Week1day3

剑指offerWeek1

周三:二维数组中的查找

题目链接:二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。数据范围
二维数组中元素个数范围 [0,1000]
样例
输入数组:[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]
]如果输入查找数值为7,则返回true,如果输入查找数值为5,则返回false。

AC代码

class Solution {
public:bool searchArray(vector<vector<int>> array, int target) {if (array.empty() || array[0].empty()) return false;int i = 0, j = array[0].size() - 1;while (i < array.size() && j >= 0){int t = array[i][j];if (t == target) return true;if (t > target) j -- ;else i ++ ;}return false;}
};

思路:

整体思路

本题可以借鉴游戏:俄罗斯方块来理解
在俄罗斯方块中:当一行都有方块时,则消除该行
抽象一层,即:满足某个性质,消除一行本题中,题目直接给出性质:每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
那么可以利用性质,给出如下思路
对于目标值x,每次都和第一行的最后一个数值进行判断如果目标值x大于第一行的最后一个数值,则说明,第一行的所有数值都小于目标值x,则消除第一行
若目标值x小于第一行的最后一个数值,则说明,第一列的所有数值都大于目标值x,则消除第一列
如此,不断往复,并且在往复的过程中判断是否是目标值即可

代码思路

  • 特判,数值是否为空
  • 确定行列值
  • while循环,循环条件是二维数组中还存在数值
    • 如果目标值x大于第一行的最后一个数值,则说明,第一行的所有数值都小于目标值x,则消除第一行,i++
    • 若目标值x小于第一行的最后一个数值,则说明,第一列的所有数值都大于目标值x,则消除第一列,j –
    • 如果是目标值,则直接返回true
  • 若循环结束都没有找到,则返回false

部分模拟

[
[1,2,8,9],
[2,4,9,12],
[4,7,10,13],
[6,8,11,15]
]

如果输入查找数值为7

  • 数组存在

  • 从第一行第四列开始,i = 0,j = 3

  • while循环,循环条件是二维数组中还存在数值

    • 第一行第四列数值为9
      • 大于目标值7,则第四列的数值都大于目标值7,第四列直接舍去,j –
      • 此时二维数组为
    [[1,2,8],[2,4,9],[4,7,10],[6,8,11]
    ]
    
    • 第一行第三列数值为8
      • 大于目标值7,则第三列的数值都大于目标值7,第三列直接舍去,j –
      • 此时二维数组为
    [[1,2],[2,4],[4,7],[6,8]
    ]
    
    • 第一行第二列数值为2
      • 小于目标值7,则第一行的数值都小于于目标值7,第一行直接舍去,i++
      • 此时二维数组为
    [[2,4],[4,7],[6,8]
    ]
    
    • 如此往复即可

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

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

相关文章

教务系统一键评教

利用浏览器的开发者模式实现“一键评教”&#xff0c;本教程针对金智教务系统 步骤 1、打开教务系统的评教页面。 2、按下键盘快捷键 F12&#xff0c;或者点击鼠标右键打开浏览器的开发者工具&#xff0c;然后选择控制台&#xff08;Console&#xff09;。 3、复制以下 Java…

大数据机器学习-梯度下降:从技术到实战的全面指南

大数据机器学习-梯度下降&#xff1a;从技术到实战的全面指南 文章目录 大数据机器学习-梯度下降&#xff1a;从技术到实战的全面指南一、简介什么是梯度下降&#xff1f;为什么梯度下降重要&#xff1f; 二、梯度下降的数学原理代价函数&#xff08;Cost Function&#xff09;…

[德人合科技]——设计公司 \ 设计院图纸文件数据 | 资料透明加密防泄密软件

国内众多设计院都在推进信息化建设&#xff0c;特别是在异地办公、应用软件资产规模、三维设计技术推广应用以及协同办公等领域&#xff0c;这些加快了业务的发展&#xff0c;也带来了更多信息安全挑战&#xff0c;尤其是对于以知识成果为重要效益来源的设计院所&#xff0c;防…

vue内容渲染

内容渲染指令用来辅助开发者渲染DOM元素的文本内容。常用的内容渲染指令有3个 1.v-text 缺点&#xff1a;会覆盖元素内部原有的内容 2.{{}}&#xff1a;插值表达式在实际开发中用的最多&#xff0c;只是内容的占位符&#xff0c;不会覆盖内容 3.v-html&#xff1a;可以把带有标…

LeetCode-28. 找到字符串中第一个匹配项的下标

文章目录 KMP 算法基本概念next 数组含义及计算匹配过程 LeetCode-28.找到字符串中第一个匹配项的下标题目描述程序代码 KMP 算法 基本概念 S&#xff1a;文本串P&#xff1a;模式串next 数组&#xff1a;next[i]表示当模式串中第 i 个字符与文本串中某个字符不匹配时&#x…

MySQL表的增删改查(初阶)

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。且增删改查&#xff08;CRUD&#xff0c;create&#xff0c;retrieve&#xff0c;update&#xff0c;delete&#xff09;数据库的核心模块。 1. 新增&#xff08;Create&#xff09; 实…

【数据结构】二叉树的模拟实现

前言:前面我们学习了堆的模拟实现&#xff0c;今天我们来进一步学习二叉树&#xff0c;当然了内容肯定是越来越难的&#xff0c;各位我们一起努力&#xff01; &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &#x1f448; &…

vscode ssh连接不上服务器的各种解决办法

超时 可能是因为服务器太慢&#xff0c;等太久而报错&#xff0c;可以将超时时间设置长一些。步骤如下图&#xff0c;我将超时时间改成了60&#xff08;或者更大&#xff0c;有时候服务器巨卡&#xff09;。 参考&#xff1a; https://www.jianshu.com/p/0a995acf1a2e 超时&a…

操作系统的界面

(1) 请说明系统生成和系统引导的过程。 解&#xff1a; 系统的生成过程&#xff1a;当裸机启动后&#xff0c;会运行一个特殊的程序来自动进行系统的生成&#xff08;安装&#xff09;&#xff0c;生成系统之前需要先对硬件平台状况进行检查&#xff0c;或者从指定文件处读取…

CogVLM与CogAgent:开源视觉语言模型的新里程碑

引言 随着机器学习的快速发展&#xff0c;视觉语言模型&#xff08;VLM&#xff09;的研究取得了显著的进步。今天&#xff0c;我们很高兴介绍两款强大的开源视觉语言模型&#xff1a;CogVLM和CogAgent。这两款模型在图像理解和多轮对话等领域表现出色&#xff0c;为人工智能的…

A01、关于JVM的GC回收

引用类型 对象引用类型分为强引用、软引用、弱引用&#xff0c;具体差别详见下文描述&#xff1a; 强引用&#xff1a;就是我们一般声明对象是时虚拟机生成的引用&#xff0c;强引用环境下&#xff0c;垃圾回收时需要严格判断当前对象是否被强引用&#xff0c;如果被强引用&am…

35道HTML高频题整理(附答案背诵版)

1、简述 HTML5 新特性 &#xff1f; HTML5 是 HTML 的最新版本&#xff0c;它引入了很多新的特性和元素&#xff0c;以提供更丰富的网页内容和更好的用户体验。以下是一些主要的新特性&#xff1a; 语义元素&#xff1a;HTML5 引入了新的语义元素&#xff0c;像 <article&g…

GaN图腾柱无桥 Boost PFC(单相)九-EMI 滤波器容性电流影响分析

前言 为了防止 PFC 变换器中高频开关谐波对电网产生影响&#xff0c;同时抑制电网中的高频干扰对变换器运行的影响&#xff0c;一般通过在 PFC 变换器与交流电源之间加入EMI 滤波器消除共模干扰和差模干扰&#xff0c;使变换器满足相应的 EMI 标准。在基于GaN 功率器件的图腾柱…

GD32F4中断向量查询

中断向量表 中断向量对应函数 __Vectors DCD __initial_sp ; Top of StackDCD Reset_Handler ; Reset HandlerDCD NMI_Handler ; NMI HandlerDCD HardFault_Handler ;…

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜C

老规矩&#xff0c;先看目录&#xff0c;平均每个3-4C&#xff08;C是月饼&#xff0c;月饼一般分为4块&#xff09; C是什么&#xff0c;是两个都不行了&#xff0c;但联合起来可以&#xff0c;联合的英文是combined&#xff0c;好的&#xff0c;我知道这个英文也记不住&#…

【Python】管理项目第三方包

我们在开发python项目时&#xff0c;如果代码每移植到到其他机器上&#xff0c;就手动 pip install XXX 安装一次&#xff0c;这样手动介入 是不是不太方便&#xff1f; 那么&#xff0c;python有像java一样的maven管理包的工具吗&#xff1f;只需要一个类似pom的文件&#xff…

学成在线bug纪录

p26&#xff1a;No converter found for return value of type: class com.xuecheng.base.model.PageResult 解决&#xff1a;给PageResult添加getter和setter方法 Illegal DefaultValue null for parameter type integer 解决&#xff1a;将swagger-spring-boot-starter依赖…

Excel怎样统计一列中不同的数据分别有多少个?

文章目录 1.打开Excel数据表2.选择“插入”&#xff0c;“数据透视表”3.选择数据透视表放置位置4.将统计列分别拖到“行”和“数值”区间5.统计出一列中不同的数据分别有多少个 1.打开Excel数据表 2.选择“插入”&#xff0c;“数据透视表” 3.选择数据透视表放置位置 4.将统计…

数据结构【1】:数组专题

一、定义 数组是编程中一种强大的数据结构&#xff0c;它允许您存储和操作相同类型元素的集合。在 Python 中&#xff0c;数组是通过数组模块创建的&#xff0c;该模块提供了一个简单的接口来创建、操作和处理数组。 二、创建数组 在 Python 中&#xff0c;可以使用内置的 a…

js DOM的一些小操作 获取节点集合Node( getElementsByClassName等)

1. getElementsByClassName(names) 返回文档中所有含有指定类名的节点 document.getElementsByClassName(a) 返回所有类名为a的节点 2.getElementsByName(name) 返回文档中所有指定name的节点。 标签可以有name属性。 3. querySelectorAll(selectors) 返回文档中所有匹配…