【數據結構與算法】LeetCode 每日三題

如果你已經對數據結構與算法略知一二,現在正在復習數據結構與算法的一些重點知識
-------------------------------------------------------------------------------------------------------------------------
點贊+收藏🌈,每天更新總結文章(多以圖文形式,方便記憶,均為網上搜集資料以及AI)?
-------------------------------------------------------------------------------------------------------------------------
時間:2025/5/23/ 19: 40分
-----------------------------------

種一棵樹最好的機會是十年前,其次是現在
博主鏈接:黎明smaly-CSDN博客
快來參與討論💬,點贊👍、收藏?、分享📤,共創活力社區


一、LeetCode 283.移動零

方法一:

  1. 題目中,要求我們在原數組進行原地操作,所以先排除哈希這些
  2. 一般對于數組的題,要求原地進行的,首先考慮雙指針
  3. 這道題我們采用雙指針,我們定義一個左指針和一個右指針,這里的指針可以采用下標的方式進行,而不是真正意義上的指針變量
  4. 左右指針同時指向第一個元素
  5. 右指針先走,如果碰到0,繼續走++,如果碰到非0,也就是我們要的元素,則將他賦值給左指針對應的元素,左指針才走++
  6. 走到右指針走到結尾為止,這樣,我們就拿到了所有的非0元素,并且相對順序不變
  7. 只不過 后面的元素還不是0,最好我們需要把循環方式把剩下的元素賦值成0

代碼:


時間復雜度:

? ? ? ? ? ? ? ? O(N) N是數組的長度

空間復雜度:

? ? ? ? ? ? ? ? O(1)

二、LeetCode 11.盛最多水的容器

方法一:

  1. 看到跟數組相關的,又是求某個階段最大/最小值問題的,我們可以考慮貪心算法
  2. 我們還是采用雙指針的方式,左,右指針,左指針指向開頭,右指針指向結尾
  3. 此時這兩個指針間,最大可容納水為 min(1,7)*8 = 1*8=8 (按示例圖來的)
  4. 然后我們將這個最大值記錄下來,此時就知道了一個局部解
  5. 移動指針,移動數字小的那個指針,只有數字小的移動,才能找到更大值,不然最大空間一直卡在了數字小的上面,因為有瓶頸
  6. 移動完繼續計算最大可容納水量 min(8, 7) * 7 = 1*7 = 7
  7. 此時又拿到了一個局部解,將其與上一次的進行判斷,大的存到我們定義的最大值變量里面,等下一次判斷繼續用
  8. 不斷這樣循環,如果兩個指針值相同,那么可以隨便移動一個
  9. 直到左右指針重合,此時最大值變量里面存的就是最大可容納水量

代碼:

時間復雜度:

? ? ? ? ? ? ? ? O(N) N是數組長度

空間復雜度:

? ? ? ? ? ? ? ? O(1)

三、LeetCode 15.三數之和

先仔細看題目,明白題意,再做題

方法一:

  1. 如果我們按照暴力枚舉的方式,需要O(N^3)次方時間復雜度,并且我們最后還有去重
  2. 我們尋找新的思路,簡化一些,我們發現題目無非是要求找出數組中三數之和=0的,
    此時就能想到了有一道題叫兩數之和,也是數組的
  3. 我們寫第一層循環,來找第一個數,其余的兩個數我們當作兩數之和這道題來做,
    第一個數找到后,其余兩數之和就是 0-第一個數
  4. 我們首先要對數組進行排序,排序是為了去重,也是為了更好的求兩數
  5. 寫第一層for循環,找到每個三元組的第一個數
    第二層循環 設置左右雙指針,左指針指向第一個數右邊的數也就是i+1,右指針指向尾巴
    ?判斷左指針+右指針是否0-第一個數,如果等于,則找到了第一個三元組
    如果!=0,且大于0-第一個數,則代表值大了,右指針向左移動,因為已經排序過了,右邊的值是最大值,所以它移動一位變小一點
    然后繼續判斷,如果值小了就左指針向右移動一位變大些
  6. 如此下去,就能找到所有的三元組,然后我們要處理去重的問題
    我們在上面的基礎下加一些判斷條件即可,找到一個三元組后,左右指針分別移動到跟當前值相比的非重復值上,去重

