สมมติว่าเรามีอาร์เรย์ขนาด N; เราต้องหาองค์ประกอบที่แบ่งอาร์เรย์ออกเป็นสองอาร์เรย์ย่อยที่แตกต่างกันโดยมีผลคูณเท่ากัน คืนค่า -1 หากไม่มีพาร์ติชั่นดังกล่าว
ดังนั้น หากอินพุตเป็น [2,5,3,2,5] เอาต์พุตจะเป็น 3 ดังนั้นอาร์เรย์ย่อยจะเป็น:{2, 5} และ {2, 5}
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- n :=ขนาดของอาร์เรย์
- multiply_pref :=รายการใหม่
- แทรกอาร์เรย์[0] ที่ส่วนท้ายของ multiply_pref
- สำหรับฉันในช่วง 1 ถึง n ทำ
- แทรก multiply_pref[i-1]*array[i] ที่ส่วนท้ายของ multiply_pref
- multiply_suff :=รายการขนาด n และเติมไม่มี
- multiply_suff[n-1] :=array[n-1]
- สำหรับ i ในช่วง n-2 ถึง -1, ลดลง 1, ทำ
- multiply_suff[i] :=multiply_suff[i+1]*array[i]
- สำหรับฉันอยู่ในช่วง 1 ถึง n-1 ทำ
- ถ้า multiply_pref[i] เหมือนกับ multiply_suff[i] แล้ว
- กลับอาร์เรย์[i]
- ถ้า multiply_pref[i] เหมือนกับ multiply_suff[i] แล้ว
- คืน -1
โค้ดตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def search_elem(array): n = len(array) multiply_pref = [] multiply_pref.append(array[0]) for i in range(1, n): multiply_pref.append(multiply_pref[i-1]*array[i]) multiply_suff = [None for i in range(0, n)] multiply_suff[n-1] = array[n-1] for i in range(n-2, -1, -1): multiply_suff[i] = multiply_suff[i+1]*array[i] for i in range(1, n-1): if multiply_pref[i] == multiply_suff[i]: return array[i] return -1 array = [2,5,3,2,5] print(search_elem(array))
อินพุต
[2,5,3,2,5]
ผลลัพธ์
3