Computer >> Máy Tính >  >> Lập trình >> Python

Tìm d để tối đa hóa số lượng số không trong mảng c [] được tạo dưới dạng c [i] =d * a [i] + b [i] trong Python


Giả sử chúng ta có hai mảng A và B gồm n số nguyên, bây giờ hãy xem xét một mảng C, trong đó số thứ i sẽ là d * A [i] + B [i] và đây d là số thực bất kỳ. Ta phải tìm d sao cho mảng C có tối đa số 0. Đồng thời trả về số lượng số không.

Vì vậy, nếu đầu vào là A =[15, 40, 45] và B =[4, 5, 6], thì đầu ra sẽ là d =-0.266666, số không sẽ là 1

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • n:=kích thước của A

  • my_map:=một bản đồ mới

  • đếm:=0

  • đối với tôi trong phạm vi từ 0 đến n, hãy thực hiện

    • nếu B [i] không giống 0 và A [i] không giống 0 thì

      • val:=(- 1,0 * B [i]) / A [i]

      • nếu val không có trong my_map, thì

        • my_map [val]:=0

      • my_map [val]:=my_map [val] + 1

    • ngược lại khi B [i] giống 0 và A [i] giống 0 thì

      • count:=count + 1

  • tối đa:=0;

  • đối với mỗi mục trong my_map, thực hiện

    • tối đa:=tối đa my_map [item], tối đa

  • đối với mỗi khóa, giá trị trong my_map, thực hiện

    • nếu các giá trị bằng với giá trị tối đa thì

      • các phím hiển thị

      • đi ra từ vòng lặp

  • hiển thị tối đa + số lượng

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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)

Đầu vào

[15, 40, 45], [4,5,6]

Đầu ra

d = -0.26666666666666666
Number of 0s: 1