Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 c[i] =d*a[i] + b[i]로 생성된 배열 c[]에서 0의 수를 최대화하려면 d를 찾으십시오.


n개의 정수로 구성된 두 개의 배열 A와 B가 있다고 가정하고, 이제 배열 C를 고려합니다. 여기서 i번째 숫자는 d*A[i] + B[i]입니다. d는 임의의 실수입니다. 배열 C의 최대 개수가 0이 되도록 d를 찾아야 합니다. 또한 0의 수를 반환합니다.

따라서 입력이 A =[15, 40, 45] 및 B =[4, 5, 6]인 경우 출력은 d =-0.266666이 되고 0의 수는 1이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n :=A의 크기

  • my_map :=새 지도

  • 개수 :=0

  • 0에서 n 사이의 i에 대해 수행

    • B[i]가 0과 같지 않고 A[i]가 0과 같지 않으면

      • 값 :=(-1.0 * B[i]) / A[i]

      • val이 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의 값에 대해 수행

    • 값이 최대값과 같으면

      • 디스플레이 키

      • 루프에서 나오다

  • 표시 최대값 + 개수

예제(파이썬)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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