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