LeetCode熱題100JS(20/100)第四天|?41. 缺失的第一個正數?|?73. 矩陣置零?|?54. 螺旋矩陣?|?48. 旋轉圖像?

??41. 缺失的第一個正數

題目鏈接:41. 缺失的第一個正數

難度:困難

刷題狀態:1刷

新知識:

解題過程

思考

示例 1:

輸入:nums = [1,2,0]
輸出:3
解釋:范圍 [1,2] 中的數字都在數組中。

請你實現時間復雜度為?O(n)?并且只使用常數級別額外空間的解決方案。

重點是不能用這個 nums.sort((a,b)=>a-b),不能排序

注意可能出現重復的數字

搞不出來看答案

題解分析

參考題解鏈接:缺失的第一個正數

第一:當nums[i]>n的時候,不用去考慮

比如nums = [7,8,9,11,12],n=5,排滿的情況下[1,2,3,4,5],所以7,8,9,,,根本不用考慮

第二:假設nums[i]就應該待在nums[nums[i]-1]的位置,

nums[i]是值a,他現在的位置是i,他應該在的位置是nums[i]-1

但是現在在nums[i]-1位置上的是nums[nums[i]-1]值b,要交換ab的值,是值a呆在nums[i]-1位置上

也就是nums[i]=nums[nums[i]-1]

就是說理想的情況是[1,2,3,4],然后出現了[1,1,3,4],那么就可以判斷2是缺失的

詳細分析如下

第三,要用while而不是if,因為被換過來的值b現在待在i位置上,但b應該在的位置是b-1,兩者不一定相等,所以要循環直到經歷過該位置的數字都各歸各位

,代碼如下

var firstMissingPositive = function(nums) {let n=nums.lengthfor(let i=0;i<n;i++){while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){let tmp=nums[nums[i]-1]nums[nums[i]-1]=nums[i]nums[i]=tmp}}for(let i=0;i<n;i++){if(nums[i]!=i+1){return i+1}}return n+1
};

手搓答案(無非廢話版)

var firstMissingPositive = function(nums) {let n=nums.lengthfor(let i=0;i<n;i++){while(nums[i]>0&&nums[i]<=n&&nums[nums[i]-1]!=nums[i]){let tmp=nums[nums[i]-1]nums[nums[i]-1]=nums[i]nums[i]=tmp}}for(let i=0;i<n;i++){if(nums[i]!=i+1){return i+1}}return n+1
};

總結

這題太巧妙了,雖然寫出來就幾行,但邏輯上要拐幾個彎(頭凸)

73. 矩陣置零

題目鏈接:73. 矩陣置零

難度:中等

刷題狀態:1刷

新知識:

解題過程

思考

示例 1:

輸入:matrix = [[1,1,1],[1,0,1],[1,1,1]]
輸出:[[1,0,1],[0,0,0],[1,0,1]]

寫出來了,速度很慢

/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var setZeroes = function(matrix) {let mm=[],nn=[],mok=0for(let m=0;m<matrix.length;m++){for(let n=0;n<matrix[m].length;n++){if(!matrix[m][n]){mm.push(m)nn.push(n)}}}for(let m=0;m<matrix.length;m++){mok=0for(let i of mm){if(m==i){let mok=1for(let n=0;n<matrix[m].length;n++){matrix[m][n]=0}break}}if(!mok){for(let n=0;n<matrix[m].length;n++){for(let j of nn){if(n==j){matrix[m][n]=0}}}}}
};
題解分析

參考題解鏈接:矩陣置零

改進的點主要在,建立row和col,直接表示二維數組,這樣在第二遍循環賦值的時候就直接判斷row,col就行

/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var setZeroes = function(matrix) {let m=matrix.length,n=matrix[0].lengthlet row=Array(m).fill(1)let col=Array(n).fill(1)for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(!matrix[i][j]){row[i]=0col[j]=0}}}for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(row[i]==0||col[j]==0){matrix[i][j]=0}}}
};

手搓答案(無非廢話版)

/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var setZeroes = function(matrix) {let m=matrix.length,n=matrix[0].lengthlet row=Array(m).fill(1)let col=Array(n).fill(1)for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(!matrix[i][j]){row[i]=0col[j]=0}}}for(let i=0;i<m;i++){for(let j=0;j<n;j++){if(row[i]==0||col[j]==0){matrix[i][j]=0}}}
};

