สมมติว่าเรามีสองอาร์เรย์ A และ B ของจำนวนเต็ม n ตัว ตอนนี้ให้พิจารณาอาร์เรย์ C โดยที่ตัวเลขที่ i จะเป็น d*A[i] + B[i] และที่นี่ d คือจำนวนจริงใดๆ ตามอำเภอใจ เราต้องหา d ที่อาร์เรย์ C มีจำนวนศูนย์สูงสุด คืนค่าจำนวนศูนย์ด้วย
ดังนั้น หากอินพุตเป็น A =[15, 40, 45] และ B =[4, 5, 6] ผลลัพธ์จะเป็น d =-0.266666 จำนวนศูนย์จะเป็น 1
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
n :=ขนาดของ A
-
my_map :=แผนที่ใหม่
-
นับ :=0
-
สำหรับผมอยู่ในช่วง 0 ถึง n ทำ
-
ถ้า B[i] ไม่เหมือนกับ 0 และ A[i] ไม่เหมือนกับ 0 ดังนั้น
-
ค่า :=(-1.0 * B[i]) / A[i]
-
ถ้าวาลไม่ได้อยู่ใน my_map แล้ว
-
my_map[val] :=0
-
-
my_map[val] :=my_map[val] + 1
-
-
มิฉะนั้น เมื่อ B[i] เท่ากับ 0 และ A[i] เท่ากับ 0 ดังนั้น
-
นับ :=นับ + 1
-
-
-
สูงสุด :=0;
-
สำหรับแต่ละรายการใน my_map ให้ทำ
-
สูงสุด :=สูงสุดของ my_map[รายการ] สูงสุด
-
-
สำหรับแต่ละคีย์ ค่าใน my_map ทำ
-
ถ้าค่าเท่ากับค่าสูงสุดแล้ว
-
ปุ่มแสดงผล
-
ออกจากวง
-
-
-
แสดงผลสูงสุด + จำนวน
ตัวอย่าง (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