[M模擬] lc2711. 對角線上不同值的數量差(對角線遍歷+前后綴分解)

文章目錄

    • 1. 題目來源
    • 2. 題目解析

1. 題目來源

鏈接:2711. 對角線上不同值的數量差

前置題:

  • [M模擬] lc3446. 按對角線進行矩陣排序(對角線遍歷+公式推導+模板題)
    • 矩形的對角線遍歷的基礎題。

題單:

  • 待補充

2. 題目解析

2025年03月25日21:21:28

方法一:暴力

  • 由于這個題目數據量太小了哈,就完全可以暴力來做,每次去暴力判斷下左上側、右下側對角線的重復元素個數即可。

方法二:前后綴分解

  • 暴力顯然在同一個對角線上有很多元素被重復遍歷。
  • 這個時候就需要對角線的前后綴分解。確保重復遍歷次數較少。
    • 直接遍歷每一條對角線元素。
    • 從左上方到右下方這樣的遍歷方向。
    • 同時統計左上方對角線的不同元素個數。作為前綴統計,直接放到答案中。
    • 再從右下方到左上方這樣的遍歷方向。
    • 此時就可以直接計算答案了,同時統計 右下方 到 左上方 對角線的不同元素個數。作為后綴統計,直接與前綴元素計算答案即可。
  • 所以,每個元素至多被遍歷兩遍。

方法三:狀態壓縮+前后綴分解

  • 這個沒啥難度哈,一個簡單的狀態壓縮,將 set 使用一個 uint64 的數字進行代替,是完全可以的哈。
  • 注意里面一些位運算的 API 和技巧 即可。

  • 時間復雜度 O ( n m ) O(nm) O(nm)
  • 空間復雜度 O ( 1 ) O(1) O(1) 返回值不計算

方法二:前后綴分解

