Tôi là một danh sách con Python khổng lồ

Viết chương trình Python để tính tổng lớn nhất và nhỏ nhất của một danh sách con trong một danh sách các danh sách cho trước

Giải pháp mẫu

Mã Python

def max_min_sublist[lst]:
    max_result = [max[lst, key=sum]]
    min_result = [min[lst, key=sum]]
    return max_result,min_result

nums = [[1,2,3,5], [2,3,5,4], [0,5,4,1], [3,7,2,1], [1,2,1,2]]
print["Original list:"]
print[nums]
result = max_min_sublist[nums]
print["\nMaximum sum of sub list of the said list of lists:"]
print[result[0]]
print["\nMinimum sum of sub list of the said list of lists:"]
print[result[1]]

Đầu ra mẫu

Original list:
[[1, 2, 3, 5], [2, 3, 5, 4], [0, 5, 4, 1], [3, 7, 2, 1], [1, 2, 1, 2]]

Maximum sum of sub list of the said list of lists:
[2, 3, 5, 4]

Minimum sum of sub list of the said list of lists:
[1, 2, 1, 2]

trình bày bằng hình ảnh


Sơ đồ


Trực quan hóa việc thực thi mã Python

Công cụ sau đây trực quan hóa những gì máy tính đang thực hiện từng bước khi nó thực thi chương trình nói trên

Giả sử chúng ta có một mảng A. Chúng ta phải tìm danh sách con liền kề có tổng lớn nhất và cũng trả về tổng của nó. Vì vậy, nếu mảng A giống như A = [-2,1,-3,4,-1,2,1,-5,4], thì tổng sẽ là 6. Và mảng con sẽ là [4, -1, 2, 1]

Để giải quyết vấn đề này, chúng tôi sẽ cố gắng sử dụng phương pháp Lập trình động

  • xác định một mảng dp giống như kích thước của A và điền nó bằng 0

  • dp[0]. = A[0]

  • cho tôi. = 1 với kích thước của A – 1

    • dp[i]. = tối đa của dp[i – 1] + A[i] và A[i]

  • trả về giá trị tối đa tính bằng dp

Chúng ta hãy xem triển khai sau đây để hiểu rõ hơn -

Ví dụ

Bản thử trực tiếp

class Solution[object]:
   def solve[self, nums]:
      dp = [0 for i in range[len[nums]]]
      dp[0] = nums[0]
      for i in range[1,len[nums]]:
         dp[i] = max[dp[i-1]+nums[i],nums[i]]
      return max[dp]
nums = [-2,1,-3,7,-2,2,1,-5,4]
ob1 = Solution[]
print[ob1.solve[nums]]

Đầu vào

[-2,1,-3,7,-2,2,1,-5,4]

đầu ra

8

Chúng ta có thể duyệt qua các danh sách bên trong danh sách và tính tổng tất cả các phần tử trong một danh sách nhất định và bằng hàm max lấy tổng tối đa của tất cả các phần tử trong danh sách của danh sách.  

con trăn




8
6

8
7

8
8

8
9

 

33
0
33
0

33
1
33
2
33
3
33
4

 

33
1
33
6

33
1
33
8
33
9
33
0
33
1

33
2
33
3
33
3
33
4

33
2____57

33
2
33
8
class Solution[object]:
   def solve[self, nums]:
      dp = [0 for i in range[len[nums]]]
      dp[0] = nums[0]
      for i in range[1,len[nums]]:
         dp[i] = max[dp[i-1]+nums[i],nums[i]]
      return max[dp]
nums = [-2,1,-3,7,-2,2,1,-5,4]
ob1 = Solution[]
print[ob1.solve[nums]]
50
33
0
class Solution[object]:
   def solve[self, nums]:
      dp = [0 for i in range[len[nums]]]
      dp[0] = nums[0]
      for i in range[1,len[nums]]:
         dp[i] = max[dp[i-1]+nums[i],nums[i]]
      return max[dp]
nums = [-2,1,-3,7,-2,2,1,-5,4]
ob1 = Solution[]
print[ob1.solve[nums]]
52

class Solution[object]:
   def solve[self, nums]:
      dp = [0 for i in range[len[nums]]]
      dp[0] = nums[0]
      for i in range[1,len[nums]]:
         dp[i] = max[dp[i-1]+nums[i],nums[i]]
      return max[dp]
nums = [-2,1,-3,7,-2,2,1,-5,4]
ob1 = Solution[]
print[ob1.solve[nums]]
53
33
3____255
33
3
class Solution[object]:
   def solve[self, nums]:
      dp = [0 for i in range[len[nums]]]
      dp[0] = nums[0]
      for i in range[1,len[nums]]:
         dp[i] = max[dp[i-1]+nums[i],nums[i]]
      return max[dp]
nums = [-2,1,-3,7,-2,2,1,-5,4]
ob1 = Solution[]
print[ob1.solve[nums]]
57

33
2_______52
33
3
33
1____52
33
3
33
4

33
2

33
1
33
7
33
2

33
1

8
60

8
61
33
3
8
63
8
64
8
65
8
66
8
65
8
68
8
69
8
70
8
65
8
72
8
65
8
74
8
69
8
76
8
65
8
78
8
65
8
80
8
69
8
82
8
65
8
84__
8
65
8
8

Chủ Đề