持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
一、题目描述
给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 <= i < n 的 i ,满足下述所有要求:
ans[i] == nums[i]
ans[i + n] == nums[i]
具体而言,ans 由两个 nums 数组 串联 形成。
返回数组 ans 。
示例 1:
输入:nums = [1,2,1]
输出:[1,2,1,1,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]
示例 2:
输入:nums = [1,3,2,1]
输出:[1,3,2,1,1,3,2,1]
解释:数组 ans 按下述方式形成:
- ans = [nums[0],nums[1],nums[2],nums[3],nums[0],nums[1],nums[2],nums[3]]
- ans = [1,3,2,1,1,3,2,1]
提示:
n == nums.length1 <= n <= 10001 <= nums[i] <= 1000
二、思路分析
本题的思路很简单,但要通过c++编程出来,则需要对c++中的vector容器概念有一定的了解。初学者往往习惯用数组解这道题,但在c++中函数是无法返回数组类型的,最简便的方法就是通过容器去做这道题。
我首先vector类的整型数组,没有赋值,数组长度为函数中传入数组的长度的两倍。最后通过一个for循环,对vector类的整型数组进行赋值,最后得到了符合题目要求的数组。
三、AC代码
class Solution {
public:
vector<int> getConcatenation(vector<int>& nums) {
int a = nums.size();
// int a=sizeof(nums)/sizeof(nums[0]);
vector<int>ans(a+a);
int i;
// ans=new int[a+a];
for(i=0;i<a;i++)
{
ans[i]=ans[a+i]=nums[i];
}
return ans;
}
};
四、总结
对于初学者而言,本题的解题思路是很容易能够想到的,主要需要注意的是在c++中函数无法返回数组类型,因此需要创建vector类的整型数组来做。