力扣经典题目解析--搜索二维矩阵(小米一面)

原题地址: . - 力扣(LeetCode)

给你一个满足下述两条属性的 m x n 整数矩阵:

  • 每行中的整数从左到右按非严格递增顺序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true

示例 2:

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false

暴力法

遍历二维数组,找到对应的数

public boolean searchMatrix(int[][] matrix, int target) {for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {if (matrix[i][j] == target) {return true;}}}return false;
}

二维二分查找

在排过序的数组中要找一个数,二分查找是效率很高的一种方式,时间复杂度是logn,二分查找的核心是定义两个指针low和high,分别对应数字开始和结尾的索引,然后找到中间的索引,判断这个中间的数与目标数的关系,大于目标数则说明目标数在左边,把high移到mid-1的位置继续找,一直到找到为止

public boolean searchMatrix(int[][] matrix, int target) {for (int i = 0; i < matrix.length; i++) {if (binarySearch(matrix[i], target) >= 0) return true;}return false;
}public static int binarySearch(int[] a, int key) {int low = 0;int high = a.length - 1;if (key < a[low] || key > a[high]) return -1;while (low <= high) {int mid = (low + high) / 2;if (a[mid] > key) {high = mid - 1;} else if (a[mid] < key) {low = mid + 1;} else {return mid;}}return -1;
}

一维二分查找

接下去上点强度,如果你能回答到这一步,这道题就达到满分了。

这道题有个条件是每行的第一个整数大于前一行的最后一个整数。也就是说把这个二维数组展开成一维数组,仍然是从小到大排序的。假设一行有n个数,则展开后的索引为idx = row * n + col.反过来,对于下标为idx的元素,对应二维数组的坐标是row = idx / n; col = idx % n;

public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length; //有多少行if (m == 0) return false;int n = matrix[0].length; // 有多少列int low = 0;// high为一维数组最后一个indexint high = m * n - 1;while (low <= high) {int mid = (low + high) / 2;//通过一维数组的index拿到二维数组的index,再拿到值int row = mid / n;int col = mid % n;if (matrix[row][col] > target) {high = mid - 1;} else if (matrix[row][col] < target) {low = mid + 1;} else {return true;}}return false;
}

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

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

相关文章

数据隐私安全趋势

在当今社交媒体和开源开发的世界中&#xff0c;共享似乎已成为社会常态。毕竟&#xff0c;我们都被教导分享就是关怀。这不仅适用于个人&#xff0c;也适用于公司&#xff1a;无论是有意在社交媒体帐户和公司网站上&#xff0c;还是无意中通过员工的行为&#xff0c;公司可能会…

部署VUE+SpringBoot+nginx项目

本文是前端是vite element-plus 后端 springBoot 部署整个项目主要分为3个步骤&#xff0c; 1. 部署nginx&#xff0c;主要是配置nginx.conf 2.打包前端代码 3.打包后端代码 1.安装nginx 安装手顺&#xff1a; linux安装nginx_linux安装nginx需要gcc还是gcc-c-CSDN…

c++数字反转

题目描述 给定一个整数 N&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后得到的新数的最高位数字不应为零&#xff08;参见样例 2&#xff09;。 输入格式 一个整数 N。 输出格式 …

东南亚市场外贸注意事项

东南亚地区由多个国家组成&#xff0c;每个国家都有其独特的文化、经济和政治背景&#xff0c;因此在这个地区开展业务需要考虑到各种不同因素。此外&#xff0c;东南亚地区也是一个经济增长迅速、市场潜力巨大的区域&#xff0c;吸引了众多国际企业的关注。然而&#xff0c;与…

【牛客】SQL35 浙大不同难度题目的正确率

描述 题目&#xff1a;现在运营想要了解浙江大学的用户在不同难度题目下答题的正确率情况&#xff0c;请取出相应数据&#xff0c;并按照准确率升序输出。 示例&#xff1a; user_profile iddevice_idgenderageuniversitygpaactive_days_within_30question_cntanswer_cnt121…

学生个性化成长平台搭建随笔记

1.Vue的自定义指令 在 Vue.js 中&#xff0c;我们可以通过 Vue.directive() 方法来定义自定义指令。具体来说&#xff0c;我们需要传递两个参数&#xff1a; 指令名称&#xff1a;表示我们要定义的指令名称&#xff0c;可以是一个字符串值&#xff0c;例如&#xff1a;has-rol…

【MySQL】undo log、redo log、bin log三者之间的区分?

