Помогите пожалуйста с вопросом, указанным выше. Дана задача (на скриншоте)
Я написал код:
def two_pointers(A, B, C): # O(K * (N + M))
result = []
for c in C:
i, j = 0, len(B) - 1
found = False
while i < len(A) and j >= 0:
current_sum = A[i] + B[j]
if current_sum > c:
j -= 1
elif current_sum < c:
i += 1
else:
found = True
result.append('YES')
break
if not found:
result.append('NO')
print("\n".join(result))
N = int(input())
if N > 0:
A = sorted(map(int, input().split())) # O(NlogN)
else:
s = input()
M = int(input())
if M > 0:
B = sorted(map(int, input().split())) # O(MlogM)
else:
s = input()
K = int(input())
if K > 0:
C = list(map(int, input().split()))
if N > 0 and M > 0 and K > 0:
two_pointers(A, B, C) # O(NlogN + MlogM + K * (N + M))
elif K > 0:
for _ in C:
print('NO')
def two_pointers(A, B, C): # O(K * (N + M))
result = []
for c in C:
i, j = 0, len(B) - 1
found = False
while i < len(A) and j >= 0:
current_sum = A[i] + B[j]
if current_sum > c:
j -= 1
elif current_sum < c:
i += 1
else:
found = True
result.append('YES')
break
if not found:
result.append('NO')
print("\n".join(result))
N = int(input())
if N > 0:
A = sorted(map(int, input().split())) # O(NlogN)
else:
s = input()
M = int(input())
if M > 0:
B = sorted(map(int, input().split())) # O(MlogM)
else:
s = input()
K = int(input())
if K > 0:
C = list(map(int, input().split()))
if N > 0 and M > 0 and K > 0:
two_pointers(A, B, C) # O(NlogN + MlogM + K * (N + M))
elif K > 0:
for _ in C:
print('NO')
Преподаватель задал вопрос:
Как доказать что мы действительно не пропустим такую пару i,j которая дает правильный ответ в методе двух указателей?
Вроде бы доказательство не сложное, но помимо этого был вопрос по типу: Как мы гарантируем то, что мы не перескочим через указатели во время проверки?
Прошу помочь с данными вопросами, желательно как можно подробнее