【專題刷題】雙指針(四):最接近的三數之和,接雨水

📝前言說明:

  • 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄,按專題劃分
  • 每題主要記錄:(1)本人解法 + 本人屎山代碼;(2)優質解法 + 優質代碼;(3)精益求精,更好的解法和獨特的思想(如果有的話)
  • 文章中的理解僅為個人理解。如有錯誤,感謝糾錯

🎬個人簡介:努力學習ing
📋本專欄:C++刷題專欄
📋其他專欄:C語言入門基礎,python入門基礎,C++學習筆記,Linux
🎀CSDN主頁 愚潤澤

視頻

  • 16. 最接近的三數之和
    • 個人解
    • 優質解:
  • 42.接雨水
    • 個人解
    • 優質解:


16. 最接近的三數之和

在這里插入圖片描述

個人解

思路:和三數之和差不多,這里是最接近的話,只需要使用一個min_diff來記錄差值,ans來記錄答案就可以了。只是這里的雙指針的移動有點區別,每次對當前組合判斷完是否需要替換ans就可以直接移動了
用時:16:30
屎山代碼(通過):

class Solution {
public:int threeSumClosest(vector<int>& nums, int target) {ranges::sort(nums);int ans, n = nums.size();int min_diff = INT_MAX; for(int i = 0; i < n - 2; i++){if(i && nums[i - 1] == nums[i])continue;int x = nums[i];int s = x + nums[i + 1] + nums[i + 2];if(s > target){if(s - target < min_diff){min_diff = target - s;ans = s;}break;}s = x + nums[n-2] + nums[n-1];if(s < target){if(target - s < min_diff){min_diff = target - s;ans = s;}continue;}int j = i + 1, k = n - 1;while(j < k){s = x + nums[j] + nums[k];if(s == target)return target;else if(s > target){if(s - target < min_diff){min_diff = s - target;ans = s;}k--;}else {if(target - s < min_diff){min_diff = target - s;ans = s;}j++;}}}return ans;}
};

時間復雜度:O( n 2 n^2 n2)
空間復雜度:O(1)


優質解:

無,主要借鑒別人的代碼優化部分。


42.接雨水

在這里插入圖片描述

個人解

思路:

  • 裝水一定是由短邊決定
  • 我們把每一個格子都看做是一個容器
  • 一個格子能裝多少水,是由短邊和自身柱子的高度決定的,即短邊高 - 自身柱子高
  • 但是這個短邊不是指格子旁邊的短邊,是指左側最高邊和右側最高邊之間較短的那一個
  • 為什么是最高邊?因為最高邊一定能把里面的水都圍住,沒有水能流出去。

具體代碼實現:

  • left指向左邊的柱子,right指向右邊的柱子,用left_max指向左側的最高邊,right_max指向右側的最高邊。
  • 每次裝水裝的是短邊的那邊的格子的水。
  • 一個格子的裝水量v = min(left_max, right-max) - 該格子柱子高度
  • 哪邊裝完水哪邊就移動。

用時:22:40
屎山代碼(通過):

class Solution {
public:int trap(vector<int>& height) {int left = 0, ans = 0, right = height.size() - 1, left_max = 0, right_max = 0;while(left < right){left_max = max(left_max, height[left]);right_max = max(right_max, height[right]);if(left_max < right_max){ans += left_max - height[left];left++; }else{ans += right_max - height[right];right--;}}return ans;}
};

時間復雜度:O(n)
空間復雜度:O(1)


優質解:

我還是把我的思路畫出來吧。

理解1
接水量一定由短邊決定,如圖:
在這里插入圖片描述

理解2
假如,左側的邊短于右側的邊,則往里面走,裝水量一定由左側的最長邊決定,如圖:
在這里插入圖片描述


🌈我的分享也就到此結束啦🌈
要是我的分享也能對你的學習起到幫助,那簡直是太酷啦!
若有不足,還請大家多多指正,我們一起學習交流!
📢公主,王子:點贊👍→收藏?→關注🔍
感謝大家的觀看和支持!祝大家都能得償所愿,天天開心!!!

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

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

相關文章

chili3d調試筆記3 加入c++ 大模型對話方法 cmakelists精讀

