藍橋杯備考------>雙指針(滑動窗口)

來看哈我們這道例題

我們第一種想法應該就是暴力求解,枚舉每個子數組

當我們枚舉第一個數的時候,我們要從第一個數開始挨個枚舉每個結尾

如圖,以第一個數開頭的最長不重復數我們就枚舉完了

然后我們讓兩個指針全部到第二個數

再枚舉第二個數能到達的最長子數組

如圖還是到這就停止了,我們再枚舉第三個數

依舊是到這里停止,我們其實啊,沒必要非得每次枚舉都退回去,我們可以讓l++,直到達到合法的區間之后,再繼續往后枚舉長度

也就是說?當我們到這個狀態的時候,別讓r退回去了,我們讓左指針不斷加加,直到達到一個合法的區間之后,再讓r往后走

這道題,就算我們想用暴力枚舉,我們也用不了的

因為暴力枚舉時間復雜度是N平方,我們會超時的

而滑動窗口時間復雜度只是O(N),我們最差的情況就算l和r把數組都掃描了一遍,此時時間復雜度是N+N? 也就是O(N)

我們再來捋一遍我們滑動窗口的步驟

step1:初始化,l=1 r=1 unordered map<int,int> mp;

step2:進窗口,r指針指向的元素在哈希表++

step3:判斷是否為合法區間 即mp[a[r]]<=1→如果不合法就step5:出窗口 也就是不斷讓mp[a[l]]-- l++,直到mp[a[r]]<=1

step6:已經是合法區間了,我們更新長度

