藍橋杯最后十天沖刺 day 2 雙指針的思想

雙指針思想介紹

雙指針(Two Pointers)是一種在數組或鏈表等線性結構中常用的算法技巧,通過使用兩個指針(索引或引用)以不同的速度或方向遍歷數據結構,從而高效解決問題。雙指針通常用于優化暴力解法,將時間復雜度從 O(n2) 降低到 O(n) 或 O(n log n)。

常見應用場景:
  1. ?快慢指針:用于鏈表中的環檢測、找中點等(如快指針每次走兩步,慢指針走一步)。
  2. ?左右指針:用于有序數組的兩數之和、反轉數組等(如一個指針從左向右,另一個從右向左)。
  3. ?滑動窗口:通過調整兩個指針的間隔解決子數組/子串問題(如最小覆蓋子串)。

藍橋杯中的雙指針題目示例

以下是藍橋杯競賽中可能用到雙指針思想的題目及其解法思路:

1. ?兩數之和(有序數組)?
  • ?題目描述:給定一個升序排列的數組和一個目標值,找到數組中兩個數的和等于目標值,返回它們的索引。
  • ?雙指針解法
    • 初始化左指針?left = 0,右指針?right = len(nums) - 1
    • 比較?nums[left] + nums[right]?與目標值:
      • 若和等于目標值,返回結果;
      • 若和小于目標值,left++(需要更大的數);
      • 若和大于目標值,right--(需要更小的數)。
  • ?時間復雜度:O(n)。
def twoSum(nums, target):left, right = 0, len(nums) - 1while left < right:s = nums[left] + nums[right]if s == target:return [left, right]elif s < target:left += 1else:right -= 1return []
2. ?三數之和(去重)?
  • ?題目描述:找到數組中所有不重復的三元組,滿足?a + b + c = 0
  • ?雙指針解法
    • 先排序數組,固定一個數?nums[i],然后用雙指針在?i+1?到末尾尋找兩數之和等于?-nums[i]
    • 需跳過重復值以避免重復解。
  • ?時間復雜度:O(n2)。
 

python

復制

def threeSum(nums):nums.sort()res = []for i in range(len(nums) - 2):if i > 0 and nums[i] == nums[i - 1]:continue  # 去重left, right = i + 1, len(nums) - 1while left < right:s = nums[i] + nums[left] + nums[right]if s < 0:left += 1elif s > 0:right -= 1else:res.append([nums[i], nums[left], nums[right]])while left < right and nums[left] == nums[left + 1]:left += 1  # 去重while left < right and nums[right] == nums[right - 1]:right -= 1  # 去重left += 1right -= 1return res
3. ?盛最多水的容器(貪心+雙指針)?
  • ?題目描述:給定一個數組表示容器的高度,找到兩條線使得它們與 x 軸構成的容器能裝最多的水。
  • ?雙指針解法
    • 初始化?left = 0right = len(height) - 1max_area = 0
    • 每次移動較短的邊(因為移動長邊不可能增加面積)。
  • ?時間復雜度:O(n)。
 

python

復制

def maxArea(height):left, right = 0, len(height) - 1max_area = 0while left < right:area = (right - left) * min(height[left], height[right])max_area = max(max_area, area)if height[left] < height[right]:left += 1else:right -= 1return max_area
4. ?藍橋杯真題示例:日志統計(滑動窗口)?
  • ?題目鏈接:藍橋杯 2018 省賽
  • ?問題描述:給定 N 條日志的點贊時間,統計在任意長度為 D 的時間段內點贊不少于 K 次的帖子。
  • ?雙指針解法
    • 按時間排序后,用滑動窗口(雙指針)統計窗口內的點贊數,若滿足條件則標記帖子。
  • ?代碼片段
     

    python

    復制

    logs = [...]  # 日志數據格式: [(時間, 帖子id), ...]
    logs.sort()
    count = {}  # 記錄當前窗口內各id的點贊數
    res = set()
    left = 0
    for right in range(len(logs)):id = logs[right][1]count[id] = count.get(id, 0) + 1while logs[right][0] - logs[left][0] >= D:count[logs[left][1]] -= 1left += 1if count[id] >= K:res.add(id)

總結

雙指針的核心是通過協同移動兩個指針減少不必要的計算,常用于:

  • 有序數組的搜索(如兩數之和)。
  • 滑動窗口問題(如子串、區間統計)。
  • 鏈表操作(如快慢指針)。