加入 #include <emscripten/bind.h> #include <emscripten/val.h> #include <nlohmann/json.hpp> 怎么加包 函數直接用emscripten::function&#xff0c;如&#xff1a; emscripten::function("send_to_llm", &send_to_llm); set (CMAKE_C…

[Redis]1-高效的數據結構P2-Set

按照慣例&#xff0c;先丟一個官網文檔鏈接。 上篇我們已經了解了高效的數據結構P1-String與Hash。 這篇&#xff0c;我們繼續來了解Redis的 Set 與 Sorted set。 目錄 有序集合 Sorted set底層實現 集合 Set總結資料引用 有序集合 Sorted set Redis 有序集合是一組唯一的字符…

Python + Playwright:使用正則表達式增強自動化測試

Python + Playwright:使用正則表達式增強自動化測試 前言一、 為什么選擇正則表達式?二、 Playwright 中集成正則表達式:途徑與方法三、 實戰應用:正則表達式解決典型測試難題場景 1:定位 ID 或 Class 包含動態部分的元素場景 2:驗證包含可變數字或文本的提示信息場景 3:…

VASP 6.4.1 Ubuntu系統編譯安裝手冊

VASP 6.4.1 Ubuntu系統編譯安裝手冊 &#xff08;基于Ubuntu 22.04 LTS&#xff0c;適用x86_64架構&#xff09; 文章目錄 VASP 6.4.1 Ubuntu系統編譯安裝手冊第一章 系統環境深度配置1.1 硬件兼容性驗證1.2 操作系統環境準備1.3 數學庫深度優化配置 第二章 編譯環境深度調優2…

uniapp h5接入地圖選點組件

uniapp h5接入地圖選點組件 1、申請騰訊地圖key2、代碼接入2.1入口頁面 &#xff08;pages/map/map&#xff09;templatescript 2.2選點頁面&#xff08;pages/map/mapselect/mapselect&#xff09;templatescript 該內容只針對uniapp 打包h5接入地圖選點組件做詳細說明&#x…

java輸出、輸入語句

先創建一個用于測試的java 編寫程序 #java.util使java標準庫的一個包&#xff0c;這里拉取Scanner類 import java.util.Scanner;public class VariableTest {public static void main(String[] args) {#創建一個 Scanner 對象Scanner scanner new Scanner(System.in);System.…

AI Agents系列之構建多智能體系統

&#x1f9e0; 向所有學習者致敬&#xff01; “學習不是裝滿一桶水&#xff0c;而是點燃一把火。” —— 葉芝 我的博客主頁&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 歡迎點擊加入AI人工智能社區&#xff01; &#x1f680; 讓我們一起努力&#xff0c;共創…

04.Spring 框架注解體系詳解

Spring 框架注解體系詳解 本文詳細介紹 Spring、Spring Boot 及 Spring Cloud 中常用注解的用途、生命周期及使用方式&#xff0c;幫助開發者更深入理解 Spring 注解驅動編程模式。 參考來源&#xff1a;Spring、SpringMVC、SpringBoot、SpringCloud 框架常用注解說明 目錄 注…

手撕STL——vector

目錄 引言 1&#xff0c;了解 STL 中的 vector 2&#xff0c;先來一個簡易版跑起來 2_1&#xff0c;構造函數 2_2&#xff0c;擴容reserve&#xff08;&#xff09; 2_3&#xff0c;push_back&#xff08;&#xff09; 2_4&#xff0c;pop_back&#xff08;&#xff09; …

優恩-具備浪涌保護功能的固態繼電器UNRD0610-無觸點開關器件?

MOSFET固態繼電器 : 最高負載電壓&#xff1a;60V 最大負載電流&#xff1a;10A 快速響應時間&#xff1a;≤1ms 低驅動電流&#xff1a;≤10mA 高絕緣性&#xff0c;輸入輸出間隔離電壓&#xff1a;AC3000V 耐脈沖浪涌沖擊能力強 符合IEC 61000-4-2 ESD標準&#xff1a…

Kaamel隱私與安全分析報告:Microsoft Recall功能評估與風險控制

