Tác giả: Lê Trung Kiên lớp java 08
Email: lekien.2803.cg@gmail.com
SĐT: 0942096947
Link bài toán: https://leetcode.com/problems/concatenation-of-array/

1. Mở đầu

Xin chào các bạn, mình viết ra bài viết này để chia sẻ phương pháp giải cũng như tư duy của mình về bài toán này của leetcode. Phương pháp của mình có thể không phải là tối ưu nhất, tuy nhiên mình sẽ phân tích, chia nhỏ bài toán ra thành các module nhỏ hơn để dễ giải quyết cũng như giúp các bạn hiểu được các yêu cầu mà bài toán đưa ra.

2. Đề bài

Cho một mảng số nguyên nums với kích thước n. Hãy tạo một mảng mới ans với kích thước 2n trong đó ans[i] == nums[i]ans[i + n] == nums[i] với 0 <= i < n.

Cụ thể, ans là phép nối của hai mảng nums.

Trả về kết quả là mảng ans.

Điều kiện:

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

Ví dụ 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]

Ví dụ 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]

3. Phân tích

Âu kê bài này không quá phức tạp đâu. Rất may mắn là họ đã cho chúng ta công thức ở trên để gán giá trị vào mảng ans đó là ans[i] == nums[i]ans[i + n] == nums[i]. Vậy là duyệt qua mảng ans thì ta sẽ đồng thời gán giá trị vào mỗi vị trí tại i.
Hãy cùng xem code chạy như thế nào nhé.

4. Code chạy bằng cơm

Hãy thử với ví dụ 1, trước hết chúng ta cần tạo mới một mảng ans với kích thước gấp đôi mảng nums, cụ thể ở đây là 2n:
leet-code-1929-1

Tiếp theo chúng ta sẽ dùng một vòng lặp với con trỏ i và chỉ chạy từ 0 tới n. Với mỗi vị trí i, ta đồng thời thêm phần tử nums[i] gán vào ans[i]ans[i + n].

Cụ thể, tại i = 0, ta có nums[i] = 1, vậy thì ta sẽ gán vào ans:
leet-code-1929-2

Tại i = 1, sẽ là:
leet-code-1929-3

Và cuối cùng khi i = 2, ta có:
leet-code-1929-4

Vậy là xong! Hãy xem code của chúng ta viết thế nào nhé!

5. Code bằng máy

Code của chúng ta sẽ như sau:

 public int[] getConcatenation(int[] nums) {
     int n = nums.length;
     int[] ans = new int[n * 2];

     for (int i = 0; i < n; i++) {
         ans[i] = nums[i];
         ans[i + n] = nums[i];
     }

     return ans;
 }

6. Kết thúc

Qua bài viết này, mình đã chia sẻ cho các bạn cách mình tư duy khi giải bài tập trên leetcode. Hi vọng bài viết giúp ích cho các bạn trong cách tư duy để giải các bài tập khác. Xin cám ơn các bạn đã dành thời gian đọc và theo dõi. Peace!!!