用可視化學習逆置法

1.逆置法思路

目標:將這個彩色數組向右旋轉3步

🔴1 → 🟠2 → 🟡3 → 🟢4 → 🔵5 → 🟣6 → ?7

我們希望得到

🔵5 → 🟣6 → ?7 → 🔴1 → 🟠2 → 🟡3 → 🟢4

接下來我們用可視化的方式來描述逆置法的過程。

步驟1:整體大翻轉

想象把整個數組完全倒過來排列:

【原始數組】
🔴1 → 🟠2 → 🟡3 → 🟢4 → 🔵5 → 🟣6 → ?7【把每個數和它對應的位置互換】
?7 ← 🟣6 ← 🔵5 ← 🟢4 ← 🟡3 ← 🟠2 ← 🔴1

步驟2:前三個數字再翻轉

現在,只翻轉前三個數字(K=3):

【當前數組】
?7 → 🟣6 → 🔵5 → 🟢4 → 🟡3 → 🟠2 → 🔴1【把前3個數互換位置】
🔵5 → 🟣6 → ?7 → 🟢4 → 🟡3 → 🟠2 → 🔴1

?第二步完成:前3個數字排序正確了!

步驟3:剩余的四個數字也翻轉

最后,翻轉剩下的4個數字:

【當前數組】
🔵5 → 🟣6 → ?7 → 🟢4 → 🟡3 → 🟠2 → 🔴1【把后4個數互換位置】
🔵5 → 🟣6 → ?7 → 🔴1 → 🟠2 → 🟡3 → 🟢4

第三步完成:所有數字都排序正確了!

最終結果:

🔵5 → 🟣6 → ?7 → 🔴1 → 🟠2 → 🟡3 → 🟢4

2.交換過程

讓我們來看看第一步的交換是如何發生的:

原始:  🔴1  🟠2  🟡3  🟢4  🔵5  🟣6  ?7
位置:   0    1    2    3    4    5    6第一個交換:  🔴1 ? ?7[?7   🟠2  🟡3  🟢4  🔵5  🟣6  🔴1]第二個交換:  🟠2 ? 🟣6[?7   🟣6  🟡3  🟢4  🔵5  🟠2  🔴1]第三個交換:  🟡3 ? 🔵5[?7   🟣6  🔵5  🟢4  🟡3  🟠2  🔴1]最后一個交換: 🟢4 ? 🟢4 (中間元素與自己交換,不變)結果:   [?7   🟣6  🔵5  🟢4  🟡3  🟠2  🔴1]

3.為什么這個方法有效?

把數組想象成兩部分:?

部分A: 🔴1 🟠2 🟡3 🟢4
部分B: 🔵5 🟣6 ?7

我們的目標是交換這兩部分:

部分B + 部分A: 🔵5 🟣6 ?7 🔴1 🟠2 🟡3 🟢4

三步法魔術?

1. 整體翻轉:(A+B)反轉 = B反轉+A反轉

🔴1🟠2🟡3🟢4🔵5🟣6?7 → ?7🟣6🔵5🟢4🟡3🟠2🔴1

?2.前K個翻轉:B反轉再反轉 = B正常

?7🟣6🔵5🟢4🟡3🟠2🔴1 → 🔵5🟣6?7🟢4🟡3🟠2🔴1

?3.后(N-K)個翻轉:A反轉再反轉 = A正常

🔵5🟣6?7🟢4🟡3🟠2🔴1 → 🔵5🟣6?7🔴1🟠2🟡3🟢4

最終得到:B + A 完成!

記憶口訣

📌 全部翻轉 → 📌 前K個翻轉 → 📌 剩余(后N-K個)翻轉 = 🎉 旋轉成功!

這樣,我們就可以得到逆置需要使用的函數了:

翻轉工具函數