代碼:

時間復雜度:

? ? ? ? ? ? ? ? O(N^2)

空間復雜度:

? ? ? ? ? ? ? ? O(logN)?


總結:?

這三道題都是跟雙指針有關的

對于雙指針的使用要熟悉


加油,為了更好的明天!

種一棵樹最好的機會是十年前,其次是現在

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

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

相關文章

深度“求索”:DeepSeek+Dify構建個人知識庫

目錄 前言 環境部署 安裝Docker 安裝Dify 配置Dify 部署知識庫 創建應用 前言 在當今數字化信息爆炸的時代,數據隱私和個性化知識管理成為企業和個人關注的焦點。Dify,作為一款備受矚目的開源 AI 應用開發平臺,為用戶提供了完整的私有…

【Redis8】最新安裝版與手動運行版

目錄 一、直接運行 1. 下載 Redis百度網盤 2. 解壓后直接運行 redis-server.exe?編輯 二、安裝版運行 雙擊 install_redis_service.bat 輸入安裝路徑(請提前創建好安裝路徑)后直接回車?編輯 下一步直接回車即可,因為是使用配置模板…

@Column 注解屬性詳解

提示:文章旨在說明 Column 注解屬性如何在日常開發中使用,數據庫類型為 MySql,其他類型數據庫可能存在偏差,需要注意。 文章目錄 一、name 方法二、unique 方法三、nullable 方法四、insertable 方法五、updatable 方法六、column…

使用Gemini, LangChain, Gradio打造一個書籍推薦系統 (第二部分)

建立向量嵌入數據庫 from langchain_community.document_loaders import TextLoader from langchain_text_splitters import CharacterTextSplitter from langchain.docstore.document import Document from langchain_chroma.vectorstores import Chromaimport vertexai from…

【Go-4】函數

函數 函數是編程中的基本構建塊,用于封裝可重用的代碼邏輯。Go語言中的函數功能強大,支持多種特性,如多返回值、可變參數、匿名函數、閉包以及將函數作為值和類型傳遞。理解和掌握函數的使用對于編寫高效、可維護的Go程序至關重要。本章將詳…

【已解決】HBuilder X編輯器在外接顯示器或者4K顯示器怎么界面變的好小問題

觸發方式:主要涉及DPI縮放問題,可能在電腦息屏有概率觸發 修復方式: 1.先關掉軟件直接更改屏幕縮放,然后打開軟件,再關掉軟件恢復原來的縮放,再打開軟件就好了 2.(不推薦)右鍵HBuilder在屬性里…

spark調度系統核心組件SparkContext、DAGSchedul、TaskScheduler、Taskset介紹

