HappyLeetcode50:Rotate Array
生活随笔
收集整理的這篇文章主要介紹了
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)解。顯然空間要求沒有達(dá)到。
有一點要尤為注意,在一開始的時候我就默認(rèn)k是小于n的,實際上k可以大于n,所以在修改代碼之后,我們所使用的k要對n取余。
我的思路是,把數(shù)組中前面的值先挪到后面去。后面的值在被替換之前先存進(jìn)一個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)推進(jìn)了多少個數(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ù)情況裁剪出你需要的那一部分?jǐn)?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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干磨什么意思
- 下一篇: 正月初八祭星星怎么祭 祭星点灯步骤详解