力扣----輪轉數組

題目鏈接:189. 輪轉數組 - 力扣(LeetCode)

b4010cf8716749e2a2ed13d879b6894f.png

?思路一

我們可以在進行每次輪轉的時候,先將數組的最后一個數據的值存儲起來,接著將數組中前n-1個數據依次向后移,最后將存儲起來的值賦給數組中的第一個數據。

先將數組中最后的一個元素的值存到變量tmp中,如下圖

1c868d80560a4d6f9815e4f9eee76315.png

接著將數組中前n-1個數據依次向后移,如下圖?

3a4a9420bb8c4e7f97820d1c10b0af0b.png

最后再將tmp中的值賦值給nums[0],如下圖?

598076daacdc4613bd2011c71e66395f.png

以上圖是表示一次輪轉的,如果還要輪轉,重復上面的操作。

代碼實現

public void rotate(int[] nums, int k) {for(int i=0;i<k;i++){int tmp=nums[nums.length-1];//將前n-1個元素向后移for(int j=nums.length-1;j>0;j--){nums[j]=nums[j-1];}nums[0]=tmp;}}

當我們提交以上代碼時,會發現不成功。

c7610bd1c92a45f98e77915b828ed868.png

思路是對的,但是上面代碼時間復雜度為O(kn),太復雜了,超出了題目的時間限制。?

思路二

造成思路一時間復雜度太大的原因是:?思路一中有兩個循環,一個循環是數組右旋的次數,另一個循環要將數組中的元素全部遍歷一遍,這樣當右旋次數足夠多,數組中的元素很多時,效率就很低了。

思路二是k次旋轉法。

下面以旋轉次數為3來講解,也就是k=3

e7d5aeee82ea4147bc2aad7c2e081bf8.png

先將數組全部旋轉一遍,如下圖

d3684a80c41c420bae6c4aeb997e83b1.png

再以下標為0為起始點和下標為(k%nums.length)-1為終點來旋轉,如下圖

ea23795aec5144ca973daa7870014b78.png

?最后以下標為(K%數組長度)為起始點和以下標為(數組長度-1)為終點來旋轉數組。

f99f77338c5a49ccbc77c94e1fd59c98.png

這樣就完成了數組的3次右旋。

代碼實現

public void reverse(int[] nums,int start,int end){while(start<end){int tmp=nums[start];nums[start]=nums[end];nums[end]=tmp;start++;end--;}}public void rotate(int[] nums, int k) {reverse(nums,0,nums.length-1);reverse(nums,0,(k%nums.length)-1);reverse(nums,k%nums.length,nums.length-1);}

思路三

我們可以創建一個新的數組,將原數組中的數據按照數組旋轉之后的的位置放置到新數組中對應的位置。最后我們再將新數組復制到原數組中就行了。

有一個公式:((i+k)%數組的長度) 的值 是 原數組中下標為i的數據 在 新數組中的位置。

其中i為原數組中數據的小標,k為旋轉次數。?

理解公式:

假如數組向右旋轉k,也就是讓數組中的數據向右移動k個位置,但是如果k大于數組長度,就會越界,所以我們要%數組的長度。因為如果旋轉的次數超過數組的長度,也就是旋轉k次的效果和k減去數組的長度次的效果是一樣的。

代碼實現

public void rotate(int[] nums, int k) {int n=nums.length;//創建一個新數組jianint[] newNums=new int[n];//將原數組中的數據放到新數組中for(int i=0;i<n;i++){newNums[(i+k)%n]=nums[i];}//將新數組復制到原數組System.arraycopy(newNums,0,nums,0,n);}

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

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

相關文章

Pixi繪制地圖和小車

之前已經用Pixi繪制出了各種圖形以及通過圖片繪制精靈&#xff0c;這節用pixi繪制網格地圖&#xff0c;并通過圖片制作一個Sprite&#xff0c;讓這個Sprite在網格地圖上運動。首先需要在頁面中添加一個div用來后期展示canvas的畫布&#xff0c;并將此div實例化為PIXI的Applicat…

python繪制雙變量熱力等級圖

參考資料&#xff1a; https://github.com/mikhailsirenko/bivariate-choropleth/blob/main/bivariate-choropleth.ipynb Bivariate choropleth map using Plotly Matplotlib雙變量熱力等級圖 代碼&#xff1a; import pandas as pd import geopandas as gpd import numpy a…

企業轉型必上的監控系統智能管家大屏UI前端開發

企業轉型必上的監控系統智能管家大屏UI前端開發

Istio安裝記錄

環境介紹 我使用的是k8s 1.23.3版本 istio使用的是istio-1.13.3-linux-amd64.tar.gz 把文件下載k8s集群下&#xff0c;解壓 tar -vzxf istio-1.13.3-linux-amd64.tar.gz然后設置環境變量 [rootmaster istio]# cat /etc/profile export ISTIO_HOME/root/istio-1.13.3 expor…

3067. 在帶權樹網絡中統計可連接服務器對數目 Medium

給你一棵無根帶權樹&#xff0c;樹中總共有 n 個節點&#xff0c;分別表示 n 個服務器&#xff0c;服務器從 0 到 n - 1 編號。同時給你一個數組 edges &#xff0c;其中 edges[i] [ai, bi, weighti] 表示節點 ai 和 bi 之間有一條雙向邊&#xff0c;邊的權值為 weighti 。再給…

Yolo-v5模型訓練速度,與GeForce的AI算力描述

1.GeForce RTX3070 Ti官網參數&#xff1a; GeForce RTXTM 3070 Ti 和 RTX 3070 顯卡采用第 2 代 NVIDIA RTX 架構 - NVIDIA Ampere 架構。該系列產品搭載專用的第 2 代 RT Core &#xff0c;第 3 代 Tensor Core、全新的 SM 多單元流處理器以及高速顯存&#xff0c;助您在高性…

【網絡安全的神秘世界】MySQL

&#x1f31d;博客主頁&#xff1a;泥菩薩 &#x1f496;專欄&#xff1a;Linux探索之旅 | 網絡安全的神秘世界 | 專接本 MySQL MySQL 教程 | 菜鳥教程 (runoob.com) 什么是數據庫 數據庫&#xff08;Database&#xff09;是按照數據結構來組織、存儲和管理數據的倉庫 在do…

二手筆記本怎么買

用途&#xff1a; 1.給爹媽用來簡單辦公&#xff0c;只是用office基礎辦公軟件&#xff0c;無出差無游戲無畫圖需求。 預算&#xff1a; 1000以內 以下是電腦對比選項&#xff1a; 屏幕大小-> 目前市面上的尺寸對比&#xff0c;以A4紙說明&#xff0c;13.3寸14.1寸15.6…

Camunda 7.x 系列【66】實戰篇之我發起的

有道無術,術尚可求,有術無道,止于術。 本系列Spring Boot 版本 2.7.9 本系列Camunda 版本 7.19.0 源碼地址:https://gitee.com/pearl-organization/camunda-study-demo 前后端基于若依:https://gitee.com/y_project/RuoYi-Vue 流程設計器基于RuoYi-flowable:https://gi…

參數高效微調PEFT(四)快速入門(IA)3

參數高效微調PEFT(四)快速入門(IA)3 我們已經了解了HuggingFace中peft庫的幾種高效微調方法。 參數高效微調PEFT(一)快速入門BitFit、Prompt Tuning、Prefix Tuning 參數高效微調PEFT(二)快速入門P-Tuning、P-Tuning V2 參數高效微調PEFT(三)快速入門LoRA、AdaLoRA 今天我…

探索 Omost:創新的圖像生成AI框架

文章目錄 探索 Omost&#xff1a;創新的圖像生成AI框架第一部分&#xff1a;背景第二部分&#xff1a;Omost是什么&#xff1f;第三部分&#xff1a;如何安裝Omost&#xff1f;第四部分&#xff1a;結合具體場景使用第五部分&#xff1a;總結 探索 Omost&#xff1a;創新的圖像…

OceanBase 4.3 特性解析:列存技術

在涉及大規模數據的復雜分析或即時查詢時&#xff0c;列式存儲是支撐業務負載的關鍵技術之一。相較于傳統的行式存儲&#xff0c;列式存儲采用了不同的數據文件組織方式&#xff0c;它將表中的數據以列為單位進行物理排列。這種存儲模式允許在分析過程中&#xff0c;查詢計算僅…

flowable工作流 完成任務代碼 及擴展節點審核人(實現多級部門主管 審核等)詳解【JAVA+springboot】

低代碼項目 使用flowable 工作流 完成任務代碼 詳解 可以看到 complete()方法 傳遞了流程變量參數var 前端傳遞此參數就可以實現 流程中 審批 更新流程變量參數var 也可以進行更多擴展 實現流程中更新表單內容功能 啟動流程實例代碼 實現對于流程自定義 動態節點審核人 功…

中央空調節能的分戶計費系統

中央空調節能 在建筑能耗中&#xff0c;中央空調能耗一般占到了40%---60%的比例&#xff0c;因此如何有效降低空調能耗就成為建筑節能的重中之重。 項目案例描述 山東銀座購物廣場&#xff1a;為集購物中心、高級酒店式公寓和辦公為一體的綜合性公共建筑。整體建筑共為地下3層&…

副業變現:Midjourney繪畫賺錢的6種方式

今年被稱為AI元年&#xff0c;其中最火的兩款AI工具非ChatGpt和Midjourney莫屬。究其原因&#xff0c;無非兩點&#xff1a;第一&#xff0c;它提高了生產力&#xff0c;之前需要兩年完成的工作&#xff0c;使用ChatGpt兩天就完成。 第二&#xff0c;它帶來了副業收入&#x…

JavaScript異步編程簡單介紹

JavaScript異步編程是一種編程模式&#xff0c;用于處理需要等待某些操作完成之后才能繼續執行的代碼。這些操作可以是網絡請求、文件讀取、定時器等等。 異步編程的目標是避免阻塞代碼執行&#xff0c;在等待操作完成的同時&#xff0c;允許其他代碼繼續執行。 以下是一個使…

Springboot-RabbitMQ 消息隊列使用

一、概念介紹&#xff1a; RabbitMQ中幾個重要的概念介紹&#xff1a; Channels&#xff1a;信道&#xff0c;多路復用連接中的一條獨立的雙向數據流通道。信道是建立在真實的 TCP 連接內地虛擬連接&#xff0c;AMQP 命令都是通過信道發出去的&#xff0c;不管是發布消息、訂閱…

2021 hnust 湖科大 數字系統設計與VHDL課程 大作業 - 出租車計價器設計

2021 hnust 湖科大 數字系統設計與VHDL課程大作業-出租車計價器設計 描述 大二上的eda考查課的實驗&#xff0c;額外實現了停車等待2分鐘后收費1元/min。內含項目文件&#xff08;實測可運行&#xff09;&#xff0c;代碼&#xff0c;報告&#xff0c;視頻和照片&#xff0c;…

JavaScript函數定義,函數參數,函數調用

JavaScript函數定義&#xff1a; 在JavaScript中&#xff0c;我們可以使用關鍵字function來定義一個函數。函數定義的一般語法如下&#xff1a; function functionName(parameter1, parameter2, ...){// 函數體 }其中&#xff0c;functionName是函數的名稱&#xff0c;可以自定…

功能強大且專業的PDF轉換軟件PDF Shaper Professional 14.2

PDF Shaper Professional是一款適用于Windows的程序&#xff0c;可讓您在計算機上處理PDF文件。 要開始使用PDF Shaper Professional&#xff0c;您需要在Windows計算機上下載并安裝該程序。您還應該有合適的驅動程序和編解碼器來處理計算機上的文本和圖形。 安裝程序后&#…