1、题目描述
原地反转给定的数组,原地意味着你不能使用额外的空间。
2、AC程序
(1)利用C++自带的函数
class Solution {
public:
void reverseArray(vector<int> &nums) {
reverse(nums.begin(),nums.end());
}
};
(2)自己用交换函数写
class Solution {
public:
void reverseArray(vector<int> &nums) {
int temp;
int j = nums.size();
for(int i=0; i<--j ; i++)
{
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp ;
}
}
};
(3)借助自带的swap函数
class Solution {
public:
void reverseArray(vector<int> &nums) {
int temp;
int j=nums.size();
for(int i=0; i<--j ; i++)
{
swap(nums[i],nums[j]);
}
}
};
(4)我的错误代码
class Solution {
public:
void reverseArray(vector<int> &nums) {
int temp = 0;
for(int i=0; i<nums.size()/2 + 1; i++)
{
//swap(nums[i],nums[nums.size()-i+1]);
temp = nums[i];
nums[i] = nums[nums.size() - i +1];
nums[nums.size() - i +1] = temp;
}
}
};
错误原因:当i=0时,size-i+1=size+1,越界。数组下标是从0开始的。
修改后的正确代码:
class Solution {
public:
void reverseArray(vector<int> &nums) {
int temp = 0;
for(int i=0; i<nums.size()/2; i++)
{
//swap(nums[i],nums[nums.size()-i-1]);
temp = nums[i];
nums[i] = nums[nums.size() - i -1];
nums[nums.size() - i -1] = temp;
}
}
};