【LeetCode 熱題 100】189. 輪轉數組——(解法一)額外數組

Problem: 189. 輪轉數組
題目:給定一個整數數組 nums,將數組中的元素向右輪轉 k 個位置,其中 k 是非負數。

文章目錄

  • 整體思路
  • 完整代碼
  • 時空復雜度
    • 時間復雜度:O(N)
    • 空間復雜度:O(N)

整體思路

這段代碼旨在解決一個經典的數組問題:旋轉數組 (Rotate Array)。問題要求將一個數組中的元素向右循環移動 k 個位置。例如,將 [1, 2, 3, 4, 5] 向右移動 2 位,結果應為 [4, 5, 1, 2, 3]

該實現采用了一種非常直觀的方法:使用一個額外的數組來輔助完成旋轉。其邏輯步驟清晰明了:

  1. 處理 k

    • 首先,代碼對 k 進行了取模運算 k = k % n。這是非常重要的一步,因為如果 k 大于數組長度 n,旋轉 k 位和旋轉 k % n 位的效果是完全相同的。例如,旋轉 n 位等于沒有旋轉。這可以處理 k 為任意非負整數的情況。
  2. 創建輔助數組

    • 創建一個與原數組 nums 等長的新數組 ans。這個數組將用來臨時存放旋轉后的結果。
  3. 構建旋轉后的數組

    • 算法將原數組 nums 分為兩部分來處理:
      a. k 個元素:這部分元素在旋轉后會移動到新數組的開頭。代碼通過 for (int i = n - k; i < n; i++) 循環,將 nums 的后 k 個元素(從索引 n-kn-1)依次復制到 ans 數組的開頭(從索引 0 開始)。
      b. n-k 個元素:這部分元素在旋轉后會緊跟在上面那部分元素的后面。代碼通過 for (int i = 0; i < n - k; i++) 循環,將 nums 的前 n-k 個元素(從索引 0n-k-1)依次復制到 ans 數組的剩余位置。
    • 一個 cur 指針被用來無縫地追蹤 ans 數組中下一個要填充的位置。
  4. 將結果復制回原數組

    • ans 數組完全構建好后,它里面就存儲了正確的旋轉結果。
    • 最后,通過一個循環 for (int i = 0; i < n; i++),將 ans 數組中的所有元素逐一復制回原數組 nums 中,以滿足題目通常要求的“原地修改”。

總而言之,這是一個邏輯簡單、易于理解但空間效率不高的解法。

完整代碼

class Solution {/*** 將數組 nums 的元素向右循環移動 k 個位置。* @param nums 要旋轉的整數數組* @param k 非負整數,表示移動的位數*/public void rotate(int[] nums, int k) {// 獲取數組的長度int n = nums.length;// 創建一個等長的輔助數組 ans,用于存儲旋轉后的結果int[] ans = new int[n];// cur 指針,用于追蹤在 ans 數組中當前要填充的索引位置int cur = 0;// 步驟 1: 對 k 取模,處理 k >= n 的情況。// 旋轉 k 位和旋轉 k % n 位的效果是一樣的。k = k % n;// 步驟 2: 將原數組的后 k 個元素復制到新數組的開頭// 這部分元素是從索引 n-k 到 n-1for (int i = n - k; i < n; i++) {ans[cur++] = nums[i];}// 步驟 3: 將原數組的前 n-k 個元素復制到新數組的剩余位置// 這部分元素是從索引 0 到 n-k-1for (int i = 0; i < n - k; i++) {ans[cur++] = nums[i];}// 步驟 4: 將新數組 ans 的內容復制回原數組 nums// 以滿足原地修改的要求for (int i = 0; i < n; i++) {nums[i] = ans[i];}}
}

時空復雜度

時間復雜度:O(N)

  1. 取模運算k = k % n 是 O(1) 操作。
  2. 第一個復制循環for (int i = n - k; i < n; i++) 執行 k 次。
  3. 第二個復制循環for (int i = 0; i < n - k; i++) 執行 n-k 次。
    • 這兩個循環合起來,總共對 nums 數組進行了一次完整的遍歷,將元素復制到 ans。總操作次數是 k + (n-k) = n
  4. 第三個復制循環for (int i = 0; i < n; i++) 執行 n 次,將 ans 的內容復制回 nums
  5. 綜合分析
    • 算法總共執行了大約 n + n = 2n 次的元素復制操作。
    • 因此,總的時間復雜度是線性的,即 O(N)

空間復雜度:O(N)

