原題目:
給定一個數組,將數組中的元素向右移動 k 個位置,其中 k 是非負數。
示例 1:
輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右旋轉 1 步: [7,1,2,3,4,5,6]
向右旋轉 2 步: [6,7,1,2,3,4,5]
向右旋轉 3 步: [5,6,7,1,2,3,4]
示例 2:
輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋:
向右旋轉 1 步: [99,-1,-1添加鏈接描述00,3]
向右旋轉 2 步: [3,99,-1,-100]
思路:
用reverse函數進行數組元素的翻轉,reverse函數主要的功能是將數組元素在指定的範圍從後往前進行翻轉,具體可以參考
C++ reverse函數的用法
之前的思路是用insert函數和pop函數組合進行翻轉,但是運行時間超時,所以不能使用這個方法,關於insert函數和pop函數的使用可以參考
vector insert用法 C++
pop函數的使用
代碼(之前想的)
class Solution {
public:
void rotate(vector<int>& nums, int k) {
vector<int>::iterator it;
it=nums.begin();
for(int i=0;i<k;i++)
{
nums.insert(it,nums[nums.size()-1]);
it=nums.begin();
nums.pop_back();
}
}
};
代碼2
class Solution {
public:
void rotate(vector<int>& nums, int k) {
// 三次翻轉搞定
k = k % nums.size();
reverse(nums.begin(), nums.begin() + nums.size() - k);//翻轉k前面元素
reverse(nums.begin() + nums.size() - k, nums.end());//翻轉k後面元素
reverse(nums.begin(), nums.end());//從後往前翻轉
}
};
上面代碼的運行邏輯:
如1,2,3,4,5,6,7
第一步
4,3,2,1,5,6,7
第二步
4,3,2,1,7,6,5
第三步
5,6,7,1,2,3,4