欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode刷题——旋转数组

程序员文章站 2022-04-28 18:30:28
...

大家好,我终于刷完了字符串的题,向数组迈进。做的第一道数组题很简单,来看下题目:

LeetCode刷题——旋转数组

使用复杂度为O(1)的原地算法的意思就是不要开辟新的空间,这里定义新的变量是没有关系的,但是注意不能使用new,malloc这类的开辟空间操作,例如不能定义新的vector数组,因为它包含了隐式的new,delete操作。

思路如下:

定义一个中间变量temp,让它等于数组的最后一位元素,并插入到数组的第一位,然后删除掉数组的最后一位。循环k次。

代码如下:

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int temp;
        for (int i = 1;i <= k;i++){
	    int len  = nums.size();
            temp = nums[len - 1];
            nums.insert(nums.begin(),temp);
            nums.erase(nums.end() - 1);
	}
    }
};

通过本题主要想记录的两点:

1.nums.end()表示的是数组最后一位的后一位,我在刚开始做题的时候没有设置减一,一直报错,做了这么多题还犯这种错误,实在不应该。

2.在自己的vs调试的时候,我一般会写一个main函数方便调试,那么问题来了,如何输入vector数组,我试了很多方法,都不太有用。最后采用的是C++Primer Plus中提供的一种方法,直接把代码贴出来:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void main()
{
    int k;
    cin >> k;
    string t;
    vector<int> nums;
    cin >> t;
    int len = t.size();
    for(int j = 0;j < len;j++){
        nums.push_back(t[j] - '0');
    }
	

    int temp;
    for (int i = 1;i <= k;i++){
	int len  = nums.size();
        temp = nums[len - 1];
        nums.insert(nums.begin(),temp);
        nums.erase(nums.end() - 1);
    }
    system("pause");
}
希望对大家有帮助,我们下期见。



相关标签: LeetCode vector