我正在尝试向左旋转数组,例如rotateLeft3([1,2,3])→[2,3,1]
这是我的解决方案,但由于某种原因它无法正常工作。有人可以解释一下我做错了什么吗?
#include <iostream>
using namespace std;
int main()
{
bool six;
int Array[3] = { 1,2,3 };
int x = sizeof(Array) / sizeof(Array[0]);
int temp = Array[0];
int temp2;
for (int i = 0; i < x; i++)
{
Array[i] = Array[i + 1];
Array[x - 1] = temp;
}
for (int i = 0; i < 3; i++)
{
cout << Array[i] << endl;
}
system("pause");
return 0;
}
答案 0 :(得分:5)
这将是正确的方法。
因此,在代码中进行以下更改,
1)将循环条件更改为结束(x-1)
(否则它将超出范围)
2)删除循环内的临时分配
3)循环结束后分配值。
int temp = Array[0];
for (int i = 0; i < x-1; i++){
Array[i] = Array[i + 1];
}
Array[x-1] = temp;
或者如果您想使用内置模板,请在std::rotate标题中使用algorithm
答案 1 :(得分:4)
答案 2 :(得分:2)
答案 3 :(得分:1)
// Complete the rotLeft function below.
vector<int> rotLeft(vector<int> a, int d) {
int temp=0;
int size = a.size();
/*if shifts are more than size of array*/
/*example if d=8 size=5
then result will be 8%5=3 left shift only*/
d = d%size;
int shift = size-d;
bool r = false;
/*here i am taking decision whether i have to do right shift or left shift*/
/*if size=5 d=4
then we can do right shift to 1*/
if(d > shift)
{
d = shift;
r = true;
}
for(int i=0;i<d;i++)
{
/*do right shift*/
if(r == true)
{
temp = a[size-1];
for(int j=size-1;j>0;j--)
{
a[j] = a[j-1];
}
a[0] = temp;
}
/*do left shift*/
else
{
temp = a[0];
for(int j=0;j<size-1;j++)
{
a[j] = a[j+1];
}
a[size-1] = temp;
}
}
return a;
}
答案 4 :(得分:-1)
最好的方法是为此目的使用std :: rotate