總結

?不難,多刷多記

?54. 螺旋矩陣

題目鏈接:???????54. 螺旋矩陣

難度:中等

刷題狀態:1刷

新知識:

解題過程

思考

示例 1:

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[1,2,3,6,9,8,7,4,5]

我的理解是,每次第一行的數值遍歷完之后,剩下的數組進行轉置,(456789長方體逆時針旋轉90°)然后下一次循環遍歷還是從新的數組的第一行開始

一遍過哈哈!

題解分析

參考題解鏈接:螺旋矩陣

手搓答案(無非廢話版)

/*** @param {number[][]} matrix* @return {number[]}*/
var spiralOrder = function(matrix) {let res=[]let n=matrix.length*matrix[0].lengthwhile(res.length<n){for(let i=0;i<matrix[0].length;i++){res.push(matrix[0][i])}matrix.shift()if(res.length<n) matrix=zzh(matrix)}return res
};
function zzh(ma){let rows=ma.lengthlet cols=ma[0].lengthlet trans=[]for(let i=0;i<cols;i++){trans[i]=[]for(let j=0;j<rows;j++){trans[i][j]=ma[j][cols-1-i]}}return trans
}

總結

?由轉置矩陣的代碼要知道是怎么寫的,先生成cols個[[],[],[],,,,]空子集,再往里面賦值

????????48. 旋轉圖像

題目鏈接:???????48. 旋轉圖像

難度:中等

刷題狀態:1刷

新知識:

解題過程

思考

示例 1:

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[[7,4,1],[8,5,2],[9,6,3]]

你必須在?原地?旋轉圖像,這意味著你需要直接修改輸入的二維矩陣。請不要?使用另一個矩陣來旋轉圖像。

這題是順時針旋轉90°

1現在在[0,0],應該在[0,2]? ? ? ? 2現在在[0,1],應該在[1,2]? ? ? ? 3現在在[0,2],應該在[2,2]

4現在在[1,0],應該在[0,1]? ? ? ? 5現在在[1,1],應該在[1,1]? ? ? ? 6現在在[1,2],應該在[2,1]

7現在在[2,0],應該在[0,0]? ? ? ? 8現在在[2,1],應該在[1,0]? ? ? ? 9現在在[2,2],應該在[2,0]

找規律

發現matrix[i][j]=matrix[n-1-j][i]

但我沒寫出來,看答案

題解分析

參考題解鏈接:旋轉圖像

舉個例子吧

開始循環的時候,

7到1的位置00了,matrix[i][j]=matrix[n-1-j][i]

然后9應該到7的位置20,matrix[n-1-j][i]=matrix[n-1-i][n-1-j]

然后3應該到9的位置22,matrix[n-1-i][n-1-j]=matrix[j][n-1-i]

然后1應該到3的位置02,matrix[j][n-1-i]=matrix[i][j]

至此一次循環完成,可以理解為從外到內每次完成第一排(n+1)/2個元素(0,1)的旋轉交換位置,然后第二排(n+1)/2個元素,直到第n/2排,

或者也可以理解為每次完成第一排n/2個元素的旋轉交換位置,然后第二排n/2個元素,直到第(n+1)/2排,

所以

/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var rotate = function(matrix) {let n=matrix.lengthfor(let i=0;i<Math.floor(n/2);i++){for(let j=0;j<Math.floor((n+1)/2);j++){let tmp=matrix[i][j]matrix[i][j]=matrix[n-1-j][i]matrix[n-1-j][i]=matrix[n-1-i][n-1-j]matrix[n-1-i][n-1-j]=matrix[j][n-1-i]matrix[j][n-1-i]=tmp}}
};

手搓答案(無非廢話版)

/*** @param {number[][]} matrix* @return {void} Do not return anything, modify matrix in-place instead.*/
var rotate = function(matrix) {let n=matrix.lengthfor(let i=0;i<Math.floor((n+1)/2);i++){for(let j=0;j<Math.floor(n/2);j++){let tmp=matrix[i][j]matrix[i][j]=matrix[n-1-j][i]matrix[n-1-j][i]=matrix[n-1-i][n-1-j]matrix[n-1-i][n-1-j]=matrix[j][n-1-i]matrix[j][n-1-i]=tmp}}
};

