Cho hai mảng trùng lặp nhau trừ một phần tử (một mảng thiếu một phần tử so với mảng kia). Tìm phần tử thiếu đó.
Ví dụ: A = [2, 5, 6, 8, 10], B = [5, 6, 8, 10] → Kết quả: 2.
Thuật toán Binary Search
- Hàm
solve(A, B, N)giả định A dài hơn B 1 phần tử. - Nếu N=1 hoặc A[0]≠B[0] → trả về A[0].
- Binary search:
low=0, high=N-1. So sánh A[mid] và B[mid]. Nếu bằng nhau → phần tử thiếu ở bên phải (low=mid), ngược lại bên trái (high=mid). - Khi
low == high - 1dừng, trả về A[high]. - Hàm chính so sánh độ dài hai mảng để quyết định gọi
solvetheo hướng nào.
Ví dụ code
def solve(A, B, N):
if N == 1:
return A[0]
if A[0] != B[0]:
return A[0]
low, high = 0, N - 1
while low < high:
mid = (low + high) // 2
if A[mid] == B[mid]:
low = mid
else:
high = mid
if low == high - 1:
break
return A[high]
def get_missing_element(A, B):
M, N = len(A), len(B)
if N == M - 1:
return solve(A, B, M)
elif M == N - 1:
return solve(B, A, N)
else:
return "Not found"
A = [2, 5, 6, 8, 10]
B = [5, 6, 8, 10]
print(get_missing_element(A, B))
Input
[2, 5, 6, 8, 10], [5, 6, 8, 10]
Output
2