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

Python에서 회전된 배열의 최대 가중치 합을 찾는 프로그램

<시간/>

몇 개의 요소로 구성된 배열이 있다고 가정합니다. 배열 요소가 회전되면 최대 가중치 합을 찾아야 합니다. 배열 nums의 가중치 합은 다음과 같이 계산할 수 있습니다. -

$$\mathrm{𝑆=\sum_{\substack{𝑖=1}}^{n}𝑖∗𝑛𝑢𝑚𝑠[𝑖]}$$

따라서 입력이 L =[5,3,4]와 같으면 출력은 26이 됩니다.

  • 배열은 [5,3,4]이고 합계는 5 + 2*3 + 3*4 =5 + 6 + 12 =23입니다.

  • 배열은 [3,4,5]이고 합계는 3 + 2*4 + 3*5 =3 + 8 + 15 =26(최대)

  • 배열은 [4,5,3]이고 합계는 4 + 2*5 + 3*3 =4 + 10 + 9 =23입니다.

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

  • n :=숫자 크기
  • sum_a :=nums에 있는 모든 요소의 합
  • ans :=0에서 n 사이의 모든 i에 대한 (nums[i] *(i + 1))의 모든 요소의 합
  • cur_val :=및
  • 0 ~ n - 1 범위의 i에 대해
    • cur_val :=cur_val - sum_a + nums[i] * n
    • ans :=ans 및 cur_val의 최대값
  • 반환

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

def solve(nums):
    n = len(nums)
    sum_a = sum(nums)
    cur_val = ans = sum(nums[i] * (i + 1) for i in range(n))
   
    for i in range(n):
        cur_val = cur_val - sum_a + nums[i] * n
        ans = max(ans, cur_val)
   
    return ans

nums = [5,3,4]
print(solve(nums))

입력

[5,3,4]

출력

26