總結

?注意上面i,j的不同,i,j都是相對于當前的mat

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

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

相關文章

e2studio開發RA2E1(17)---- ADC掃描多通道采樣

e2studio開發RA2E1.17-- ADC掃描多通道采樣 概述視頻教學樣品申請硬件準備參考程序源碼下載ADC屬性配置回調函數主程序演示結果 概述 在嵌入式系統中&#xff0c;ADC&#xff08;模數轉換器&#xff09;是一個非常重要的組件&#xff0c;它將模擬信號轉換為數字信號。為了提高…

FPGA標準庫-Open Logic

在現代技術發展的浪潮中&#xff0c;開源項目已經成為了推動技術創新和發展的核心力量。無論是人工智能、區塊鏈、云計算&#xff0c;還是傳統的嵌入式開發、操作系統&#xff0c;開源項目都在其中扮演著至關重要的角色。它們不僅促進了技術的快速迭代&#xff0c;也為全球開發…

FineReport 操作注意

1.父單元格重復的時候&#xff0c;如何取消合并 效果如下&#xff1a; 只需要在單元格中&#xff0c;將數據設置為【列表】即可。 2.待定

開源之夏經驗分享|Koupleless 社區黃興抗:在開源中培養工程思維

開源之夏經驗分享&#xff5c;Koupleless 社區黃興抗&#xff1a;在開源中培養工程思維 文|黃興抗 電子信息工程專業 Koupleless 社區貢獻者 就讀于南昌師范學院&#xff0c;電子信息工程專業的大三學生。 本文 2634 字&#xff0c;預計閱讀 7? 分鐘? 今天 SOFAStack 邀…

Ollama存在安全風險的情況通報及解決方案

據清華大學網絡空間測繪聯合研究中心分析&#xff0c;開源跨平臺大模型工具Ollama默認配置存在未授權訪問與模型竊取等安全隱患。鑒于目前DeepSeek等大模型的研究部署和應用非常廣泛&#xff0c;多數用戶使用Ollama私有化部署且未修改默認配置&#xff0c;存在數據泄露、算力盜…

線代[9]|線性代數主要內容及其發展簡史(任廣千《線性代數的幾何意義》的附錄1)

文章目錄 向量行列式矩陣線性方程組二次型 向量 向量又稱為矢量&#xff0c;最初應用與物理學。很多物理量如力、速度、位移以及電場強度、磁感應強度等等都是向量。大約公元前350年前&#xff0c;古希臘著名學者亞里士多德就知道了力可以表示成向量&#xff0c;兩個力的組合作…

H20半精度推理報錯:Floating point exception (core dumped)

Nvidia H20 顯卡在執行bf16&#xff0c;f16推理時程序異常中斷 時間是 2025年3月4日 課題組新到的8卡H20服務器在使用過程中&#xff0c;torch加載模型進行bf16的推理時&#xff0c;出現Floating point exception (core dumped)錯誤 當時一頭霧水&#xff0c;后來苦苦尋找&…

服務是否設置為開機自啟動

在 Linux 系統中&#xff0c;可以通過以下幾種方法檢查服務是否設置為開機自啟動&#xff1a; 方法 1&#xff1a;使用 systemctl 命令&#xff08;適用于 systemd 系統&#xff09; systemctl 是 systemd 系統的命令行工具&#xff0c;用于管理系統服務。以下是具體步驟&…

QT——基于 QListWidget 和 QStackedWidget 的頁面切換

Qt 練習題&#xff1a;基于 QListWidget 和 QStackedWidget 的頁面切換 Qt 練習題&#xff1a;基于 QListWidget 和 QStackedWidget 的頁面切換 題目描述&#xff1a; 請使用 Qt 設計一個窗口&#xff0c;其中包含一個 QListWidget 和一個 QStackedWidget。要求實現以下功能&a…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)示例2: 分頁和排序

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏+關注哦 ?? 目錄 DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)示例2: 分頁和排序??前言??頁面效果??指令…

C語言文件操作學習筆記:從基礎到實踐

