Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาผลรวมถ่วงน้ำหนักสูงสุดสำหรับอาร์เรย์ที่หมุนใน Python


สมมติว่าเรามีอาร์เรย์ขององค์ประกอบบางอย่าง เราจะต้องหาผลรวมถ่วงน้ำหนักสูงสุดหากองค์ประกอบอาร์เรย์ถูกหมุน ผลรวมถ่วงน้ำหนักของจำนวนอาร์เรย์สามารถคำนวณได้ดังนี้ -

$$\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 :=ขนาดของ nums
  • sum_a :=ผลรวมขององค์ประกอบทั้งหมดเป็น nums
  • ans :=ผลรวมขององค์ประกอบทั้งหมดของ (nums[i] *(i + 1)) สำหรับ i ทั้งหมดในช่วง 0 ถึง n
  • cur_val :=ans
  • สำหรับฉันในช่วง 0 ถึง n - 1 ทำ
    • 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