從零學算法2965

2965. 找出缺失和重復的數字
給你一個下標從 0 開始的二維整數矩陣 grid,大小為 n * n ,其中的值在 [1, n2] 范圍內。除了 a 出現 兩次,b 缺失 之外,每個整數都 恰好出現一次 。
任務是找出重復的數字a 和缺失的數字 b 。
返回一個下標從 0 開始、長度為 2 的整數數組 ans ,其中 ans[0] 等于 a ,ans[1] 等于 b 。
示例 1:
輸入:grid = [[1,3],[2,2]]
輸出:[2,4]
解釋:數字 2 重復,數字 4 缺失,所以答案是 [2,4] 。
示例 2:
輸入:grid = [[9,1,7],[8,9,2],[3,4,6]]
輸出:[9,5]
解釋:數字 9 重復,數字 5 缺失,所以答案是 [9,5] 。
提示:
2 <= n == grid.length == grid[i].length <= 50
1 <= grid[i][j] <= n * n
對于所有滿足1 <= x <= n * n 的 x ,恰好存在一個 x 與矩陣中的任何成員都不相等。
對于所有滿足1 <= x <= n * n 的 x ,恰好存在一個 x 與矩陣中的兩個成員相等。
除上述的兩個之外,對于所有滿足1 <= x <= n * n 的 x ,都恰好存在一對 i, j 滿足 0 <= i, j <= n - 1 且 grid[i][j] == x

  • 最簡單的,用數組統計每個數出現的次數,然后遍歷數組即可
  •   public int[] findMissingAndRepeatedValues(int[][] grid) {int n = grid.length;int[] res = new int[2];int[] temp = new int[n * n + 1];for(int[] g : grid){for(int x : g){temp[x]++;}}for(int i = 1; i < temp.length; i++){if(temp[i] == 0)res[1] = i;else if(temp[i] == 2)res[0] = i;}return res;}
    
  • 數學方法:由于 a 出現兩次,b 出現 0 次,所以當所有數相加時會得到 1+2+…+n + a - b,也就是說把數組中的所有數相加減去 1~n2 之和就能得到 d1 = a - b 。將所有數的平方和相加也是同理,減去 1~n2 的平方后就會剩下 d2 = a2-b2=(a+b)(a-b),最終我們可以得到 a - b = d1, a + b = d2 / d1,那么 a 和 b 就很容易計算了
  • 令 m = n2 1 ? m 之和 = m ( 1 + m ) 2 { 1 - m 之和=\frac {m(1+m)} 2} 1?m之和=2m(1+m)?
  • 1 ? m 的平方和 = m ( m + 1 ) ( 2 m + 1 ) 6 { 1 - m 的平方和=\frac {m(m+1)(2m+1)} 6} 1?m的平方和=6m(m+1)(2m+1)?
  •   public int[] findMissingAndRepeatedValues(int[][] grid) {int n = grid.length;int m = n * n;int[] res = new int[2];int d1 =  -m * (1 + m) / 2;long d2 = (long) -m * (m + 1) * (2 * m + 1) / 6;for(int[] row : grid){for(int x : row){d1 += x;d2 += x * x;}}int d = (int) (d2 / d1);res[0] = (d + d1) / 2;res[1] = (d - d1) / 2;return res;}
    
  • 位運算:如果我們額外加入 1 ~ m,最終會得到一個數出現 1 次,一個數出現 3 次,其余數出現兩次,而異或后出現 1 次和出現 3 次是一樣,即這些數的異或和就為 a^b,那么就相當于第 260 題了,從一堆出現兩次的數字中找到只出現一次的兩個數字。
  • 額外計算 1 到 n2 的異或和時,可以不遍歷 1 ~ n 而用 O(1) 的計算公式
    的異或和
  •   public int[] findMissingAndRepeatedValues(int[][] grid) {int n = grid.length;int m = n * n;int or = 0;for(int[] row : grid){for(int x : row){or ^= x;}}or ^= n % 2 > 0 ? 1 : m;// 計算 or 最低位的 1 后面有幾個 0// 下面會根據右移 one 位來分組// 其實核心思想還是根據 or 中為 1 的某一位來分類// 所以也可以按照第 260 題的寫法令 one 為 xx1x// 下面分組就能按照 x & one 是否等于 0 來分組int one = Integer.numberOfTrailingZeros(or);int[] res = new int[2];// 以下兩個循環都是為了把數組中的數以及額外的 1~m 按照// 對應于 one 的那一位為 0 還是 1 分類異或進結果數組// 反正重復的數都會被異或掉,所以最終數組會剩下 a 和 bfor(int x = 1; x <= m; x++){res[(x >> one) & 1] ^= x;}for(int[] row : grid){for(int x : row){res[(x >> one) & 1] ^= x;}}// 由于我們無法區分 res 中哪個是 a 哪個是 b// 所以我們根據數組中只存在 a 沒有 b 來判斷// 如果數組中某個數等于 res[0] 說明 res[0] 就是 a// 那么可以直接返回for (int[] row : grid) {for (int x : row) {if (x == res[0]) {return res;}}}return new int[]{res[1], res[0]};}
    

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

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

相關文章

輪狀病毒簡介-卡梅德生物

輪狀病毒是一種非常常見的病毒&#xff0c;主要影響嬰幼兒和小孩&#xff0c;引起嚴重的胃腸炎&#xff0c;表現為嚴重腹瀉、嘔吐、發燒和脫水。這種病毒全球流行&#xff0c;是全世界五歲以下兒童因腹瀉導致死亡的主要原因之一。輪狀病毒屬于Reoviridae家族&#xff0c;具有雙…

邏輯回歸【python,機器學習,算法】

邏輯回歸是一種有監督的學習分類算法&#xff0c;用于預測目標變量的概率。目標或因變量的性質是二分法的&#xff0c;這意味著將只有兩個可能的類。主要解決二分類問題。 主要步驟有三個&#xff1a; 求線性回歸曲線。通過 sigmoid 函數將線性回歸曲線轉為 0-1 范圍函數。 …

機器學習-11-使用kaggle命令下載數據集和操作指南

參考kaggle API 命令下載數據集 參考Kaggle操作完整指南(2023版) 參考Kaggle如何入門? 1 kaggle操作指南 Kaggle 是一個流行的數據科學競賽平臺。由 Goldbloom 和 Ben Hamner 創建于 2010 年。為什么這兩個家伙要創立這樣一個平臺呢? 數據科學社區一直有這樣一個難題:對…

低代碼開發平臺(Low-code Development Platform)的模塊組成部分

低代碼開發平臺&#xff08;Low-code Development Platform&#xff09;的模塊組成部分主要包括以下幾個方面&#xff1a; 低代碼開發平臺的模塊組成部分可以按照包含系統、模塊、菜單組織操作行為等維度進行詳細闡述。以下是從這些方面對平臺模塊組成部分的說明&#xff1a; …

docker安裝mysql8和mysql5.7

1.docker安裝mysql5.7,請點擊此鏈接 2.docker安裝mysql8并掛載數據卷 docker pull mysql:8.0 docker run --name mysql8 -e MYSQL_ROOT_PASSWORDmy-secret-pw -d mysql:8.0 docker run --name mysql8 -e MYSQL_ROOT_PASSWORD123456 -v /mqq/mysql8/datadir:/var/lib/mysql -d…

虛擬dom的理解

由普通的js對象來描述dom對象&#xff0c;是對于真實dom的映射&#xff0c;因為不是真實的dom對象所以叫虛擬dom。因為js處理數據的速度比操作dom的速度更快&#xff0c;性能更好&#xff0c;所以讓現代這些react vue 等框架都采用了虛擬dom。 key值是唯一性的,在虛擬dom樹進行…

【喜報】科大睿智服務企業通過CMMI3級認證

?北京建投科信科技發展股份有限公司&#xff08;以下簡稱“北京建投科技” &#xff09;前身為北京銀帝科技發展公司&#xff0c;成立于1993年&#xff0c;注冊資本6,000萬元&#xff0c;為中國建銀投資有限責任公司&#xff08;簡稱“中國建投”&#xff09;的成員企業建投華…

現在,所有人都能免費用GPT-4o了!

OpenAI今日官宣&#xff0c;ChatGPT正式向所有用戶免費開放&#xff01;所有用戶均可以訪問定制化GPT、分析圖表、詢問有關照片的問題以及5月初GPT-4o添加的其他功能。 OpenAI今天在X上發布推文&#xff1a; 「所有ChatGPT免費用戶現在都可以使用瀏覽、視覺、數據分析、文件上…

element table表格行列合并span-method,根據數據動態行列合并

表格行列合并需要用到 table的方法 span-method 根據數據來進行動態的行列合并&#xff0c;實例如下&#xff1a; <el-table:data"tableData":span-method"objectSpanMethod" style"width: 100%"><el-table-columnprop"key"l…

mac電腦生成文件下載URL

1.首先打開web共享&#xff0c;終端方式。 開始 sudo apachectl start 停止&#xff1a; sudo apachectl stop 重啟&#xff1a; sudo apachectl restart 2.將需要下載的文件 app.v1.6.12_note.apk /Library/WebServer/Documents/ 目錄下 3. 同一網絡下&#xff0c;直接用…

C++系列——————類和對象(上)

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、面向對象的三大特征二、類的引入2.1類的定義 三.類的訪問限定符3.1訪問限定符的介紹3.2.訪問限定符的使用 四、類的作用域五、類的實例化六、類對象模型6.1…

JavaScript的內存管理機制

No.內容鏈接1Openlayers 【入門教程】 - 【源代碼示例300】 2Leaflet 【入門教程】 - 【源代碼圖文示例 150】 3Cesium 【入門教程】 - 【源代碼圖文示例200】 4MapboxGL【入門教程】 - 【源代碼圖文示例150】 5前端就業寶典 【面試題詳細答案 1000】 文章目錄 一、內存…

Pipecat: 創建語音對話agent的開源框架,支持多模態!

項目簡介 pipecat 是用于構建語音&#xff08;和多模態&#xff09;對話代理的框架。諸如私人教練、會議助理、兒童講故事玩具、客戶支持機器人、攝入流程和尖刻的社交伙伴。 看看一些示例應用&#xff1a; 語音代理入門 您可以開始在本地計算機上運行 Pipecat&#xff0c;然…

Nginx(openresty) 開啟目錄瀏覽 以及進行美化配置

1 nginx 安裝 可以參考:Nginx(openresty) 通過lua結合Web前端 實現圖片&#xff0c;文件&#xff0c;視頻等靜態資源 訪問權限驗證&#xff0c;進行鑒權 &#xff0c;提高安全性-CSDN博客 2 開啟目錄瀏覽 location /file{alias /data/www/; #指定目錄所在路徑autoindex on; …

【數學不建模】賽程安排

你所在的年級有5個班&#xff0c;每班一支球隊在同一塊場地上進行單循環賽, 共要進行10場比賽. 如何安排賽程使對各隊來說都盡量公平呢. 下面是隨便安排的一個賽程: 記5支球隊為A, B, C, D, E&#xff0c;在下表左半部分的右上三角的10個空格中, 隨手填上1,2,10, 就得到一個賽程…

【機器學習】之 K-最近鄰(KNN)算法原理及實現

K-最近鄰&#xff08;K-Nearest Neighbors, KNN&#xff09;是一種簡單且直觀的監督學習算法&#xff0c;廣泛應用于分類和回歸任務。本文將介紹KNN算法的基本概念、實現細節以及Python代碼示例。 基本概念 KNN算法的核心思想是&#xff1a;給定一個測試樣本&#xff0c;根據…

上位機圖像處理和嵌入式模塊部署(f407 mcu vs f103)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 對于一部分嵌入式場景來說&#xff0c;f103其實已經足夠了&#xff0c;特別是要求不高的低速場合。如果開發的代碼比較多&#xff0c;還可以選用更…

黑馬es集群

1、為什么要做es集群 單機的elasticsearch做數據存儲&#xff0c;必然面臨兩個問題:海量數據存儲問題、單點故障問題 海量數據存儲問題:將索引庫從邏輯上拆分為N個分片(shard)&#xff0c;存儲到多個節點 單點故障問題:將分片數據在不同節點備份(replica) 2、搭建es集群 1、用…

Python 數據庫編程(Mysql)

目錄 知識點 游標 提交事務 檢索數據 回滾 關閉 增刪改查 查詢 新增 修改 刪除 回滾的用法 知識點 游標 在Python中&#xff0c;數據庫游標&#xff08;cursor&#xff09;是用于執行SQL語句并檢索數據的對象。游標允許你在數據庫中移動并操作數據。在使用Python進…

請說明Vue的filter的理解與用法

Vue.js 的 filter 是一種特殊的功能&#xff0c;允許你在mustache插值 ({{ }}) 或 v-bind 表達式中預處理文本。然而&#xff0c;需要注意的是&#xff0c;從 Vue 2.x 開始&#xff0c;filter 已被標記為廢棄&#xff0c;并且在 Vue 3.x 中已完全移除。盡管如此&#xff0c;了解…