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;}}
};