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]
và 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]
và 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
:
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]
và ans[i + n]
.
Cụ thể, tại i = 0
, ta có nums[i] = 1
, vậy thì ta sẽ gán vào ans
:
Tại i = 1
, sẽ là:
Và cuối cùng khi i = 2
, ta có:
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!!!
Bình luận