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/xor-operation-in-an-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 số nguyên n
và start
.
Hãy xác định một mảng nums
trong đó nums[i] = start + 2 * i
(0-indexed) và n == nums.length
.
Trả về kết quả là toán tử đơn nhất của tất cả các phần tử trong nums
.
Điều kiện:
1 <= n <= 1000
.0 <= start <= 1000
.n == nums.length
.
Bài toán minh họa 1:
Input: n = 5, start = 0
Output: 8
Explanation: Array nums is equal to [0, 2, 4, 6, 8] where (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8.
Where "^" corresponds to bitwise XOR operator.
Bài toán minh họa 2:
Input: n = 4, start = 3
Output: 8
Explanation: Array nums is equal to [3, 5, 7, 9] where (3 ^ 5 ^ 7 ^ 9) = 8.
3. Phân tích
Mình cũng từng có bài viết liên quan đến toán tử XOR, các bạn có thể đọc thêm tại đây.
Ô kê, bài này cũng đơn giản thôi các bạn ạ. Giờ họ cho chúng ta số nguyên n
chính bằng kích thước của mảng nums
. Và chúng ta sẽ thêm các phần tử vào mảng nums
theo công thức mà đề bài đã cho: nums[i] = start + 2 * i
, với index bằng đầu từ 0
.
Tiếp theo chúng ta chỉ cần một vòng lặp for
qua mảng nums
, dùng toán tử XOR ^
lên tất cả các phần tử của mảng để lấy ra kết quả cuối cùng.
Thế là xong nhé!
4. Code bằng cơm
Đầu tiên chúng ta cần tạo ra mảng nums
với kích thước chính là n
. Cùng với đó là một số nguyên res = 0
để trả về kết quả cuối cùng. Tại sao lại đặt res = 0
? Tại vì bất kì số nào khi đặt phép so sánh đơn nhất XOR với 0
cũng bằng chính nó:
Ok, tiếp theo chúng ta sẽ thêm các phần tử vào nums
với công thức đề bài đã cho:
Sau khi đã có mảng nums
rồi, ta sẽ làm một vòng lặp for
qua nó để làm phép so sánh XOR lên tất cả các phần tử với res
:
Cuối cùng ta trả về res
là xong!
5. Code bằng máy
Code của chúng ta sẽ như sau:
public static int xorOperation(int n, int start) {
int res = 0;
int[] nums = new int[n];
for (int i = 0; i < nums.length; i++) {
nums[i] = start + 2 * i;
}
for (int i : nums) {
res ^= i;
}
return res;
}
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