ปัญหา
มีอาร์เรย์ nums หาผลรวมสัมบูรณ์สูงสุดของย่อยอาร์เรย์ใดๆ (รวมถึงย่อยอาร์เรย์ว่าง) คือ |sum|
ตัวอย่าง
nums = [2,-4,-3,2,-6] → ผลลัพธ์ 11 เพราะย่อยอาร์เรย์ [2,-4,-3,2] ให้ |2-4-3+2| = 11
ขั้นตอนการแก้ปัญหา
n := len(nums), ans := 0, temp := 0- วนลูป
iจาก 0 ถึง n-1 (หาผลรวมบวกสูงสุด):- ถ้า
temp < 0:temp := 0 temp += nums[i]ans := max(ans, abs(temp))
- ถ้า
temp := 0- วนลูป
iจาก 0 ถึง n-1 (หาผลรวมลบสูงสุด):- ถ้า
temp > 0:temp := 0 temp += nums[i]ans := max(ans, abs(temp))
- ถ้า
- คืน
ans
การนำไปใช้งาน (Python)
def solve(nums):
n = len(nums)
ans = 0
temp = 0
for i in range(n):
if temp < 0:
temp = 0
temp += nums[i]
ans = max(ans, abs(temp))
temp = 0
for i in range(n):
if temp > 0:
temp = 0
temp += nums[i]
ans = max(ans, abs(temp))
return ans
nums = [2,-4,-3,2,-6]
print(solve(nums))
อินพุต
[2,-4,-3,2,-6]
เอาต์พุต
11