在藍橋杯競賽中,雙指針常與排序、貪心等結合,需注意邊界條件和去重處理。

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

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

相關文章

Axure 使用筆記

1.Axure如何制作頁面彈窗 https://blog.csdn.net/SDTechnology/article/details/143948691 2.axure 怎么點擊按鈕打開新頁面 &#xff08;1&#xff09;新建交互 &#xff08;2&#xff09;單擊是觸發 &#xff08;3&#xff09;選擇打開鏈接 &#xff08;4&#xff09;選擇…

STM32實現一個簡單電燈

新建工程的步驟 建立工程文件夾&#xff0c;Keil中新建工程&#xff0c;選擇型號工程文件夾里建立Start、Library、User等文件夾&#xff0c;復制固件庫里面的文件到工程文件夾工程里對應建立Start、Library、User等同名稱的分組&#xff0c;然后將文件夾內的文件添加到工程分組…

html5炫酷圖片懸停效果實現詳解

html5炫酷圖片懸停效果實現詳解 這里寫目錄標題 html5炫酷圖片懸停效果實現詳解項目介紹技術棧核心功能實現1. 頁面布局2. 圖片容器樣式3. 炫酷懸停效果縮放效果傾斜效果模糊效果旋轉效果 4. 懸停文字效果5. 性能優化6. 響應式設計 項目亮點總結 項目介紹 本文將詳細介紹如何使…

Playwright與Browser Use:領略AI賦能UI自動化測試的魔法魅力

目錄 Browser Use是什么&#xff1f; Playwright簡介 框架設計的核心目標與原則 Playwright 在 UI 自動化測試中的優勢 如何高效攔截錯誤 實現視頻錄制 UI自動化框架設計的挑戰 測試框架的結構與模塊化設計 自動化測試不是銀彈 走進Browser Use 橫空出世的背景與意義…

Uniapp 實現微信小程序滑動面板功能詳解

文章目錄 前言一、功能概述二、實現思路三、代碼實現總結 前言 Uniapp 實現微信小程序滑動面板功能詳解 一、功能概述 滑動面板是移動端常見的交互組件&#xff0c;通常用于在頁面底部展開內容面板。本文將介紹如何使用 Uniapp 開發一個支持手勢滑動的底部面板組件&#xff0…

【FAQ】HarmonyOS SDK 閉源開放能力 —Push Kit(12)

1.問題描述&#xff1a; pushdeviceid的長度是固定的嗎&#xff1f; 解決方案&#xff1a; 在鴻蒙系統中&#xff0c;設備ID的長度是固定的。 2.問題描述&#xff1a; 通過REST API三方推送IM類消息&#xff0c;如何實現應用處于前臺時不展示三方推送通知。 解決方案&…

【小兔鮮】day02 Pinia、項目起步、Layout

【小兔鮮】day02 Pinia、項目起步、Layout 1. Pinia2. 添加Pinia到Vue項目3. 案例&#xff1a;Pinia-counter基礎使用3.1 Store 是什么&#xff1f;3.2 應該在什么時候使用 Store? 4. Pinia-getters和異步action4.1 getters4.2 action如何實現異步 1. Pinia Pinia 是 Vue 的專…

Android學習之計算器app(java + 詳細注釋 + 源碼)

運行結果&#xff1a; 基礎的四則運算&#xff1a; 可能會出現的問題以及解決方法&#xff1a; 問題1&#xff1a;出現多個操作符。 例子&#xff1a;12 解決方法&#xff1a; 在用戶點擊操作符之后&#xff0c;去檢查之前的最后一位&#xff0c;如果最后一位也是操作符的話…

GMap.NET + WPF:構建高性能 ADS-B 航空器追蹤平臺

ADS-B 簡介 ADS - B&#xff08;Automatic Dependent Surveillance - Broadcast&#xff0c;廣播式自動相關監視&#xff09;是一種先進的航空監視技術。它依靠飛機上的機載設備&#xff0c;自動收集諸如飛機的位置、高度、速度、航向等關鍵數據&#xff0c;并周期性地以廣播的…

關于testng.xml無法找到類的問題

問題&#xff1a;testng.xml添加測試類的時候飄紅 解決辦法&#xff1a; 1.試圖通過自動生成testng.xml插件去解決&#xff0c;感覺也不是這個問題&#xff0c;沒有嘗試&#xff1b; 2.以為是創建包的方式不對&#xff0c;重新刪除后新建--還是找不到 想新建類的時候發現從m…

