สมมติว่าเรามีอาร์เรย์ arr ที่มีจำนวนเต็ม n เราต้องหา arr[i] และ arr[j] จากอาร์เรย์เพื่อให้ arr[i]Carr[j] มีขนาดใหญ่ที่สุด หากมีมากกว่าหนึ่งคู่ ให้คืนอันใดอันหนึ่ง
ดังนั้น หากอินพุตเป็นแบบ [4, 1, 2] เอาต์พุตจะเป็น 4 2 เนื่องจาก 4C1 =4, 4C2 =6 และ 2C1 =2 ดังนั้น (4,2) จึงเป็นคู่ที่เราต้องการเท่านั้นพี>
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- เรียงลำดับรายการ v
- N :=v[n - 1]
- ถ้า N mod 2 เหมือนกับ 1 แล้ว
- อันดับแรก :=N / 2 (การหารจำนวนเต็ม)
- วินาที :=แรก + 1
- ซ้าย :=-1, ขวา :=-1
- อุณหภูมิ :=-1
- สำหรับ i ในช่วง 0 ถึง n ให้ทำ
- ถ้า v[i]> ก่อน แล้ว
- อุณหภูมิ :=ฉัน
- แตก
- มิฉะนั้น
- ความแตกต่าง :=แรก - v[i]
- ถ้าต่างกัน
- res1 :=ความแตกต่าง
- ซ้าย :=v[i]
- ถ้า v[i]> ก่อน แล้ว
- ขวา :=v[ชั่วคราว]
- difference1 :=แรก - ซ้าย
- difference2 :=ขวา - วินาที
- ถ้าข้อแตกต่าง1 <แตกต่าง2 แล้ว
- พิมพ์(N, ซ้าย)
- มิฉะนั้น
- พิมพ์(N, ขวา)
- สูงสุด :=N / 2 (การหารจำนวนเต็ม)
- res :=3*(10^18)
- R :=-1
- สำหรับฉันในช่วง 0 ถึง n - 1 ทำ
- ความแตกต่าง :=|v[i] - สูงสุด|
- ถ้าความแตกต่าง
- res :=ความแตกต่าง
- R :=v[i]
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def findMatrixPair(v, n): v.sort() N = v[n - 1] if N % 2 == 1: first = N // 2 second = first + 1 res1, res2 = 3 * (10 ** 18), 3 * (10 ** 18) left, right = -1, -1 temp = -1 for i in range(0, n): if v[i] > first: temp = i break else: difference = first - v[i] if difference < res1: res1 = difference left = v[i] right = v[temp] difference1 = first - left difference2 = right - second if difference1 < difference2: print(N, left) else: print(N, right) else: max = N // 2 res = 3 * (10 ** 18) R = -1 for i in range(0, n - 1): difference = abs(v[i] - max) if difference < res: res = difference R = v[i] print(N, R) v = [4,1,2] n = len(v) findMatrixPair(v, n)
อินพุต
[4,1,2], 3
ผลลัพธ์:
4 2