每日算法刷題計劃Day5 5.13:leetcode數組3道題,用時1h

11. 26. 刪除有序數組中的重復項(簡單,雙指針)

26. 刪除有序數組中的重復項 - 力扣(LeetCode)

思想:

1.我的思想:
雙指針遍歷+集合儲存已有元素
2.官方思想:
題目條件有序數組刪除重復元素,所以重復元素都是連續存在
同向快慢指針,慢指針指向下一個賦值位置,快指針遍歷尋找不重復元素,即fast[i]!=fast[i-1]時,找到不重復元素,賦值給slow位置,slow++
最終[0,slow)為不重復元素區域,長度為slow
初始條件判斷:數組元素為0直接返回0,讓fast[i-1]有意義

代碼

我的:
c++:

class Solution {
public:int removeDuplicates(vector<int>& nums) {set<int> s;int n = nums.size();int left = 0;for (int right = 0; right < n; ++right) {if (s.find(nums[right]) == s.end()) {nums[left] = nums[right];left++;s.insert(nums[right]);}}return left;}
};

python:

class Solution:def removeDuplicates(self, nums: List[int]) -> int:s = set()n = len(nums)left, right = 0, 0for right in range(n):if nums[right] not in s:s.add(nums[right])nums[left] = nums[right]left += 1return left

官方:
c++:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int n = nums.size();if (n == 0)return 0;int slow = 1;for (int fast = 1; fast < n; ++fast) {if (nums[fast] != nums[fast - 1]) {nums[slow] = nums[fast];slow++;}}return slow;}
};

python:

class Solution:def removeDuplicates(self, nums: List[int]) -> int:n = len(nums)if n == 0:return 0slow = 1for fast in range(1, n):if nums[fast] != nums[fast - 1]:nums[slow] = nums[fast]slow += 1return slow
12. 283. 移動零(簡單,雙指針)

283. 移動零 - 力扣(LeetCode)

思想

1.快慢雙指針,10 27.移除元素 val=0時的特殊情況,且不再是賦值,而是交換

代碼

c++:

class Solution {
public:void moveZeroes(vector<int>& nums) {int n = nums.size();int slow = 0;for (int fast = 0; fast < n; ++fast) {if (nums[fast] != 0) {swap(nums[slow], nums[fast]);slow++;}}}
};

python:

class Solution:def moveZeroes(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)slow = 0for fast in range(n):if nums[fast] != 0:nums[slow], nums[fast] = nums[fast], nums[slow]slow += 1
13. 844. 比較含退格的字符串(簡單,學習,棧,雙指針)

844. 比較含退格的字符串 - 力扣(LeetCode)

思想

1.法一(棧):
最直觀想到遇到’#'號回退,來模擬這一過程,就是,因為是字符串處理,可以直接用字符串當棧
注意:棧要彈出元素時立刻想到判斷棧不為空
2.法二(雙指針):
(1)一個字符是否會被刪掉取決于后面的字符,與前面的字符無關,所以逆序遍歷可以先遇到#號字符從而確定前面的字符是否要被刪掉
(2)目標是比較不會被刪掉的字符,所以用兩個同向逆序指針,i表示當前要比較的不會被刪掉的字符,skip記錄當前遇到的#號字符數量,即要刪除的字符數量,從而確定i的位置,邏輯如下:

  • 遇到#號字符,skip++,i–
  • 未遇到#號字符
    • skip>0,刪除當前字符,i–
    • skip=0,退出尋找i的位置循環
      而總體的遍歷指針是i,遍歷范圍[0,n),尋找i的位置后要判斷是否在范圍內
代碼

法一
c++

class Solution {
public:bool backspaceCompare(string s, string t) {if (build(s) == build(t))return true;return false;}string build(string str) {string res;for (char ch : str) {if (ch != '#')res.push_back(ch);else if (!res.empty())res.pop_back();}return res;}
};

python:

class Solution:def backspaceCompare(self, s: str, t: str) -> bool:if self.build(s) == self.build(t):return Truereturn Falsedef build(self, s: str) -> str:res = ""for ch in s:if ch != "#":res += chelif s:res = res[:-1]return res

1.調用函數要用self.
2.字符串是不可變對象,要用+=
3.刪除最后一個字符為[:-1],因為最后一個end取不到
法二:
c++:

