Leetcode 189. 旋转数组 思维 对vector的灵活运用

给定一个数组,将数组中的元素向右移动 个位置,其中 是非负数。

示例 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,-100,3]
向右旋转 2 步: [3,99,-1,-100]

把数组前N-K个元素放到数组后面,用push_back和erase来实现,用push_back和erase来实现。

class Solution {
public:
    void rotate(vector<int>& nums, int k) 
    {
        if(nums.empty()||(k%=nums.size())==0)
            return;
        int n=nums.size();
        for(int i=0;i<n-k;i++)
        {
            nums.push_back(nums[0]);
            nums.erase(nums.begin());
        }
    }
};

还有一种方法:我们把前N-k个元素翻转,后K个元素翻转,倒序输出

比如1234567 k=3

第一步翻转:4321765

第二步倒序输出:5671234

用reserve翻转数组

猜你喜欢

转载自blog.csdn.net/Evildoer_llc/article/details/88544544
今日推荐