// 🛠? 翻轉工具函數
void reverse(int* nums, int start, int end) {while (start < end) {// 🔄 交換兩個位置的積木int temp = nums[start];nums[start] = nums[end];nums[end] = temp;// 👉👈 兩邊向中間移動start++;end--;}
}


?

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

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

相關文章

Cisco Packet Tracer 選項卡的使用

目錄 設備Config選項卡的使用 Realtime and Simulation模式&#xff08;數據包跟蹤與分析&#xff09; 設備Desktop選項卡的使用 設備Config選項卡的使用 Hostname NVRAM Startup Config----Load 加載 INTERFACE 點擊on Save 如果&#xff0c;不把Running Config保存為Sta…

pyqt寫一個單片機配置界面

已經實現以下功能 1.可以選擇單片機架構 2.選擇完單片機架構后第二個框可以選擇常見單片機型號 3.選擇完常見單片機型號后第三個框可以選擇內部資源如adc等&#xff08;可以選擇多個內部資源&#xff09;4.選擇完內部資源如adc等&#xff08;可以選擇多個內部資源&#xff09;后…

丟失的數字 --- 位運算

目錄 一&#xff1a;題目 二&#xff1a;算法原理 三&#xff1a;代碼實現 一&#xff1a;題目 題目鏈接&#xff1a; 268. 丟失的數字 - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理 三&#xff1a;代碼實現 class Solution { public:int missingNumb…

千鋒教育Ansible自動化運維實戰教程從入門到精通

簡介 介紹 Ansible 的基本概念、自動化運維優勢、應用場景及課程目標。 歡迎開啟 Ansible 學習之旅&#xff01; 你好&#xff01;作為一名學習者&#xff0c;你即將通過這個 Ansible 自動化運維實戰 課程&#xff0c;從零開始掌握自動化運維的超能力&#xff01;這個“簡介”…

深入理解 TensorFlow 的模型保存與加載機制(SavedModel vs H5)

深入理解 TensorFlow 的模型保存與加載機制&#xff08;SavedModel vs H5&#xff09; 在使用 TensorFlow 進行模型訓練后&#xff0c;模型的保存與加載是部署、復用和遷移學習的重要環節。TensorFlow 提供了兩種主要的保存格式&#xff1a;SavedModel 和 HDF5 (.h5)。本篇文章…

C++之特殊類設計及類型轉換

目錄 一、設計一個不能被拷貝的類 二、設計一個只能在堆上創建對象的類 三、設計一個只能在棧上創建對象的類 四、設計一個不能被繼承的類 五、設計一個只能創建一個對象的類(單例模式) 六、C語言中的類型轉換 七、C中的三類類型轉換 八、C強制類型轉換 8.1、為什么C需…

制作一款打飛機游戲36:調度編輯器

我們正在創建一個調度編輯器。嗯&#xff0c;這個名字聽起來可能有點奇怪&#xff0c;對吧&#xff1f;但如果你了解射擊游戲中的“調度”&#xff0c;那就是敵人出現的時間表。 你可能已經看到了&#xff0c;我們有一個可以滾動的關卡。現在&#xff0c;我想增加一些交互性&a…

wordperss AI插件:AI圖文+視頻+長尾關鍵詞自動生成,已內置deepseek、kimi全模型,支持簡單一鍵接入更多自定義API

【2.17最新版】Linkreate wordperss AI插件&#xff1a;AI圖文視頻長尾關鍵詞自動生成&#xff0c;已內置deepseek、kimi全模型。 支持自定義接入其它API&#xff0c;包括但不限于騰訊云API和它的deepseek模型 后臺只需要設置對應的API url 、模型 、API key,就可以讓插件調用…

從零開始學Python:開啟編程新世界的大門

在當今數字化時代&#xff0c;Python作為一門簡潔、高效且功能強大的編程語言&#xff0c;受到了越來越多人的喜愛與追捧。無論是數據科學、人工智能、Web開發&#xff0c;還是自動化腳本編寫&#xff0c;Python都展現出了卓越的能力。本文將帶領大家踏上Python學習之旅&#x…

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】3.2 缺失值檢測與處理(NULL值填充/刪除策略)

&#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 &#x1f449; 點擊關注不迷路 文章大綱 缺失值檢測與處理全攻略&#xff1a;NULL值填充與刪除策略實戰3.2 缺失值檢測與處理3.2.1 缺失值類型與業務影響3.2.1.1 缺失值的三種形態3.2.1.2 業務影響分級 3.2.2 缺失值…

Java求職面試:Spring Boot與微服務的幽默探討

Java求職者面試&#xff1a;技術與幽默的碰撞 場景概述 在某互聯網大廠的面試現場&#xff0c;面試官嚴肅認真&#xff0c;程序員則是一個搞笑的水貨角色。面試者名叫張偉&#xff0c;年齡28歲&#xff0c;碩士學歷&#xff0c;擁有5年的Java開發經驗。以下是面試的詳細過程。…

使用 NGINX 實現 HTTP Basic 認證ngx_http_auth_basic_module 模塊

一、前言 在 Web 應用中&#xff0c;對部分資源進行訪問控制是十分常見的需求。除了基于 IP 限制、JWT 驗證、子請求校驗等方式外&#xff0c;最經典也最簡單的一種方式便是 HTTP Basic Authentication。NGINX 提供的 ngx_http_auth_basic_module 模塊支持基于用戶名和密碼的基…

map和set的設計以及紅黑樹的設計

1.map和set的底層是紅黑樹 2.map和set在STL是容器&#xff0c;在我看來&#xff0c;不過也是封裝了平衡二叉搜索樹紅黑樹的適配器 我們先看紅黑樹的設計&#xff0c;看完后map和set的封裝易如反掌 #pragma once #include<utility> #include<iostream> using name…

Linux運維——Vim技巧二

Vim技巧 一、管理多個文件1.1、用緩沖區列表管理打開的文件1.2、用參數列表將緩沖區分組1.3、將工作區切分成窗口1.4、用標簽頁將窗口分組1.5、用:edit命令打開文件1.6、使用:find打開文件1.7、把文件保存到不存在的目錄中 二、動作命令在文檔中移動2.1、區分實際行與屏幕行2.2…

2025 年 408 真題及答案

2025 年 408 真題 歷年408真題及答案下載直通車 1、以下 C 代碼的時間復雜度是多少&#xff1f;&#xff08;&#xff09; int count 0; for (int i0; i*i<n; i)for (int j0; j<i; j)count;A O(log2n)B O(n)C O(nlogn)D O(n2) 2、對于括號匹配問題&#xff0c;符號棧…

【MuJoCo仿真】開源SO100機械臂導入到仿真環境

主要參考&#xff1a;https://github.com/jpata/gym-so100/tree/integration/gym_so100/assets/trs_so_arm100 參考&#xff1a;&#xff08;八&#xff09;lerobot開源項目擴展so100的仿真操控&#xff08;操作記錄&#xff09;_so100機械臂 仿真-CSDN博客 下載&#xff1a;…

Socat 用法詳解:網絡安全中的瑞士軍刀

Socat 用法詳解&#xff1a;網絡安全中的強大工具 引言 socat&#xff08;SOcket CAT&#xff09;是一款功能強大的命令行工具&#xff0c;被譽為“網絡瑞士軍刀”&#xff0c;廣泛應用于數據傳輸、端口轉發和網絡調試等場景。它支持多種協議和數據通道&#xff08;如文件、管…

永磁同步電機控制算法--基于PI和前饋的位置伺服控制

一、原理介紹 永磁同步伺服系統是包含了電流環、速度環和位置環的三環控制系統。 伺服系統通過電流檢測電路和光電編碼器檢測電動機三相繞組電流和轉子位置θ&#xff0c;通過坐標變換&#xff0c;計算出轉矩電流分量iq和勵磁電流分量id。 位置信號指令與實際轉子位置信號的差…

Lucene多種數據類型使用說明

Lucene 作為一款高性能的全文檢索引擎庫&#xff0c;其核心功能圍繞索引和搜索文本數據&#xff0c;但它也支持多種數據類型以滿足復雜的應用場景。以下是 Lucene 支持的主要數據類型及其用途的詳細說明&#xff1a; 1. 文本類型&#xff08;Text&#xff09; 用途&#xff1a;…

Web網頁布局

目錄 一、傳統的DIVCSS布局&#xff08;使用率最高的&#xff09; 1.div傳統的一塊塊轉 2.以貓眼電影為例‘ 3.div布局格式&#xff08;唯一的id屬性&#xff0c;不唯一寫class重復的&#xff09; 3.2總體布局樣式 二、HTML5語義標簽CSS3布局 1.把div改為綠色的語義標簽…