數據在內存中存儲(C語言)

文章目錄 前言一、整數在內存中的存儲1.1 計算機存儲數據的基本單位示例代碼 1.2 無符號整數的存儲1.3 有符號整數的存儲&#xff08;補碼&#xff09;示例代碼 二、大小端字節序和字節序判斷2.1 什么是大小端&#xff1f;示例代碼 2.2 為什么會有大小端&#xff1f;2.3 字節序…

Python爬蟲第2節-網頁基礎和爬蟲基本原理

目錄 一、網頁基礎 1.1 網頁的組成 1.2 網頁的結構 1.3 節點樹及節點間的關系 1.4 選擇器 二、爬蟲的基本原理 2.1 爬蟲概述 2.2 能抓怎樣的數據 2.3 JavaScript 渲染頁面 一、網頁基礎 使用瀏覽器訪問網站時&#xff0c;我們會看到各式各樣的頁面。你是否思考過&…

python-leetcode 64.在排序數組中查找元素的第一個和最后一個位置

題目&#xff1a; 給一個按照非遞減順序排列的整數數組nums,和一個目標值target,請找出給定目標值在數組中的開始位置和結束位置。 如果數組中不存在目標值target,返回[-1,-1] 方法一&#xff1a;二分查找 直觀的思路肯定是從前往后遍歷一遍。用兩個變量記錄第一次和最后一次…

分享一些新版GPT-4o使用方式!能多模態生圖!

目前GPT-4o的整體測評&#xff0c;真的很驚艷。 不知道又有多少人因為OpenAI的這次更新而失業&#xff0c;當然只要AI用得好&#xff0c;會有更多人因之而受益&#xff01;很多人表示不知道怎么用&#xff0c;對于門外漢來說&#xff0c;4o似乎有點高端。 今天就給大家介紹幾…

軟件工程面試題(二十四)

1、連接池的原理 j2ee 服務器啟動時會建立一定數量的池連接,并一直維持不少于此數量的池連接。當客戶端程序需要連接時,吃驅動程序會返回一個未使用的池連接并將其標記為忙。如果當前 沒有空閑連接,池驅動就建立一定新的 連接 2、用javascript編寫腳本小程序,實現點擊全選…

Android:Dialog的使用詳解

Android中Dialog的使用詳解 Dialog&#xff08;對話框&#xff09;是Android中常用的UI組件&#xff0c;用于臨時顯示重要信息或獲取用戶輸入。 1. 基本Dialog類型 1.1 AlertDialog&#xff08;警告對話框&#xff09; 最常用的對話框類型&#xff0c;可以設置標題、消息、…

arinc818 fpga單色圖像傳輸ip

arinc818協議支持的常用線速率如下圖 隨著圖像分辨率的提高&#xff0c;單lane的速率無法滿足特定需求&#xff0c;一種方式是通過多個LANE交叉的去傳輸圖像&#xff0c;另外一種是通過降低圖像的帶寬&#xff0c;即通過只傳單色圖像達到對應的效果 程序架構如下圖所示&#x…

透視投影(Perspective projection)與等距圓柱投影(Equirectangular projection)

一、透視投影 1.方法概述 Perspective projection&#xff08;透視投影&#xff09;是一種模擬人眼觀察三維空間物體時的視覺效果的投影方法。它通過模擬觀察者從一個特定視點觀察三維場景的方式來創建二維圖像。在透視投影中&#xff0c;遠處的物體看起來比近處的物體小&…

三.微服務架構中的精妙設計:服務注冊/服務發現-Eureka

一.使用注冊中心背景 1.1服務遠程調用問題 服務之間遠程調?時, 我們的URL是寫死的 String url "http://127.0.0.1:9090/product/" orderInfo.getProductId(); 缺點&#xff1a; 當更換機器, 或者新增機器時, 這個URL就需要跟著變更, 就需要去通知所有的相關服…

FPGA實現4K MIPI視頻解碼H265壓縮網絡推流輸出,基于IMX317+VCU架構,支持4K60幀,提供工程源碼和技術支持

目錄 1、前言工程概述免責聲明 2、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目我這里已有的 MIPI 編解碼方案我這里已有的視頻圖像編解碼方案 3、詳細設計方案設計框圖FPGA開發板IMX317攝像頭MIPI D-PHYMIPI CSI-2 RX Subsystem圖像預處理Sensor …