目錄 1. SparkContext2.DAGScheduler3. TaskScheduler4. 協作關系5 TaskSet的定義6. 組件關系說明Spark調度系統的核心組件主要有SparkContext、DAGScheduler和TaskScheduler SparkContext介紹 1. SparkContext 1、資源申請: SparkContext是Spark應用程序與集群管理器(如St…

VSCode+EIDE通過KeilC51編譯,使VSCode+EIDE“支持”C和ASM混編

在使用Keil C51時,要讓Keil C51支持混編則需要在混編的.c文件上右鍵選擇Options for File *(ALTF7),打開選項界面后,在 Properties 頁 勾上 Generate Assembler SRC File 和 Assemble SRC File ,如下圖所示: 這樣設置后…

SQLynx:一款跨平臺的企業級數據庫管理工具

SQLynx 是一款支持跨平臺(Windows、Linux、macOS、Web)的企業級數據庫管理和 SQL 工具,可以提供高效、安全且適配國產化技術棧的數據庫管理解決方案。 數據源 SQLynx 支持連接各種關系型數據庫、非關系型數據庫以及大數據平臺,包…

實戰項目8(實訓)

目錄 項目01 【sw1】配置 【sw2】配置 任務結果截圖 項目02 【sw1】配置 【sw2】配置 任務結果截圖 項目03 【sw1】配置 任務結果截圖 項目04 【sw1】配置 【r1】配置 任務結果截圖 項目05 【r1】配置 【r2】配置 【r3】配置 任務結果截圖 項目06 【r1】…

TCP為什么是三次握手,而不是二次?

為什么需要三次握手? 想象一下,你要給遠方的朋友寄一份重要文件。你會怎么做? 普通人的做法: 直接扔進郵箱,祈禱別丟了 聰明人的做法: 先打電話確認地址,再發快遞,最后確認收到 T…

dubbo使用nacos作為注冊中心配置

<dubbo:registry protocol"nacos" address"${dubbo.registry.address.nacos}" /> <dubbo:metadata-report address"${dubbo.metadata-report.address}"/> 如果有多個地址&#xff0c;這塊如何配置呢&#xff1f; nacos://ip:端口?…

教師角色的轉變:從知識傳授者到學習引導者

教師角色的轉變&#xff1a;從知識傳授者到學習引導者 隨著人工智能&#xff08;AI&#xff09;和信息技術的迅速發展&#xff0c;教育正在經歷深刻的變革。其中&#xff0c;教師角色的轉變尤為關鍵。傳統上&#xff0c;教師主要承擔“知識傳授者”的職責&#xff0c;即向學生…

PostgreSQL 用戶權限與安全管理

1 系統默認角色 postgres# select rolname from pg_roles; rolname ----------------------------- postgres pg_database_owner pg_read_all_data pg_write_all_data pg_monitor pg_read_all_settings pg_read_all_stats pg_stat_scan_tables …

C++構造函數和析構函數

C++構造函數和析構函數 C++的構造函數和析構函數是類的特殊成員函數,用于對象的創建和銷毀,分別在對象的生命周期開始和結束時自動調用。它們的使用對資源管理和對象的初始化/清理至關重要。 1. 構造函數 定義 構造函數在對象創建時自動調用,用于初始化對象的數據成員。構造…

根據Cortex-M3(STM32F1)權威指南講解MCU內存架構與如何查看編譯器生成的地址具體位置

首先我們先查看官方對于Cortex-M3預定義的存儲器映射 1.存儲器映射 1.1 Cortex-M3架構的存儲器結構 內部私有外設總線&#xff1a;即AHB總線&#xff0c;包括NVIC中斷&#xff0c;ITM硬件調試&#xff0c;FPB, DWT。 外部私有外設總線&#xff1a;即APB總線&#xff0c;用于…

軟件設計師“測試用例”考點分析——求三連

一、測試用例設計核心要點解析 1. 白盒測試覆蓋標準 &#xff08;1&#xff09;路徑覆蓋&#xff1a;需覆蓋程序中所有可能的路徑。如2018年真題路徑覆蓋需要3組測試用例&#xff08;①②、①③、①③④&#xff09;&#xff0c;2020年流程圖則需4個用例覆蓋ace/abd/abe/acd四…

Linux 用戶無法遠程連接服務器

前言 昨天深夜一點多接到客戶電話&#xff0c;客戶說OS用戶下午下班前還能正常登錄。因為晚上一點半需要關閉所有服務進行遷移&#xff0c;但是用戶無法登錄了&#xff0c;導致后續流程無法執行。我讓他先通過root用戶緊急修改了密碼&#xff0c;先保證業務正常流轉。 問題 …

多模態大語言模型arxiv論文略讀(八十八)

MammothModa: Multi-Modal Large Language Model ?? 論文標題&#xff1a;MammothModa: Multi-Modal Large Language Model ?? 論文作者&#xff1a;Qi She, Junwen Pan, Xin Wan, Rui Zhang, Dawei Lu, Kai Huang ?? 研究機構: ByteDance, Beijing, China ?? 問題背景…

svn遷移到git保留記錄和Python字符串格式化 f-string的進化歷程

svn遷移到git保留記錄 and Python字符串格式化(二&#xff09;&#xff1a; f-string的進化歷程 在將項目從SVN遷移到Git時&#xff0c;保留完整的版本歷史記錄非常重要。下面是詳細的步驟和工具&#xff0c;可以幫助你完成這一過程&#xff1a; 安裝Git和SVN工具 首先&#…