在C語言的知識體系中&#xff0c;文件操作是極為關鍵的一環&#xff0c;它賦予了程序存儲和讀取外部數據的能力&#xff0c;對于開發各類實用程序至關重要。近期&#xff0c;借助課程的學習&#xff0c;我對C語言文件操作進行了系統且深入的學習&#xff0c;下面將我的學習心得…

VLM-E2E:通過多模態駕駛員注意融合增強端到端自動駕駛

25年2月來自香港科大廣州分校、理想汽車和廈門大學的論文“VLM-E2E: Enhancing End-to-End Autonomous Driving with Multimodal Driver Attention Fusion”。 人類駕駛員能夠利用豐富的注意語義&#xff0c;熟練地應對復雜場景&#xff0c;但當前的自動駕駛系統難以復制這種能…

第十天-字符串:編程世界的文本基石

在編程的廣闊領域中&#xff0c;字符串是極為重要的數據類型&#xff0c;它就像一座橋梁&#xff0c;連接著人類的自然語言和計算機能夠理解與處理的數字信息。下面&#xff0c;讓我們深入探索字符串的世界。 一、字符串簡介 字符串是由零個或多個字符組成的有序序列&#xff…

《基于HarmonyOS NEXT API 12+,搭建新聞創作智能寫作引擎》

在信息爆炸的時代&#xff0c;新聞行業對于內容生產的效率和質量有著極高的要求。AI技術的發展為新聞創作帶來了新的變革契機&#xff0c;借助AI智能寫作助手&#xff0c;新聞工作者可以快速生成新聞稿件的初稿&#xff0c;大大提高創作效率。本文將基于HarmonyOS NEXT API 12及…

基于STM32的環境監測系統(自制藍牙APP)

目錄 項目概述 實物圖 演示視頻 概述 硬件模塊 原理圖以及PCB 0.96寸OLED屏幕&#xff08;SSD1306&#xff09; CubeMX配置 初始化代碼 MQ-2煙霧傳感器 CubeMX配置 初始化代碼 DHT11溫濕度模塊 驅動代碼 HC-05藍牙模塊 CubeMX配置 ?編輯 空閑中斷回調函數 有…

linux離線安裝ollama并部署deepseek-r1模型 指南

這篇文章主要分為兩部分&#xff1a; (1)離線環境下如何部署Ollama&#xff1b; (2)在離線環境下如何配置大模型&#xff0c;其中這一步又分為&#xff1a; ?1)部署完整的deepseek大模型&#xff0c;如&#xff1a;deepseek-r1:32B; ?2)部署蒸餾版模型&#xff0c;如&#xf…

坐標變換介紹與機器人九點標定的原理

【備注】本文的C#代碼在下面鏈接中可以下載:Opencv的C#九點標定代碼資源-CSDN文庫 https://download.csdn.net/download/qq_34047402/90452336 一、坐標變換的介紹 1.繞原點旋轉的坐標變換 一個點(x,y)繞原點旋轉u度,其旋轉后的坐標(x1,y1)如何計算? 2.繞任意點的坐標變…

大語言模型 智能助手——既能生成自然語言回復,又能在必要時調用外部工具獲取實時數據

示例代碼&#xff1a; import json from langgraph.graph import Graph, END,StateGraph from langchain_core.utils.function_calling import convert_to_openai_function from langchain_community.tools.openweathermap import OpenWeatherMapQueryRun from langchain_core…

FPGA學習(一)——DE2-115開發板編程入級

FPGA學習&#xff08;一&#xff09;——DE2-115開發板編程入級 一、實驗目的 通過 1 位全加器的詳細設計&#xff0c;深入掌握原理圖輸入以及 Verilog 的兩種設計方法&#xff0c;熟悉 Quartus II 13.0 軟件的使用流程&#xff0c;以及在 Intel DE2-115 開發板上的硬件測試過…

中間件專欄之MySQL篇——MySQL事務原理、鎖機制分析

MySQL的事務性也是其重要特性之一。 什么是事務&#xff1a;事務的本質是并發控制的單元&#xff0c;是用戶定義的一個操作序列。這些操作要么都做&#xff0c;要么都不做&#xff0c;是 一個不可分割的工作單位。 目的&#xff1a;事務的目的在于將數據庫從一種一致性狀態轉…