สมมติว่าเรามีอาร์เรย์สองตัว A และ B ขนาด n จำนวนเต็ม พิจารณาอาร์เรย์ C โดยที่สมาชิกตัวที่ i คือ d*A[i] + B[i] โดย d เป็นจำนวนจริง bất kỳ เราต้องการหา d ที่ทำให้อาร์เรย์ C มีจำนวนศูนย์มากที่สุด พร้อมทั้งคืนค่าจำนวนศูนย์นั้น
เช่น หากอินพุตคือ A = [15, 40, 45] และ B = [4, 5, 6] ผลลัพธ์จะเป็น d = -0.266666 จำนวนศูนย์ = 1
ขั้นตอนการแก้ปัญหา
- นับขนาดของ A เป็น
n - สร้างแผนที่
my_mapและตัวนับcount = 0 - วนลูป i จาก 0 ถึง n-1:
- ถ้า
B[i] != 0และA[i] != 0:- คำนวณ
val = (-1.0 * B[i]) / A[i] - เพิ่มจำนวนใน
my_map[val]
- คำนวณ
- ถ้า
B[i] == 0และA[i] == 0: เพิ่มcount
- ถ้า
- หาค่า
maximumที่มากที่สุดในmy_map - ค้นหาคีย์ที่มีค่าเท่ากับ
maximumแล้วแสดงเป็น d - แสดงผลรวม
maximum + countเป็นจำนวนศูนย์
ตัวอย่างโค้ด Python
def find_d_zero(A, B):
n = len(A)
my_map = {}
count = 0
for i in range(n):
if B[i] != 0 and A[i] != 0:
val = (-1.0 * B[i]) / A[i]
if val not in my_map:
my_map[val] = 0
my_map[val] += 1
elif B[i] == 0 and A[i] == 0:
count += 1
maximum = 0
for item in my_map:
maximum = max(my_map[item], maximum)
for keys, values in my_map.items():
if values == maximum:
print("d =", keys)
break
print("Number of 0s:", maximum + count)
a = [15, 40, 45]
b = [4, 5, 6]
find_d_zero(a, b)
อินพุต
[15, 40, 45], [4,5,6]
เอาต์พุต
d = -0.26666666666666666 Number of 0s: 1