  1. 主要存儲開銷:算法創建了一個名為 ans 的整型數組來作為輔助存儲空間。
  2. 空間大小:該數組的長度與輸入數組 nums 的長度 N 相同。
  3. 其他變量n, cur, k, i 等變量都只占用常數級別的空間,即 O(1)。

綜合分析
算法所需的額外空間主要由輔助數組 ans 決定。因此,其空間復雜度為 O(N)。這是一個非原地(not-in-place)的算法。

【LeetCode 熱題 100】189. 輪轉數組——(解法二)反轉數組

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

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

相關文章

【PyCharm 2025.1.2配置debug】

大家先看下我的配置 1.調試配置 選擇 FastAPI 框架名稱-》 自定義應用程序文件&#xff1a;必須選擇當前項目的main.pyUvicorn 選項&#xff1a;這是啟動命令&#xff0c;有第三步的選擇 main.py 所以只需要–reload即可&#xff0c;如果想自定義啟動端口補充–port xxxxPytho…

Python數據庫軟件:查詢與預測功能集成系統

Python數據庫軟件:查詢與預測功能集成系統 概述 本文將詳細介紹一個具備查詢和模型預測功能的Python數據庫軟件的設計與實現。該系統基于Python開發,使用Excel作為數據存儲格式,包含約15個功能頁面,支持數據管理、查詢分析、模型預測等核心功能。 系統架構 技術棧 核心…

什么是持續集成/持續交付(CI/CD)?

基本概念 CI/CD旨在通過自動化流程提高代碼質量、加快發布速度 CI &#xff08;Continuous Integration&#xff0c;持續集成&#xff09;CD&#xff08;Continuous Delivery/Deployment&#xff0c;持續交付/持續部署&#xff09; CI 持續集成 目標 頻繁加粗樣式將代碼合…

核彈級漏洞

CVE-2025-6018 漏洞介紹&#xff1a; 該漏洞是Linux PAM&#xff08;可插拔認證模塊&#xff09;中的一個本地權限提升漏洞&#xff0c;主要存在于openSUSE Leap 15和SUSE Linux Enterprise 15的PAM配置中。由于PAM規則錯誤地將檢查條件設置為用戶存在SSH或TTY會話&#xff0c…

LabVIEW自動扶梯振動監測

利用LabVIEW開發平臺構建自動扶梯機械振動數據采集系統&#xff0c;實現驅動主機、減速器、梯級等關鍵部位的振動信號實時采集、頻譜分析、數據存儲及故障特征提取。系統通過加速度傳感器與高速數據采集卡的協同工作&#xff0c;結合 LabVIEW 圖形化編程的高效數據處理能力&…

PTA最少交換次數

最少交換次數 分數 15 作者 計科G隊長 單位 重慶大學 長度為N的數組中只有1&#xff0c;2&#xff0c;3三種值&#xff0c;要按升序排序&#xff0c;并且只能通過數值間的兩兩交換實現不能移位。比如某項競賽的優勝者按金銀銅牌排序&#xff0c;或者荷蘭國旗問題都是該問題…

LiteHub中間件之跨域訪問CORS

跨域訪問CORS 原理基本概念簡單請求非簡單請求&#xff08;預檢請求&#xff09; 代碼實現服務器端Cors的關鍵配置服務端解析預檢請求服務端填充響應 抓包分析 原理 基本概念 在瀏覽器安全模型中&#xff0c;同源策略是最重要的安全基石。 一個“域”是由3個要素組成的&#…

FastAPI開發教程

FastAPI 是一個現代、高性能的 Python Web 框架&#xff0c;專為構建 APIs 設計。它基于 Python 類型提示&#xff0c;支持異步編程&#xff0c;并提供自動生成的交互式文檔&#xff08;Swagger UI 和 ReDoc&#xff09;。以下是 FastAPI 開發的核心指南&#xff1a; 1. 安裝 …

基于Spring Boot + MyBatis-Plus + Thymeleaf的評論管理系統深度解析

你好呀&#xff0c;我是小鄒。 個人博客系統日漸完善&#xff0c;現在的文章評論以及留言數量逐漸增多&#xff0c;所以今天重構了管理后臺的評論列表&#xff08;全量查詢 -> 分頁條件搜索&#xff09;。 示例圖 網頁端手機端一、系統架構設計與技術選型 系統采用前后端分離…

sqlmap學習筆記ing(1.Easy_SQLi(時間,表單注入))

題解 根據題目提示&#xff0c;應為SQL注入&#xff0c;題目頁面只有一個表單&#xff0c;用sqlmap進行表單注入。 使用--forms參數進行自動化表單注入&#xff0c;逐步得到flag。 ### 總結參數作用&#xff1a; -u 指定目標URL。 -C 指定列名&#xff08;多個…

SciPy 安裝使用教程

一、SciPy 簡介 SciPy&#xff08;Scientific Python&#xff09;是基于 NumPy 的開源科學計算庫&#xff0c;提供了數值積分、優化、信號處理、線性代數、統計分析等高級科學計算功能。它是構建 Python 科學計算生態系統的核心組件之一&#xff0c;常用于科研、工程、數據分析…

【AI大模型】通義大模型與現有企業系統集成實戰《CRM案例分析與安全最佳實踐》

簡介&#xff1a; 本文檔詳細介紹了基于通義大模型的CRM系統集成架構設計與優化實踐。涵蓋混合部署架構演進&#xff08;新增向量緩存、雙通道同步&#xff09;、性能基準測試對比、客戶意圖分析模塊、商機預測系統等核心功能實現。同時&#xff0c;深入探討了安全防護體系、三…

如何進行需求全周期管理

實現高效的需求全周期管理&#xff0c;應從以下五個方面入手&#xff1a;1、建立系統化需求來源渠道、2、設置清晰的評審與優先級策略、3、加強執行過程的協同與跟蹤、4、閉環需求驗收與上線反饋、5、構建長期的需求知識沉淀機制。 其中&#xff0c;“加強執行過程的協同與跟蹤…

熱傳導方程能量分析與邊界條件研究

題目 問題 10. (a) 考慮熱傳導方程在 J = ( ? ∞ , ∞ ) J = (-\infty, \infty) J=(?∞,∞) 上,證明“能量” E ( t ) = ∫ J u 2 ( x , t ) d x E(t) = \int_{J} u^{2}(x,t) dx E(t)=∫J?u2(x,t)dx (8) 不增加;進一步證明,除非 u ( x , t ) = 常數 u(x,t) = \text{常…

【AI News | 20250702】每日AI進展

AI Repos 1、LLM-RL-Visualized 提供100余張原創架構圖&#xff0c;全面涵蓋了 LLM (大語言模型)、VLM (視覺語言模型) 等大模型技術。內容深度解析了訓練算法&#xff08;如 RL、RLHF、GRPO、DPO、SFT、CoT 蒸餾等&#xff09;、效果優化策略&#xff08;如 RAG、CoT&#xf…

安徽省企業如何做信創產品認證?信創認證流程與費用詳解

安徽省作為長三角一體化發展的重要成員&#xff0c;正大力推進信息技術應用創新&#xff08;信創&#xff09;產業發展。依托合肥“中國聲谷”、蕪湖機器人及智能裝備基地等產業集群&#xff0c;以及省內對信創產業的政策扶持&#xff0c;企業通過信創認證后&#xff0c;能更好…

百度文心 ERNIE 4.5 開源:開啟中國多模態大模型開源新時代

百度文心 ERNIE 4.5 開源&#xff1a;開啟中國多模態大模型開源新時代 隨著DeepSeek-R1的橫空出示&#xff0c;越來越多大公司開始開源模型&#xff0c;像DeepSeek R1發布的時候Kimi同步開源了技術文檔&#xff0c;隨著R1推動著思維鏈推理技術的發展&#xff0c;開源社區也出現…

22、企業項目管理(Project)全體系構建:從基礎框架到智能防呆的完整解決方案

項目管理能力——企業VUCA戰略落地的核心樞紐 在VUCA&#xff08;烏卡時代&#xff0c;即VUCA時代&#xff0c;是指人們生活在一個不穩定性、不確定性、復雜性、模糊性的時代、境況或者世界中。vuca是volatility&#xff08;易變性VUCA&#xff09;&#xff0c;uncertainty&am…

分布式定時任務:Elastic-Job-Lite

Elastic-Job-Lite 是一款由 Apache 開源的輕量級分布式任務調度框架&#xff0c;屬于 ShardingSphere 生態體系的一部分。它專注于分布式任務調度&#xff0c;支持彈性伸縮、分片處理、高可用等特性&#xff0c;且不依賴中心化架構。 一、基礎 &#xff08;一&#xff09;核心特…

記錄一次生產環境ActiveMQ無法啟動的問題

這次遇到一個問題&#xff0c;是ActiveMQ無法啟動的&#xff0c;跟以往的現象不一樣。這次是在服務器重啟后出異常。 1、啟動ActiveMQ時提示&#xff1a;activemq/data/kahadb/db.data&#xff08;輸入輸出錯誤&#xff09;&#xff0c;NotFoundFileException異常 2、想著不應該…