練習題30-旋轉數組

原題目:
給定一個數組,將數組中的元素向右移動 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

練習題29-刪除重複元素

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章