Lintcode--6(767)--翻转数组

xiaoxiao2021-02-28  44

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

转载请注明原文地址: https://www.6miu.com/read-2628487.html

最新回复(0)