Skip to content

1929. Concatenation of Array

SourceWeekly Contest 249 Q1DifficultyEasyRating1132

Description

Given an integer array nums of length n, you want to create an array ans of length 2n where ans[i] == nums[i] and ans[i + n] == nums[i] for 0 <= i < n (0-indexed).

Specifically, ans is the concatenation of two nums arrays.

Return the array ans.

 

Example 1:

Input: nums = [1,2,1]
Output: [1,2,1,1,2,1]
Explanation: The array ans is formed as follows:
- ans = [nums[0],nums[1],nums[2],nums[0],nums[1],nums[2]]
- ans = [1,2,1,1,2,1]

Example 2:

Input: nums = [1,3,2,1]
Output: [1,3,2,1,1,3,2,1]
Explanation: The array ans is formed as follows:
- 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]

 

Constraints:

  • n == nums.length
  • 1 <= n <= 1000
  • 1 <= nums[i] <= 1000

Solutions

Solution 1: Simulation

Thinking

The result is two copies of \(\textit{nums}\) concatenated. Appending the array to itself realizes the required index mapping.

We directly simulate according to the problem description by adding the elements of \(\textit{nums}\) to the answer array one by one, and then adding the elements of \(\textit{nums}\) to the answer array again.

The time complexity is \(O(n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array \(\textit{nums}\).

1
2
3
class Solution:
    def getConcatenation(self, nums: List[int]) -> List[int]:
        return nums + nums
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
    public int[] getConcatenation(int[] nums) {
        int n = nums.length;
        int[] ans = new int[n << 1];
        for (int i = 0; i < n << 1; ++i) {
            ans[i] = nums[i % n];
        }
        return ans;
    }
}
1
2
3
4
5
6
7
8
9
class Solution {
public:
    vector<int> getConcatenation(vector<int>& nums) {
        for (int i = 0, n = nums.size(); i < n; ++i) {
            nums.push_back(nums[i]);
        }
        return nums;
    }
};
1
2
3
func getConcatenation(nums []int) []int {
    return append(nums, nums...)
}
1
2
3
function getConcatenation(nums: number[]): number[] {
    return [...nums, ...nums];
}
1
2
3
4
5
impl Solution {
    pub fn get_concatenation(nums: Vec<i32>) -> Vec<i32> {
        nums.repeat(2)
    }
}
1
2
3
4
5
6
7
/**
 * @param {number[]} nums
 * @return {number[]}
 */
var getConcatenation = function (nums) {
    return [...nums, ...nums];
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* getConcatenation(int* nums, int numsSize, int* returnSize) {
    int* ans = malloc(sizeof(int) * numsSize * 2);
    for (int i = 0; i < numsSize; i++) {
        ans[i] = ans[i + numsSize] = nums[i];
    }
    *returnSize = numsSize * 2;
    return ans;
}

Comments