日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HappyLeetcode50:Rotate Array

發(fā)布時間:2023/12/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HappyLeetcode50:Rotate Array 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Rotate an array of n elements to the right by k steps.

For example, with n = 7 and k = 3, the array [1,2,3,4,5,6,7] is rotated to [5,6,7,1,2,3,4].

這道題雖然做了出來,但是顯然不是最優(yōu)解。顯然空間要求沒有達到。

有一點要尤為注意,在一開始的時候我就默認k是小于n的,實際上k可以大于n,所以在修改代碼之后,我們所使用的k要對n取余。

我的思路是,把數(shù)組中前面的值先挪到后面去。后面的值在被替換之前先存進一個vector里面去,待前面的值安排完畢之后,把vector之中的數(shù)據(jù)取出,放在新數(shù)組的前面。

代碼如下:

class Solution { public:void rotate(int nums[], int n, int k) {if (nums == NULL || n <= 0 )return;k = k%n;vector<int> TempSave;TempSave.reserve(k);int count = 0;//記錄已經(jīng)推進了多少個數(shù)據(jù)for (int i = n - k - 1; i >= 0; --i){if (count < k){TempSave.push_back(nums[i + k]);count++;}nums[i + k] = nums[i];}int Temp = TempSave.size();if (TempSave.size() < k){for (int i = k - 1; i >= Temp; --i)TempSave.push_back(nums[i]);}for (int i = 0; i < k; ++i){nums[i] = TempSave.back();TempSave.pop_back();} } };

其實后來想想還是有更簡單一些的方法,比如先把數(shù)組復(fù)制一遍,再根據(jù)情況裁剪出你需要的那一部分數(shù)組出來。

class Solution { public:void rotate(int nums[], int n, int k) {k = k % n;int* NewNums =new int[n * 2];for (int i = 0; i < n ; ++i){NewNums[i] = nums[i];NewNums[i + n] = nums[i];}//int res = n - k;for (int i = 0; i < n; ++i){nums[i] = NewNums[i + n - k];}} }; 代碼量明顯短了不少。

轉(zhuǎn)載于:https://www.cnblogs.com/chengxuyuanxiaowang/p/4302957.html

總結(jié)

以上是生活随笔為你收集整理的HappyLeetcode50:Rotate Array的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。