本報告對Microsoft最新推出的Recall功能進行了全面隱私與安全分析。Recall是Windows 11 Copilot電腦的專屬AI功能&#xff0c;允許用戶以自然語言搜索曾在電腦上查看過的內容。該功能在初次發布時因嚴重隱私和安全問題而備受爭議&#xff0c;后經微軟全面重新設計。我們的分析表…

Kotlin協程Semaphore withPermit約束并發任務數量

Kotlin協程Semaphore withPermit約束并發任務數量 import kotlinx.coroutines.* import kotlinx.coroutines.sync.Semaphore import kotlinx.coroutines.sync.withPermit import kotlinx.coroutines.launch import kotlinx.coroutines.runBlockingfun main() {val permits 1 /…

鴻蒙語言基礎

準備工作 去鴻蒙官網下載開發環境 點擊右側預瀏覽&#xff0c;刷新和插銷按鈕&#xff0c;插銷表示熱更新&#xff0c;常用按鈕。 基礎語法 string number boolean const常量 數組 let s : string "1111"; console.log("string", s);let n : number …

C++數據結構與二叉樹詳解

前言&#xff1a; 在C編程的世界里&#xff0c;數據結構是構建高效程序的基石&#xff0c;而二叉樹則是其中最優雅且應用廣泛的數據結構之一。本文將帶你深入理解二叉樹的本質、實現與應用&#xff0c;助你在算法設計中游刃有余。 一、二叉樹的基本概念 1. 什么是二叉樹 二叉樹…

淺析數據庫面試問題

以下是關于數據庫的一些常見面試問題: 一、基礎問題 什么是數據庫? 數據庫是按照數據結構來組織、存儲和管理數據的倉庫。SQL 和 NoSQL 的區別是什么? SQL 是關系型數據庫,使用表結構存儲數據;NoSQL 是非關系型數據庫,支持多種數據模型(如文檔型、鍵值對型等)。什么是…

piamon實戰-- 如何使用 Paimon 的 Java API 實現數據的點查

簡介 Apache Paimon(原 Flink Table Store)是一款基于流批一體架構的 ??高性能數據湖存儲框架??,支持低延遲的數據更新、實時查詢和高效的鍵值點查(Point Lookup)。 本文將深入解析 Paimon 的點查機制,并通過 Java API 代碼案例演示如何實現數據的點查功能。 一、Pai…

社交媒體時代的隱私憂慮:聚焦Facebook

在數字化時代&#xff0c;社交媒體平臺已成為人們日常生活的重要組成部分。Facebook作為全球最大的社交媒體之一&#xff0c;擁有數十億用戶&#xff0c;其對個人隱私的影響和憂慮也日益凸顯。本文將探討社交媒體時代下&#xff0c;尤其是Facebook平臺上的隱私問題。 數據收集…

問題:el-tree點擊某節點的復選框由半選狀態更改為全選狀態以后,點擊該節點展開,懶加載出來子節點數據以后,該節點又變為半選狀態

具體問題場景&#xff1a; 用戶點擊父節點復選框將其從半選變為全選&#xff08;此時子節點尚未加載&#xff09;。 點擊節點展開觸發懶加載&#xff0c;加載子節點。 子節點加載后&#xff0c;組件重新計算父節點狀態&#xff0c;發現并非所有子節點被選中&#xff0c;因此父節…

FastGPT安裝前,系統環境準備工作?

1.啟用適用于 Linux 的 Windows 子系統 方法一&#xff1a;打開控制面板 -> 程序 -> 啟用或關閉Windows功能->勾選 “適用于Linux的Vindows子系統” 方法二&#xff1a;以管理員身份打開 PowerShell&#xff08;“開始”菜單 >“PowerShell” >單擊右鍵 >“…

網頁端調用本地應用打開本地文件(PDF、Word、excel、PPT)

一、背景原因 根據瀏覽器的安全策略&#xff0c;在網頁端無法直接打開本地文件&#xff0c;所以需要開發者曲線救國。 二、實現步驟 前期準備&#xff1a; 確保已安裝好可以打開文件的應用軟件&#xff0c;如&#xff0c;WPS&#xff1b; 把要打開的文件統一放在一個文件夾&am…