पाठ 29 / 42
Two Pointers
अनुक्रम में चलते दो इंडेक्स जो nested loop को एकल पास से बदल देते हैं।
अभिसरण या पीछा
विपरीत सिरे: left और right एक-दूसरे की ओर (sorted two-sum, palindrome, container with most water)। एक ही दिशा: धीमा और तेज़ पॉइंटर (जगह पर duplicate हटाना, cycle पहचान)। O(n^2) को O(n) बनाता है।
Sorted two-sum
यदि योग बहुत छोटा है, केवल left ऊपर करना मदद करेगा; बहुत बड़ा तो केवल right नीचे।
def two_sum_sorted(a, target):
lo, hi = 0, len(a) - 1
while lo < hi:
s = a[lo] + a[hi]
if s == target:
return [lo, hi]
if s < target:
lo += 1
else:
hi -= 1
return []त्वरित जाँच: विपरीत-सिरे two-pointer तरकीब को array चाहिए...
- Sorted
- सभी धनात्मक
- सम लंबाई
Answer
Sorted — Sorted क्रम ही तय करने देता है कि वर्तमान योग से कौन-सा पॉइंटर हिलाना है।