📌  相关文章
📜  数组左旋转hackerrank解决方案 - C++(1)

📅  最后修改于: 2023-12-03 15:26:11.917000             🧑  作者: Mango

数组左旋转Hackerrank解决方案 - C++

介绍

本文介绍Hackerrank中数组左旋转的解决方案,使用C++语言完成。

问题描述:

给定一个长度为n的数组arr和一个旋转数d,将数组arr左旋转d次,返回旋转后的数组。

例如:

arr = [1,2,3,4,5],d = 2

左旋转2次后,arr变为[3,4,5,1,2]

解决方案

使用C++语言实现数组左旋转算法,具体实现如下:

vector<int> rotateLeft(int d, vector<int> arr) {
    vector<int> rotatedArr(arr.size());
    for (int i = 0; i < arr.size(); i++) {
        rotatedArr[(i + arr.size() - d) % arr.size()] = arr[i];
    }
    return rotatedArr;
}
代码解析

这里介绍下具体的实现过程。

首先定义rotateLeft函数,它有两个参数:

  • d:旋转的次数
  • arr:需要旋转的数组

旋转后的数组rotatedArr,也是一个int类型的vector。

接下来进入循环遍历arr中的每个元素,将其旋转后放入新的数组rotatedArr中。

这里需要注意的是,旋转后的数组中,原数组arr中index为i的元素会出现在rotatedArr的index为 (i + arr.size() - d) % arr.size() 的位置。

需要对旋转后的新位置进行取模运算,以保证数组不越界,也就是确保index在0到arr.size()-1之间。

最后返回旋转后的数组rotatedArr。

总结

本文介绍了Hackerrank中数组左旋转的解决方案,使用C++语言完成。

具体实现方式是定义rotateLeft函数,使用循环遍历将旋转后的元素放入新的数组中。

需要注意的是,旋转后的位置需要进行取模运算,以保证不越界。

完整代码如下:

vector<int> rotateLeft(int d, vector<int> arr) {
    vector<int> rotatedArr(arr.size());
    for (int i = 0; i < arr.size(); i++) {
        rotatedArr[(i + arr.size() - d) % arr.size()] = arr[i];
    }
    return rotatedArr;
}