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

Chương trình tìm tổng có trọng số tối đa cho mảng được xoay trong Python

Giả sử chúng ta có một mảng gồm vài phần tử. Chúng ta sẽ phải tìm tổng có trọng số lớn nhất nếu các phần tử của mảng được xoay. Tổng trọng số của một số mảng có thể được tính như sau -

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

Vì vậy, nếu đầu vào là L =[5,3,4], thì đầu ra sẽ là 26 vì

  • mảng là [5,3,4], tổng là 5 + 2 * 3 + 3 * 4 =5 + 6 + 12 =23

  • mảng là [3,4,5], tổng là 3 + 2 * 4 + 3 * 5 =3 + 8 + 15 =26 (tối đa)

  • mảng là [4,5,3], tổng là 4 + 2 * 5 + 3 * 3 =4 + 10 + 9 =23

Để 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 nums
  • sum_a:=tổng của tất cả các phần tử trong nums
  • ans:=tổng tất cả các phần tử của (nums [i] * (i + 1)) cho mọi i trong phạm vi từ 0 đến n
  • cur_val:=ans
  • đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
    • cur_val:=cur_val - sum_a + nums [i] * n
    • ans:=tối đa là ans và cur_val
  • trả lại ans

Ví dụ

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

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))

Đầu vào

[5,3,4]

Đầu ra

26