Giả sử chúng ta có một mảng A gồm n số duy nhất, n phần tử này có mặt trong mảng theo thứ tự tăng dần, nhưng thiếu một phần tử. Chúng tôi phải tìm ra phần tử còn thiếu.
Vì vậy, nếu đầu vào là A =[1, 2, 3, 4, 5, 6, 7, 9], thì đầu ra sẽ là 8.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
n:=kích thước của A
-
trái:=0
-
đúng:=n - 1
-
giữa:=0
-
trong khi phải> trái, thực hiện
-
giữa:=left + (right - left) / 2
-
nếu A [giữa] - giữa giống với A [0] thì
-
nếu A [giữa + 1] - A [giữa]> 1 thì
-
trả về A [giữa] + 1
-
-
nếu không,
-
left:=mid + 1
-
-
-
nếu không,
-
nếu A [giữa] - A [giữa - 1]> 1 thì
-
trả về A [giữa] - 1
-
-
nếu không,
-
right:=mid - 1
-
-
-
-
trả về -1
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
def search_missing_item(A): n = len(A) left, right = 0, n - 1 mid = 0 while (right > left): mid = left + (right - left) // 2 if (A[mid] - mid == A[0]): if (A[mid + 1] - A[mid] > 1): return A[mid] + 1 else: left = mid + 1 else: if (A[mid] - A[mid - 1] > 1): return A[mid] - 1 else: right = mid - 1 return -1 A = [1, 2, 3, 4, 5, 6, 7, 9] print(search_missing_item(A))
Đầu vào
[1, 2, 3, 4, 5, 6, 7, 9]
Đầu ra
8