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