class Solution {
public:bool backspaceCompare(string s, string t) {int i = s.size() - 1, j = t.size() - 1;while (i >= 0 ||j >= 0) { // 一個為空串時,另一個可能前面還有#號可能變成空串int skipS = 0, skipT = 0;while (i >= 0) {if (s[i] == '#') {skipS++;i--;} else if (skipS > 0) {skipS--;i--;} else {break;}}while (j >= 0) {if (t[j] == '#') {skipT++;j--;} else if (skipT > 0) {skipT--;j--;} else {break;}}if (i >= 0 && j >= 0) {if (s[i] != t[j]) {return false;}} else {if (i >= 0 || j >= 0) {return false;}}i--;j--;}return true;}
};

python:

class Solution:def backspaceCompare(self, s: str, t: str) -> bool:i, j = len(s) - 1, len(t) - 1while i >= 0 or j >= 0:skipS, skipT = 0, 0while i >= 0:if s[i] == "#":skipS += 1i -= 1elif skipS > 0:skipS -= 1i -= 1else:breakwhile j >= 0:if t[j] == "#":skipT += 1j -= 1elif skipT > 0:skipT -= 1j -= 1else:breakif i >= 0 and j >= 0:if s[i] != t[j]:return Falseelse:if i >= 0 or j >= 0:return Falsei -= 1j -= 1return True

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

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

相關文章

Transformer 架構在目標檢測中的應用:YOLO 系列模型解析

目錄 Transformer 架構在目標檢測中的應用&#xff1a;YOLO 系列模型解析 一、YOLO 模型概述 二、YOLO 模型的核心架構 &#xff08;一&#xff09;主干網絡 &#xff08;二&#xff09;頸部結構 &#xff08;三&#xff09;頭部結構 三、YOLO 模型的工作原理 &#xf…

一個完整的項目示例:taro開發微信小程序

前一周完成了一個項目&#xff0c;體測成績轉換的工具&#xff0c;沒做記錄&#xff0c;。這次計劃開發一個地圖應用小程序&#xff0c;記錄一下。方便給使用的人。 一、申請微信小程序&#xff0c;填寫相應的信息&#xff0c;取得開發者ID。這個要給騰訊地圖使用的。 二、申…

動態規劃-LCR 166.珠寶的最大價值-力扣(LeetCode)

一、題目解析 frame二維矩陣中每個值代表珠寶的價值&#xff0c;現在從左上角開始拿珠寶&#xff0c;只能向右或向下拿珠寶&#xff0c;到達右下角時停止拿珠寶&#xff0c;要求拿的珠寶價值最大。 二、算法解析 1.狀態表示 我們想要知道的是到達[i,j]為位置時的最大價值&am…

安裝nerdctl和buildkitd腳本命令

#!/bin/bash set -euo pipefail # 檢查是否以root權限運行 if [ "$(id -u)" -ne 0 ]; then echo "錯誤&#xff1a;請使用root權限或sudo運行本腳本" >&2 exit 1 fi # 檢測openEuler系統&#xff08;兼容大小寫&#xff09; detect_distrib…

實現視頻分片上傳 OSS

訪問 OSS 有兩種方式&#xff0c;本文用到的是使用臨時訪問憑證上傳到 OSS&#xff0c;不同語言版本的代碼參考&#xff1a; 使用STS臨時訪問憑證訪問OSS_對象存儲(OSS)-阿里云幫助中心 1.安裝并使用 首先我們要安裝 OSS&#xff1a; npm install ali-oss --save 接著我們…

動態規劃(3)學習方法論:構建思維模型

引言 動態規劃是算法領域中一個強大而優雅的解題方法,但對于許多學習者來說,它也是最難以掌握的算法范式之一。與貪心算法或分治法等直觀的算法相比,動態規劃往往需要更抽象的思維和更系統的學習方法。在前兩篇文章中,我們介紹了動態規劃的基礎概念、原理以及問題建模與狀…

elementplus el-tree 二次封裝支持配置刪除后展示展開或折疊編輯復選框懶加載功能

本文介紹了基于 ElementPlus 的 el-tree 組件進行二次封裝的 TreeView 組件&#xff0c;使用 Vue3 和 JavaScript 實現。TreeView 組件通過 props 接收樹形數據、配置項等&#xff0c;支持懶加載、節點展開/收起、節點點擊、刪除、編輯等操作。組件內部通過 ref 管理樹實例&…

2025年滲透測試面試題總結-安恒[實習]安全工程師(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 安恒[實習]安全工程師 一面 1. 自我介紹 2. 前兩段實習做了些什么 3. 中等難度的算法題 4. Java的C…

網絡編程中的直接內存與零拷貝

本篇文章會介紹 JDK 與 Linux 網絡編程中的直接內存與零拷貝的相關知識&#xff0c;最后還會介紹一下 Linux 系統與 JDK 對網絡通信的實現。 1、直接內存 所有的網絡通信和應用程序中&#xff08;任何語言&#xff09;&#xff0c;每個 TCP Socket 的內核中都有一個發送緩沖區…

TransmittableThreadLocal使用場景

&#x1f680; 為什么要用 TransmittableThreadLocal&#xff1f;一文讀懂線程上下文傳遞問題 在 Java Web 開發中&#xff0c;我們經常用 ThreadLocal 來保存每個請求的用戶信息&#xff0c;例如 userId。但當我們使用線程池或異步方法&#xff08;如 Async&#xff09;時&am…

Milvus(24):全文搜索、文本匹配

1 全文搜索 全文搜索是一種在文本數據集中檢索包含特定術語或短語的文檔&#xff0c;然后根據相關性對結果進行排序的功能。該功能克服了語義搜索的局限性&#xff08;語義搜索可能會忽略精確的術語&#xff09;&#xff0c;確保您獲得最準確且與上下文最相關的結果。此外&…

2000 元以下罕見的真三色光源投影儀:雷克賽恩Cyber Pro1重新定義入門級投影體驗

當性價比遇上技術瓶頸 在 2000元以下的1080P投影儀&#xff0c;單LCD 技術長期主導。而三色光源的DLP和3LCD真1080P都在4000元以上。 單LCD投影為純白光光源&#xff0c;依賴CF濾光膜導致光效低下&#xff0c;普遍存在" 色彩失真 " 等問題。數據顯示&#xff0c;該價…

Maven 下載安裝與配置教程

## 1. Maven 簡介 Maven 是一個項目管理和構建自動化工具&#xff0c;主要用于 Java 項目。Maven 可以幫助開發者管理項目的構建、報告和文檔&#xff0c;簡化項目依賴管理。 ## 2. 下載 Maven 1. 訪問 Maven 官方網站 [https://maven.apache.org/download.cgi](https://maven.…

C# 深入理解類(從類的外部訪問靜態成員)

從類的外部訪問靜態成員 在前一章中&#xff0c;我們看到使用點運算符可以從類的外部訪問public實例成員。點運算符由實 例名、點和成員名組成。 就像實例成員&#xff0c;靜態成員也可以使用點運算符從類的外部訪問。但因為沒有實例&#xff0c;所以最常 用的訪問靜態成員的方…

Java在微服務架構中的最佳實踐:從設計到部署

在2025年的云計算和分布式系統時代&#xff0c;微服務架構已成為構建高可擴展、高可用系統的標準方法&#xff0c;廣泛應用于電商、金融和物聯網等領域。Java憑借其成熟的生態系統、強大的并發支持和跨平臺能力&#xff0c;是微服務開發的首選語言。例如&#xff0c;我們的訂單…

文件讀取漏洞路徑與防御總結

文件讀取漏洞路徑與防御總結 文件讀取漏洞允許攻擊者通過路徑遍歷等手段訪問未授權的文件。以下是Linux和Windows系統中常見敏感路徑的歸納及防御建議&#xff1a; Linux 系統常見敏感路徑 系統關鍵文件&#xff1a; /etc/passwd&#xff1a;用戶賬戶信息&#xff08;可被用來…

react-router基本寫法

1. 創建項目并安裝所有依賴 npx create-react-app react-router-pro npm i 2. 安裝所有的 react router 包 npm i react-router-dom 3. 啟動項目 npm run start router/index.js // 創建路由實例 綁定path elementimport Layout from "/pages/Layout"; import…

uni-app 開發HarmonyOS的鴻蒙影視項目分享:從實戰案例到開源后臺

最近&#xff0c;HBuilderX 新版本發布&#xff0c;帶來了令人興奮的消息——uni-app 現在支持 Harmony Next 平臺的 App 開發。這對于開發者來說無疑是一個巨大的福音&#xff0c;意味著使用熟悉的 Vue 3 語法和開發框架&#xff0c;就可以為鴻蒙生態貢獻自己的力量。 前言 作…

純css實現蜂窩效果

<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>蜂窩效果</title><style>body {margin: 0…

JAVA EE_HTTP

為什么意氣風發的少年&#xff0c;總是聽不進去別人的勸解。 ??????? ??????? ----------陳長生. ?主頁&#xff1a;陳長生.-CSDN博客? &#x1f4d5;上一篇&#xff1a;JAVA EE_網絡原理_數據鏈路層-CSDN博客 1.HTTP 1.1.HTTP是什么 H…