#include <iostream>
#include <unordered_map>
using namespace std;
const int N = 1e6+10;
int a[N];
int n;
int main()
{int T;cin >> T;while(T--){cin >> n;for(int i = 1;i<=n;i++){cin >> a[i];}unordered_map <int,int> mp;int l = 1,r = 1;int ret = 0;while(r<=n){mp[a[r]]++;//進窗口 while(mp[a[r]]>1)//判斷 {mp[a[l]]--;//出窗口 l++;}ret = max(ret,r-l+1);//更新結果 r++;}cout << ret << endl;}return 0;
}

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

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

相關文章

python實現股票數據可視化

最近在做一個涉及到股票數據清洗及預測的項目&#xff0c;項目中需要用到可視化股票數據這一功能&#xff0c;這里我與大家分享一下股票數據可視化的一些基本方法。 股票數據獲取 目前&#xff0c;我已知的使用python來獲取股票數據方式有以下三種: 爬蟲獲取&#xff0c;實現…

【15】Selenium 爬取實戰

一、selenium適用場景 二、爬取目標 三、爬取列表頁 &#xff08;1&#xff09;初始化 &#xff08;2&#xff09;加載列表頁 &#xff08;3&#xff09;解析列表頁 &#xff08;4&#xff09;main 四、爬取詳情頁 &#xff08;1&#xff09;加載詳情頁 &#xff08;2…

如何封裝一個上傳文件組件

#今天用el-upload感到很多不方便&#xff0c;遂決定自己封裝一個。注&#xff1a;本文不提供表面的按鈕樣式和文件上傳成功后的樣式&#xff0c;需要自己創建。本文僅介紹邏輯函數# 1&#xff0c;準備幾個表面用來指引上傳的元素 2&#xff0c;創造統一的隱藏文件上傳輸入框&…

【計網】數據包

期末復習自用的&#xff0c;處理得比較草率&#xff0c;復習的同學或者想看基礎的同學可以看看&#xff0c;大佬的話可以不用浪費時間在我的水文上了 1.數據包的定義&#xff1a; 數據包是網絡通信中的基本單元&#xff0c;它包含了通過網絡傳輸的所有必要信息。數據包的結構…

HTTP抓包Websocket抓包(Fiddler)

近期時常要和各個廠商的java云平臺打交道&#xff1a;登錄、上傳、下載等&#xff0c;程序的日志雖必不可少&#xff0c;但前期調試階段&#xff0c;免不了遇到問題&#xff0c;這時有一個稱手的抓包工具就顯得尤為重要了。 Fiddler Everywhere是一款跨平臺的網絡調試工具&…

Git和GitCode使用(從Git安裝到上傳項目一條龍)

第一步 菜鳥教程-Git教程 點擊上方鏈接&#xff0c;完成Git的安裝&#xff0c;并了解Git 工作流程&#xff0c;知道Git 工作區、暫存區和版本庫的區別 第二步 GitCode官方幫助文檔-SSH 公鑰管理 點擊上方鏈接&#xff0c;完成SSH公鑰設置 第三步&#xff08;GitCode的官方引…

基于 WebAssembly 的 Game of Life 交互實現

一、前言 在前期的實現中&#xff0c;我們使用 Rust 編寫核心邏輯&#xff0c;并通過 WebAssembly 將其引入到 Web 環境中&#xff0c;再利用 JavaScript 進行渲染。接下來&#xff0c;我們將在這一基礎上增加用戶交互功能&#xff0c;使模擬過程不僅能夠自動演化&#xff0c;…

【keil】單步調試

一、步驟 1、打開stc-isp軟件 2.打開keil仿真設置&#xff0c;選擇對應的單片機型號 3.點擊將所選目標單片機設置為仿真芯片&#xff0c;點擊下載&#xff0c;按一下單片機打下載按鈕 4.此時已經將仿真程序下載到單片機 5.此時點擊options,找到debug選擇STC Montor 51 Driv…

c++弱指針實現原理

在 C 中&#xff0c;弱指針&#xff08;std::weak_ptr&#xff09;是一種特殊的智能指針&#xff0c;其核心目標是?解決 std::shared_ptr 的循環引用問題?&#xff0c;同時不增加對象的引用計數。它的實現原理基于與 std::shared_ptr 共享的 ?控制塊&#xff08;Control Blo…

【ManiSkill】環境success條件和reward函數學習筆記

1. “PickCube-v1” info["success"]&#xff1a;用于指示任務是否成功完成 布爾型張量&#xff0c;在環境的evaluate()方法中計算并返回&#xff1a; "success": is_obj_placed & is_robot_static這確保了機器人不僅能將物體準確放置在目標位置&am…

用空閑時間做了一個小程序-二維碼生成器

一直在摸魚中賺錢的大家好呀~ 先向各位魚友們匯報一下情況&#xff0c;目前小程序已經有900的魚友注冊使用過。雖然每天都有新的魚友注冊&#xff0c;但是魚友增長的還很緩慢。自從國慶前的文字轉語音的工具上線到現在已經將近有1個月沒有更新小程序了。但是今天終終終終終于又…

31天Python入門——第14天:異常處理

你好&#xff0c;我是安然無虞。 文章目錄 異常處理1. Python異常2. 異常捕獲try-except語句捕獲所有的異常信息獲取異常對象finally塊 3. raise語句4. 自定義異常5. 函數調用里面產生的異常補充練習 異常處理 1. Python異常 Python異常指的是在程序執行過程中發生的錯誤或異…

PyQt6實例_批量下載pdf工具_使用pyinstaller與installForge打包成exe文件

目錄 前置&#xff1a; 步驟&#xff1a; step one 準備好已開發完畢的項目代碼 step two 安裝pyinstaller step three 執行pyinstaller pdfdownload.py&#xff0c;獲取初始.spec文件 step four 修改.spec文件&#xff0c;將data文件夾加入到打包程序中 step five 增加…

Axure項目實戰:智慧城市APP(完整交互匯總版)

親愛的小伙伴&#xff0c;在您瀏覽之前&#xff0c;煩請關注一下&#xff0c;在此深表感謝&#xff01; 課程主題&#xff1a;智慧城市APP 主要內容&#xff1a;主功能&#xff08;社保查詢、醫療信息、公交查詢等&#xff09;、活動、消息、我的頁面匯總 應用場景&#xff…

Appium Inspector使用教程

1.下載最新版本 https://github.com/appium/appium-inspector/releases 2.本地啟動一個Appium服務 若Android SDK已安裝Appium服務&#xff0c;則在任意terminal使用appium啟動服務即可 3.Appium Inspector客戶端配置連接到Appium服務 Configuring and Starting a Session…

Pycharm(七):幾個簡單案例

一.剪刀石頭布 需求&#xff1a;和電腦玩剪刀石頭布游戲 考察點&#xff1a;1.隨機數&#xff1b;2.判斷語句 import random # numrandom.randint(1,3) # print(num) # print(**30) #1.錄入玩家手勢 playerint(input(請輸入手勢&#xff1a;&#xff08;1.剪刀 2.石頭 3&…

Python Cookbook-4.13 獲取字典的一個子集

任務 你有一個巨大的字典&#xff0c;字典中的一些鍵屬于一個特定的集合&#xff0c;而你想創建一個包含這個鍵集合及其對應值的新字典。 解決方案 如果你不想改動原字典: def sub_dict(somedict,somekeys,default None):return dict([(k, somedict.get(k,default)) for k…

VMware Ubuntu 網絡配置全攻略:從斷網到暢通無阻

一、網絡連接模式選擇&#xff08;先搞懂原理&#xff09; VMware提供三種網絡模式&#xff0c;就像手機的不同網絡套餐&#xff1a; 模式適用場景特點類比NAT個人上網/新手首選虛擬機共享主機IP&#xff0c;能上網但隱身家用WiFi橋接服務器/需要被局域網訪問虛擬機會獲得獨立…

鏈表(C++)

這是本人第二次學習鏈表&#xff0c;第一次學習鏈表是在大一上的C語言課上&#xff0c;首次接觸&#xff0c;感到有些難&#xff1b;第二次是在大一下學習數據結構時&#xff08;就是這次&#xff09;&#xff0c;使用C再次理解鏈表。同時&#xff0c;這也是開啟數據結構學習寫…

【SPP】藍牙串口協議應用層深度解析:從連接建立到實戰開發

目錄 一、SPP應用層協議框架與角色模型 1.1 分層協議棧模型 1.2 設備角色模型&#xff08;DevA 與 DevB 交互&#xff09; 二、連接建立流程&#xff1a;從 SDP 到 RFCOMM 2.1 服務發現&#xff08;SDP&#xff09;流程&#xff08;SDP 記錄關鍵參數&#xff09; 2.2 連接…