📅  最后修改于: 2023-12-03 15:26:11.917000             🧑  作者: Mango
本文介绍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函数,它有两个参数:
旋转后的数组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;
}