undo log、redo log、bin log三者之间的区分&#xff1f; 从 产生的时间点、日志内容、用途 三方面展开论述即可 1.undo log——撤销日志 时间点&#xff1a;事务开始之前产生&#xff0c;根据当前版本的数据生成一个undo log&#xff0c;也保存在事务开始之前 作用&#xf…

在Pycharm中运行Django项目如何指定运行的端口

方法步骤&#xff1a; 打开 PyCharm&#xff0c;选择你的 Django 项目。在菜单栏中&#xff0c;选择 “Run” -> “Edit Configurations...”。在打开的 “Run/Debug Configurations” 对话框中&#xff0c;选择你的 Django server 配置&#xff08;如果没有&#xff0c;你…

Mathematica学习笔记收纳

笔记 可以关注官方公众号 帮助文件 https://reference.wolfram.com/language/index.html.zh 南京大学的介绍 https://oi.nju.edu.cn/Mathematica/listm.htm

08 string类的使用

为什么要学习string类 c语言中的字符串 c语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;c标准库提供了一些str系列的函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不符合OOP的思想&#xff0c;而且底层空间需要自…

日本韩国媒体宣发稿渠道平台怎么找?跨境出海推广新闻报道营销公司告诉你

【本篇由言同数字科技有限公司原创】随着全球化和互联网的快速发展&#xff0c;品牌出海已经成为众多企业的共同目标。在这个过程中&#xff0c;通过在日本和韩国的媒体上发表文章&#xff0c;可以带来许多重要的意义和益处。在本文中&#xff0c;我们将探讨一下这些意义。 首…

MySQL学习Day21-索引的创建与设计原则

一、索引的声明与使用 1.索引的分类: 功能逻辑:普通索引、全文索引、单列索引、多列索引和空间索引 物理实现:聚簇索引和非聚簇索引 作用字段个数:单列索引和联合索引 (1)普通索引:在创建普通索引时&#xff0c;不附加任何限制条件&#xff0c;只是用于提高查询效率&#…

关于跨链桥的访谈链接合集

想了解跨链桥&#xff0c;知名人士的访谈也很重要&#xff0c;下面是相关知名人士的访谈合计 1&#xff1a;Andre Cronje 专访Andre Cronje&#xff1a;99% 的项目都是垃圾&#xff0c;但是还有 1% 的真正价值存在 https://www.panewslab.com/zh/articledetails/g52p2lpbudmm.…

在Android中使用ActiveMQ通信应用MQTT

1.MQTT简介: MQTT 是一种基于发布订阅模型的即时通讯协议,它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、高延迟或不可靠的网络而设计,所以主要应用于物联网设备中。 2.MQTT…

Element复选框只要框不要字

场景 复选框分别放在多个选项后&#xff0c;只需要勾选框&#xff0c;不要展现的文字。 实现 <el-checkbox-group v-model"checkList"><el-checkbox label"使用核武器"></el-checkbox> </el-checkbox-group> ... data() {retu…

Java零基础-do-while循环语句

前言 Java作为一门高级编程语言&#xff0c;其强大的功能和应用广泛性备受程序员和开发者青睐。而在Java中&#xff0c;循环语句是程序开发中的重要组成部分&#xff0c;其中的do-while循环语句也是其中的一个必备知识点。 本文将以Java语言为例&#xff0c;详细介绍do-while…

Android 指南针校准进度计算实现

关于Android中指南针的实现&#xff0c;我们可以使用传感器来获取设备的方向信息&#xff0c;从而实现指南针功能。 Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);sensorManager (SensorManager) getSystemService(Conte…

Leetcode——hot3最长连续序列

最长连续序列 class Solution {public int longestConsecutive(int[] nums) {if(nums.length 0 || nums.length 1){return nums.length;}Arrays.sort(nums);int count 1;int max 1;for(int i 0; i < nums.length - 1; i){if(nums[i1] - nums[i] 1){count;if(count &…

2004-2020年全国及各省森林覆盖率、森林面积等数据

数据名称:中国及各省森林资源指标面板数据 数据来源:中国环境统计年鉴(2004-2020年) 森林覆盖率是指森林面积占土地总面积的比率,是反映一个国家(或地区)森林资源和林地占有的实际水平的重要指标,一般使用百分比表示。 林业用地面积是指生长乔木、竹类、灌木、沿海红…

逆序或者正序打印一个数的每一位数,递归实现(C语言)

从键盘上输入一个不多于5位&#xff08;包括5位&#xff09;的正整数&#xff0c;要求 &#xff08;1&#xff09;求出它是几位数&#xff1b;&#xff08;2&#xff09;分别输出每一位数字&#xff08;3&#xff09;按逆序输出各位数字 &#xff08;1&#xff09;求出它是几位…