LeetCode 1929.数组串联(c++)

100 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情

一、题目描述

1929.数组串联

给你一个长度为 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.length
  • 1 <= n <= 1000
  • 1 <= 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类的整型数组来做。