[Java惡補day24] 74. 搜索二維矩陣

給你一個滿足下述兩條屬性的 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

提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
? 10 4 -10^4 ?104 <= matrix[i][j], target <= 10 4 10^4 104


知識點:
數組、矩陣、二分查找、排除法


解1(非常暴力):
核心思想:定義輔助數組存儲所有元素(因為每一行的第一個元素大于上一行的最后一個元素,因此可以這么操作),然后對這個輔助數組進行二分查找

時間復雜度: O ( m n ) O(mn) O(mn)
空間復雜度: O ( m n ) O(mn) O(mn)

class Solution {public boolean searchMatrix(int[][] matrix, int target) {//獲取行數、列數int m = matrix.length;int n = matrix[0].length;//定義輔助數組,存儲所有元素int[] nums = new int[m * n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {nums[i * n + j] = matrix[i][j];}}//定義二分查找的指針int low = 0;int high = m * n - 1;//只要兩個指針不重合,就繼續循環while (low <= high) {//獲取中位數int mid = (low + high) / 2;//判斷是否存在if (nums[mid] == target) {return true;} else if (nums[mid] > target) {high = mid - 1;} else {low = mid + 1;}}//未找到return false;}
}

解2(排除法):
核心思想:同 #240. 搜索二維矩陣Ⅱ

時間復雜度: O ( m + n ) O(m+n) O(m+n)
空間復雜度: O ( 1 ) O(1) O(1)。未使用輔助數組,僅使用int類型的輔助變量。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {//獲取行數、列數int m = matrix.length;int n = matrix[0].length;//從右上角開始找int i = 0;int j = n - 1;//只要還有元素,就繼續循環while (i < m && j >= 0) {//找到元素,返回if (matrix[i][j] == target) {return true;}//若當前元素>target,則遍歷前面一列else if (matrix[i][j] > target) {j--;}//否則,遍歷下面一行else {i++;}}//此時表明不存在元素return false;}
}

解3(二分查找):
核心思想:在形式上將矩陣所有元素放在一個數組中(因為每一行的第一個元素大于上一行的最后一個元素,因此可以這么操作),在實際上通過matrix[i/n][i%n]獲取mid在matrix中對應的元素,然后使用二分查找

時間復雜度: O ( l o g ( m n ) ) O(log (mn)) O(log(mn))
空間復雜度: O ( 1 ) O(1) O(1)。未使用輔助數組。

class Solution {public boolean searchMatrix(int[][] matrix, int target) {//獲取行數、列數int m = matrix.length;int n = matrix[0].length;//定義二分查找的指針int low = 0;int high = m * n - 1;//只要兩個指針不重合,就繼續循環while (low <= high) {//獲取中位數int mid = (low + high) / 2;//獲取矩陣對應的mid元素int item = matrix[mid / n][mid % n];//判斷是否存在if (item == target) {return true;} else if (item > target) {high = mid - 1;} else {low = mid + 1;}}//未找到return false;}
}

參考:
1、靈神題解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85282.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85282.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85282.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解鎖VSCode:從入門到精通的全攻略

目錄 一、VSCode 初相識二、安裝與基礎設置2.1 下載安裝2.2 基礎設置三、核心功能深度剖析3.1 強大的代碼編輯3.2 高效的版本控制集成3.3 實用的調試工具四、插件擴展,拓展無限可能4.1 插件市場探秘4.2 必備插件推薦五、個性化定制,打造專屬開發環境5.1 快捷鍵設置5.2 用戶代…

RFC4291-IPv6地址架構

RFC4291 IP Version 6 Addressing Architecture Author&#xff1a;Once Day Date&#xff1a;2025年6月15日 本文翻譯自RFC 4291 - IP Version 6 Addressing Architecture 這篇文章總結了IPv6的基礎概念&#xff0c;屬于IPv6協議入門內容。 文章目錄 RFC4291 IP Version 6 …

基礎數據結構第03天:順序表(實戰篇)

目錄 求奇數的乘積 數值統計 青年歌手大獎賽_評委會打分 猜數字 拿硬幣 值相等的最小索引 最大連續1的個數 差的絕對值為K的數對數目 數組中兩元素的最大乘積 數組元素和與數字和的絕對差 K個元素的最大和 等差三元組的數目 移除元素 基于排列構建數組 數組串聯…

10.OpenCV—聯合QT界面顯示

1.顯示在graphicsView控件上 .h文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include <QGraphicsPixmapItem> //1.聲明頭文件 namespace Ui { class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit Ma…

ChromaDB深度技術研究報告

第一章: ChromaDB核心概念與架構 1.1 向量數據庫:新一代AI應用基石 向量數據庫是為存儲、管理和搜索向量嵌入(Vector Embeddings)而專門設計的數據庫系統。在高維空間中,向量嵌入是數據(如文本、圖片、音頻等)的數值表示。向量數據庫的核心能力在于,它能夠高效地執行相…

react 自定義狀態管理庫

核心實現原理 &#xff1a; 全局狀態容器&#xff1a;維護單一狀態源 訂閱機制&#xff1a;組件訂閱狀態變化 狀態更新調度&#xff1a;通過 Hooks 觸發組件重渲染 基礎版實現–核心代碼 // 1. 創建全局狀態存儲 const createStore (initialState) > {let state initial…

解決idea無法正常加載lombok包

問題 近期發現了一個問題&#xff0c;就是很多同學在導包的&#xff0c;lombok經常會爆紅&#xff0c;經過研究找到了解決方法。 解決 1、更改lombok包的版本 通過手動調整pom.xml文件的lombok&#xff0c;通常講版本調整為1.18.20&#xff0c;或者1.18.32。 <dependenc…

0_1樹和圖

樹的概念 樹(tree)是一種能夠分層存儲數據的重要數據結構,樹中的每個元素被稱為樹的節點,每個節點有若干個指針指向子節點。從節點的角度來看,樹是由唯一的起始節點引出的節點集合。這個起始結點稱為根(root)。樹中節點的子樹數目稱為節點的度(degree)。在面試中,關于樹的…

從0搭建出海 Demo:免費香港服務器實戰指南

你有沒有在通勤地鐵上、午飯后摸魚時&#xff0c;突然冒出一個想法&#xff1a;“要不我也做個應用試試&#xff1f;好像不少人靠這個補貼生活開銷啊&#xff01;” 結果隨手搜了幾篇“海外項目經驗分享”&#xff0c;瞬間被一堆術語勸退&#xff1a;CDN、備案、分發平臺、服務…

《仿盒馬》app開發技術分享--未完成訂單列表展示邏輯優化(61)

技術棧 Appgallery connect 前言&#xff1a; 上一節我們實現訂單與優惠券的聯合提交時&#xff0c;我去到訂單列表頁面查看生成的訂單信息&#xff0c;發現現在的訂單從信息展示到價格計算全都是有問題的。所以緊急的把對應的問題修改一下。 問題來源&#xff1a; async …

手搓多模態-08 主模型的搭建(上)

前情回顧 在之前的章節我們已經構建好了視覺編碼器&#xff0c;預處理模塊&#xff0c;以及gemma模型的頂層。gemma模型的頂層&#xff0c;主要是構建圖中圈出的輸入&#xff0c;它把視覺編碼器里每個圖像patch的編碼維度對齊到自然語言token的嵌入維度&#xff0c;并組裝成了一…

Matlab 角點探測

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這里實現一種角點探測功能,其思路仍然是借助圖像的局部梯度信息,實現亞像素精度的角點定位。該功能核心思想是利用角點周圍的局部梯度信息,通過加權最小二乘優化的方式迭代調整角點位置,使定位精度達到亞像素級別。整個…

錯誤監控----比如實現sentry一些思路

錯誤監控 ?、引? 1.為什么需要前端錯誤監控 你的腳本在哪些邊界條件下會報錯&#xff1f; 你的腳本和樣式兼容性如何&#xff1f; 有哪些地區不能正常訪問你的?站&#xff1f; 出現問題之后&#xff0c;你如何快速定位排查&#xff0c;把損失降到最低&#xff1f; 如果你想解…

linux內核調試

1. 前置安裝 1.1 編譯好的內核 參考&#xff1a; https://blog.csdn.net/qq_51950769/article/details/148596916 1.2 編譯busybox BusyBox 是一個非常輕量級的多合一工具箱&#xff0c;常被稱為“Linux 的瑞士軍刀”。 簡單來說&#xff1a; 它把很多常用的 Linux 命令&am…

什么是曲面細分

什么是曲面細分 在CAD格式中&#xff0c;通常使用曲線和數學函數來定義曲面和實體。這些曲面的精確度和光滑度非常適用于制造過程。但是&#xff0c;現代GPU芯片針對由三角形網格體組成的曲面的渲染計算進行了高度優化。通常&#xff0c;實時渲染器和虛幻之類的游戲引擎只能處…

CANFD加速是什么?和CANFD有什么區別?

文章目錄 摘要什么是CANFD加速?CAN FD的基本原理:仲裁階段(Arbitration Phase):數據階段(Data Phase):關鍵特性:優勢:總結摘要 下面的截圖,大家肯定不陌生,在使用CAN設備上位機的時候,已經選擇了CANFD,但還有一個選項是“CANFD加速”,那CANFD加速和不加速有什么…

minio 啟動失敗--Incorrect Usage: flag provided but not defined: -consoleaddress

根據錯誤信息 flag provided but not defined: -consoleaddress&#xff0c;這表明 Minio 服務啟動時使用了未定義的命令行參數 --consoleaddress&#xff0c;導致啟動失敗。這個問題與 Minio 版本兼容性有關。 問題原因 參數名稱變更&#xff1a; Minio 版本 > RELEASE.20…

基于Rust的Polars學習筆記

基于Rust的Polars學習筆記 Polars 學習筆記 Cargo.toml通用配置 [package] name = "rustP" version = "0.1.0" edition = "2024"[dependencies] polars = { version = "0.48.1", features = ["full"]}Quickstart use po…

SpringBoot擴展——定時任務!

定時任務 項目開發中會涉及很多需要定時執行的代碼&#xff0c;如每日凌晨對前一日的數據進行匯總&#xff0c;或者系統緩存的清理、對每日的數據進行分析和總結等需求&#xff0c;這些都是定時任務。單體系統和分布式系統的分布式任務有很大的區別&#xff0c;單體系統就一個…

RTDETRv2 pytorch 官方版自己數據集訓練遇到的問題解決

rtdetrv2 訓練問題遇到的問題。 pip install torch2.0.1 torchvision0.15.2 torchaudio2.0.2 --index-url https://download.pytorch.org/whl/cu117 1 Please make sure torchvision version > 0.15.2 發現自己實際裝的是 torchvison0.15.2cu117 修改_misc.py中修改為…