func differenceOfDistinctValues(grid [][]int) [][]int {n, m := len(grid), len(grid[0])res := make([][]int, n)for i := range n {res[i] = make([]int, m)}set := map[int]struct{}{}for k := 1; k < n + m; k ++ {minJ, maxJ := max(0, m - k), min(m - 1, n - 1 - k + m)clear(set)        for j := minJ; j <= maxJ; j ++ {    // 處理前綴i := j + k - mres[i][j] = len(set)            // 不包含(i, j) 注意順序set[grid[i][j]] = struct{}{}   }clear(set)for j := maxJ; j >= minJ; j -- {   // 處理后綴,計算答案i := j + k - mres[i][j] = abs(res[i][j] - len(set))set[grid[i][j]] = struct{}{}}}return res
}func abs(x int) int { if x < 0 { return -x } return x 
}

方法一:暴力

func differenceOfDistinctValues(grid [][]int) [][]int {n, m := len(grid), len(grid[0])res := make([][]int, n)for i := range n {res[i] = make([]int, m)}getL := func(x, y int) int {s := map[int]struct{}{}x -- y -- for x >= 0 && y >= 0 {s[grid[x][y]] = struct{}{}x --y --}return len(s)}getR := func(x, y int) int {s := map[int]struct{}{}x ++ y ++ for x < n && y < m {s[grid[x][y]] = struct{}{}x ++y ++}return len(s)}abs := func(x int) int {if x > 0 {return x}return -x}for i := range n {for j := range m {res[i][j] = abs(getL(i, j) - getR(i, j))}}return res
}

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

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

相關文章

設計一個基于機器學習的光伏發電功率預測模型,以Python和Scikit - learn庫為例

下面為你設計一個基于機器學習的光伏發電功率預測模型&#xff0c;以Python和Scikit - learn庫為例。此模型借助歷史氣象數據和光伏發電功率數據來預測未來的光伏發電功率。 模型設計思路 數據收集&#xff1a;收集歷史氣象數據&#xff08;像溫度、光照強度、濕度等&#xf…

洛谷 P1351 [NOIP 2014 提高組] 聯合權值(樹)

題目描述 無向連通圖 G 有 n 個點&#xff0c;n?1 條邊。點從 1 到 n 依次編號,編號為 i 的點的權值為 Wi?&#xff0c;每條邊的長度均為 1。圖上兩點 (u,v) 的距離定義為 u 點到 v 點的最短距離。對于圖 G 上的點對 (u,v)&#xff0c;若它們的距離為 2&#xff0c;則它們之間…

YoloV8訓練和平精英人物檢測模型

概述 和平精英人物檢測&#xff0c;可以識別游戲中所有人物角色&#xff0c;并通過繪制框將人物選中&#xff0c;訓練的模型僅僅具有識別功能&#xff0c;可以識別游戲中的視頻、圖片等文件&#xff0c;搭配Autox.js可以推理&#xff0c;實現實時繪制&#xff0c;但是對手機性…

智能汽車圖像及視頻處理方案,支持視頻實時拍攝特效能力

在智能汽車日新月異的今天&#xff0c;美攝科技作為智能汽車圖像及視頻處理領域的先行者&#xff0c;憑借其卓越的技術實力和前瞻性的設計理念&#xff0c;為全球智能汽車制造商帶來了一場視覺盛宴的革新。美攝科技推出智能汽車圖像及視頻處理方案&#xff0c;一個集高效性、智…

架構設計之自定義延遲雙刪緩存注解(下)

架構設計之自定義延遲雙刪緩存注解(下) 小薛博客官方架構設計之自定義延遲雙刪緩存注解(下)地址 為了保證Cache和ClearAndReloadCache的靈活性&#xff0c;特意加入EL表達式解析 1、Cache package com.xx.cache;import java.lang.annotation.*; import java.util.concurren…

rosbag|ROS中.bag數據包轉換為matlab中.mat數據類型

代碼見代碼 msg_dict中設置自定義消息類型 test_config中設置需要記錄的具體的值 test_config中topic_name以及message_type照搬plotjuggler打開時的參數 最后生成.mat文件在matlab中進行使用

基于動態 FOF(基金中的基金)策略的基金交易推薦系統的設計與實現思路

下面為你呈現一個基于動態 FOF&#xff08;基金中的基金&#xff09;策略的基金交易推薦系統的設計與實現思路&#xff0c;同時給出一個簡單的 Python 示例代碼。 系統設計 1. 需求分析 收集各類基金的歷史數據&#xff0c;涵蓋凈值、收益率、風險指標等。依據動態 FOF 策略…

搭建主從DNS、nfs、nginx

任務需求&#xff1a; 客戶端通過訪問 www.nihao.com 后&#xff0c;能夠通過 dns 域名解析&#xff0c;訪問到 nginx 服務中由 nfs 共享的首頁文件&#xff0c;內容為&#xff1a;Very good, you have successfully set up the system. 各個主機能夠實現時間同步&#xff0c;…

JS 對象轉數組,數組轉對象

數據格式 objMap : {apiP: 8000, sder: true, host: "1.111", wPort: "1335" }要求&#xff1a;將 objMap 轉化為 數組 const equipArray Object.keys(objMap ).map(key > {return {name: key,value: objMap [key]}打印結果 數組轉為對象 let equipAr…

vue - [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.

問題描述&#xff1a; vue項目中&#xff0c;對表單數組賦值時&#xff0c;控制臺拋出警告&#xff1a; 問題代碼&#xff1a; 問題分析&#xff1a; 1、Vue 要求每個虛擬 DOM 節點必須有唯一的 key。該警告信息通常出現在使用v-for循環的場景中&#xff0c;多個同級節點使用…

DeepSeek V3–0324 vs DeepSeek-V3, 排名最高非推理模型

最近DeepSeek V3 升級。 本文將帶您了解該模型的核心特性、基準表現,以及如何通過Hugging Face推理終端和OpenRouter平臺親身體驗。我們還將通過創意生成與邏輯分析兩大測試案例,直觀展示其卓越性能。 DeepSeek-V3-0324 2025年3月24日,深度求索(DeepSeek)AI正式發布了V3…

docker使用uv安裝依賴

官方使用 FastAPI 官方 Dockerfile 中用了兩次&#xff1a; RUN --mounttypecache,target/root/.cache/uv \--mounttypebind,sourceuv.lock,targetuv.lock \--mounttypebind,sourcepyproject.toml,targetpyproject.toml \uv sync --frozen --no-install-project # ? 第一次…

3.0 Disruptor的使用介紹(一)

Disruptor: 其官網定義為&#xff1a;“A High Performance Inter-Thread Messaging Library”&#xff0c;即&#xff1a;線程間的高性能消息框架&#xff0c;與Labview的生產者、消費者模型很相似。 其組成部分比較多&#xff0c;先介紹幾個常用的概念&#xff1a; …

在 Windows 系統下,將 FFmpeg 編譯為 .so 文件

1. 準備環境 確保你的 Windows 系統已安裝以下工具&#xff1a; Android Studio NDK&#xff08;Native Development Kit&#xff09; MSYS2&#xff08;用于提供類 Unix 環境&#xff09; FFmpeg 源碼 Git Bash&#xff08;可選&#xff0c;推薦使用&#xff09; 安裝 …

leetcode二叉樹3

404.左葉子之和 給定二叉樹的根節點 root &#xff0c;返回所有左葉子之和。 示例 1&#xff1a; 輸入: root [3,9,20,null,null,15,7] 輸出: 24 解釋: 在這個二叉樹中&#xff0c;有兩個左葉子&#xff0c;分別是 9 和 15&#xff0c;所以返回 24示例 2: 輸入: root [1] 輸…

QT網絡通信的接口與使用

文章目錄 前言1.服務端實現流程1.1步驟 1&#xff1a;創建 QTcpServer 并監聽端口1.2步驟 2&#xff1a;處理新連接請求1.3步驟 3&#xff1a;接收客戶端數據1.4步驟 4&#xff1a;處理客戶端斷開 2.客戶端實現流程2.1步驟 1&#xff1a;創建 QTcpSocket 并連接服務器2.2步驟 2…

華為OD機試2025A卷七日集訓第1期 - 按算法分類,由易到難,循序漸進,玩轉OD(Python/JS/C/C++)

目錄 一、適合人群二、本期訓練時間三、如何參加四、7日集訓第1期五、精心挑選21道高頻100分經典題目&#xff0c;作為入門。第1天、邏輯分析第2天、邏輯分析第3天、邏輯分析第4天、邏輯分析第5天、雙指針第6天、二叉樹第7天、回溯 六、集訓總結六、國內直接使用最新GPT-4.5、滿…

Qt 重入和線程安全

重入和線程安全 在整個文檔中&#xff0c;"重入"和 "線程安全 "這兩個術語被用來標記類和函數&#xff0c;以表明它們在多線程應用程序中的使用方式&#xff1a; 線程安全函數可以同時被多個線程調用&#xff0c;即使調用使用的是共享數據&#xff0c;因…

Elasticsearch:構建 AI 驅動的搜索體驗

Elasticsearch 介紹 當你開始使用 Elastic 時&#xff0c;你將使用 Elasticsearch Relevance Engine?&#xff08;ESRE&#xff09;&#xff0c;它專為 AI 搜索應用程序提供支持。借助 ESRE&#xff0c;你可以利用一整套開發者工具&#xff0c;包括 Elastic 的文本搜索、向量…