每日一題——力扣498 對角線遍歷

力扣498 對角線遍歷

問題分析

給定一個 m x n 矩陣,我們需要按照對角線順序遍歷所有元素。對角線遍歷的特點是:

  • 每條對角線上元素的行索引與列索引之和為常數
  • 遍歷方向交替變化:奇數對角線(從右上到左下),偶數對角線(從左下到右上)

在這里插入圖片描述

解決方案

核心思路

  1. 確定對角線常數k:從0到(m-1)+(n-1)
  2. 根據k的奇偶性確定遍歷方向
    • k為偶數:從下往上遍歷(行索引遞減,列索引遞增)
    • k為奇數:從上往下遍歷(行索引遞增,列索引遞減)
  3. 確定每條對角線的起始點
    • 當k < min(m, n)時,起始點在矩陣邊緣
    • 當k ≥ min(m, n)時,起始點向矩陣內部移動

代碼實現

class Solution {public int[] findDiagonalOrder(int[][] mat) {if (mat == null || mat.length == 0) return new int[0];int m = mat.length;int n = mat[0].length;int[] result = new int[m * n];int index = 0;// 遍歷所有對角線(k = i + j)for (int k = 0; k < m + n - 1; k++) {if (k % 2 == 0) { // 偶數對角線:從下往上// 確定起始點int i = Math.min(k, m - 1);int j = k - i;// 沿對角線向上遍歷while (i >= 0 && j < n) {result[index++] = mat[i][j];i--;j++;}} else { // 奇數對角線:從上往下// 確定起始點int j = Math.min(k, n - 1);int i = k - j;// 沿對角線向下遍歷while (j >= 0 && i < m) {result[index++] = mat[i][j];i++;j--;}}}return result;}
}

算法解析

關鍵步驟詳解

在這里插入圖片描述

邊界處理技巧

  1. 起始點確定
    • 偶數對角線:i = min(k, m-1), j = k - i
    • 奇數對角線:j = min(k, n-1), i = k - j
  2. 遍歷終止條件
    • 當行索引或列索引超出矩陣邊界時停止
  3. 方向切換
    • 利用k的奇偶性自然切換方向

復雜度分析

指標說明
時間復雜度O(m*n)每個元素訪問一次
空間復雜度O(1)除結果數組外無額外空間
遍歷效率100%最優解

拓展思考

變體問題

  1. Z字形打印矩陣
  2. 螺旋矩陣遍歷
  3. 對角線求和問題

總結

對角線遍歷問題展示了如何通過觀察矩陣的數學特性(行索引+列索引=常數)來設計高效算法。關鍵在于:

  1. 識別對角線遍歷的數學規律
  2. 巧妙處理遍歷方向的交替變化
  3. 精確控制邊界條件

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

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

相關文章

【單例模式】

概述一個類不管創建多少次對象&#xff0c;永遠只能得到該類型的一個對象的實例。常用到的比如日志模塊 &#xff0c;數據庫模塊餓漢&#xff1a;在類加載時就創建單例對象&#xff0c;因此它是線程安全的&#xff0c;因為對象的創建在程序啟動時就已經完成&#xff0c;不存在多…

Unity開發如何實現換裝技術

一、3D換裝方案SkinnedMeshRenderer組件替換&#xff08;最常用&#xff09;適用場景&#xff1a;角色需要保持骨骼動畫&#xff0c;更換服裝/武器等實現步驟&#xff1a;1.準備模型&#xff1a;所有服裝需使用相同骨骼結構&#xff08;建議在建模軟件中綁定到同一套骨骼&#…

RabbitMQ面試精講 Day 29:版本升級與平滑遷移

【RabbitMQ面試精講 Day 29】版本升級與平滑遷移 在“RabbitMQ面試精講”系列的第29天&#xff0c;我們聚焦于一個在中高級系統架構與運維面試中極具分量的話題——RabbitMQ的版本升級與平滑遷移。隨著業務發展和RabbitMQ自身功能演進&#xff08;如從經典集群到Quorum隊列、從…

Python-機器學習概述

??一、人工智能三大概念?? ??人工智能&#xff08;AI&#xff09;?? 定義&#xff1a;使用計算機模擬或代替人類智能的研究領域 目標&#xff1a;像人類一樣思考&#xff08;理性推理&#xff09;、行動&#xff08;決策執行&#xff09; 別名&#xff1a;仿智 ??…

GIT壓縮提交,將多個已經push的commit提交,合并成一個

1.選中要合并的提交2.選中后右鍵選著Squash Committs3.重新編輯提交信息4.操作完成后不能pull,要強制pushgit push --force

(多線程)線程安全和線程不安全 產生的原因 synchronized關鍵字 synchronized可重入特性死鎖 如何避免死鎖 內存可見性

線程安全問題產生原因 線程安全問題主要發生在多線程環境下&#xff0c;當多個線程同時訪問共享資源時&#xff0c; 如果沒有采取適當的同步措施&#xff0c;就可能導致數據不一致或程序行為異常1.[根本]操作系統對于線程的調度是隨機的.搶占式執行&#xff0c;這是線程安全問題…

defineCustomElement 的局限性及重載需求分析

一、defineCustomElement 的核心局限性 Vue 的 defineCustomElement 雖然實現了 Vue 組件到 Web Components 的轉換,但在跨框架/跨語言場景下存在以下關鍵局限,這也是你的項目需要重載其返回構造器的根本原因: 1. 框架間事件模型不兼容 Vue 事件機制:依賴 $emit 轉換的 C…

如何在前端開發中應用AI技術?

一、AI 輔助前端開發流程&#xff08;提效工具&#xff09;智能代碼生成與補全使用 AI 編程工具&#xff08;如 GitHub Copilot、Cursor、Amazon CodeWhisperer&#xff09;實時生成代碼片段&#xff0c;支持 HTML、CSS、JavaScript、React/Vue 等框架語法。例如&#xff0c;輸…

極海發布APM32F425/427系列高性能MCU:助力工業應用升級

聚焦工業4.0及能源管理應用對主控MCU的高性能需求&#xff0c;極海正式發布APM32F425/427系列高性能拓展型MCU&#xff0c;集合運算性能、ADC性能、Flash控制器性能與通信接口四大維度革新&#xff0c;進一步增強了EMC性能&#xff0c;重新定義Cortex-M4F內核在復雜工業場景下的…

JSX深度解析:不是HTML,勝似HTML的語法糖

JSX深度解析&#xff1a;不是HTML&#xff0c;勝似HTML的語法糖 作者&#xff1a;碼力無邊大家好&#xff01;我是依然在代碼世界里乘風破浪的碼力無邊。歡迎回到我們的《React奇妙之旅》第二站&#xff01; 在上一篇文章中&#xff0c;我們成功地用Vite啟動了第一個React應用&…

大模型應用新趨勢:從思維鏈到 HTML 渲染的破局之路

一、大模型交互范式的演進&#xff1a;從 Prompt 工程到思維鏈革新早期的 Prompt 工程曾面臨 “模型特異性” 困境 —— 精心設計的提示詞在不同模型上效果迥異。但隨著 ** 思維鏈&#xff08;CoT&#xff09;** 技術的成熟&#xff0c;這一局面正在改變。從 OpenAI o1 的隱式整…

從“找不到”到“秒上手”:金倉文檔系統重構記

你是否曾在浩如煙海的產品手冊中迷失方向&#xff1f;是否為了一個關鍵參數翻遍十幾頁冗余說明&#xff1f;是否對時靈時不靈的搜索功能感到抓狂&#xff1f;甚至因為漫長的加載時間而失去耐心&#xff1f;我們懂你!這些曾困擾金倉用戶的文檔痛點&#xff0c;從現在起&#xff…

【開源項目分享】可監控電腦CPU、顯卡、內存等硬件的溫度、功率和使用情況

系列文章目錄 【開源項目分享】可監控電腦CPU、顯卡、內存等硬件的溫度、功率和使用情況 &#xff08;一&#xff09;開源的硬件監控工具 LibreHardwareMonitor &#xff08;二&#xff09;LibreHardwareMonitor 分層架構設計 &#xff08;三&#xff09;LibreHardwareMonitor…

帕累托優化:多目標決策的智慧與藝術

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 在相互沖突的目標中尋找最優平衡 ? 1. 帕累托優化概述 帕累托優化&a…

#Linux內存管理學以致用# 請你根據linux 內核struct page 結構體的雙字對齊的設計思想,設計一個類似的結構體

Linux struct page 的雙字對齊設計思想1.雙字對齊&#xff08;8字節對齊&#xff09;&#xff1a;確保struct page的大小是sizeof(long)的整數倍&#xff08;通常8字節&#xff09;&#xff0c;便于CPU高效訪問。減少內存碎片&#xff0c;提高緩存行&#xff08;Cache Line&…

白酒變局,透視酒企穿越周期之道

今年以來&#xff0c;在科技股的帶動下&#xff0c;A股市場表現十分突出&#xff0c;近期滬指甚至創出了十年來新高。然而&#xff0c;在這輪市場的表現中&#xff0c;曾經被資金熱捧的白酒板塊&#xff0c;卻顯得有些沉寂。業績層面&#xff0c;從目前已披露的白酒上市公司半年…

智慧園區:從技術賦能到價值重構,解鎖園區運營新范式

在數字化浪潮席卷產業的當下&#xff0c;智慧園區已從 “概念藍圖” 落地為 “實戰方案”&#xff0c;其核心邏輯既源于技術的突破性應用&#xff0c;也扎根于企業的實際需求&#xff0c;更順應著行業發展的未來趨勢&#xff0c;成為驅動園區從傳統管理向智能化運營升級的核心引…

模運算(密碼學/算法)

1 什么是模運算 模運算的概念 模運算是一種算術運算&#xff0c;常寫作a mod n&#xff0c;表示整數a除以正整數n后的余數。 模數是模運算中的除數n&#xff0c;它決定了結果的范圍。 公式表達&#xff1a; 對于任意整數a和正整數n&#xff0c;可以將a表示為&#xff1a;a qn …

海康相機的 HB 模式功能詳解

海康相機的 HB 模式是一種無損壓縮技術,全稱為High Bandwidth 模式,主要用于提升工業相機在高速場景下的數據傳輸效率。其核心原理是通過硬件級無損壓縮算法對原始圖像數據進行壓縮,在不損失畫質的前提下減少數據量,從而突破千兆網絡的帶寬限制,實現更高的行頻和傳輸幀率。…

electron應用開發:命令npm install electron的執行邏輯

我們來徹底解析 npm install electron 這個命令背后的完整執行邏輯。這是一個非常精妙的過程&#xff0c;遠不止下載一個簡單的 JavaScript 包那么簡單。理解了它&#xff0c;你就能透徹地明白 Electron 開發環境的運作原理&#xff0c;并能輕松解決各種安裝問題。 npm instal…