ให้ลิสต์ nums และ k สามารถ Negate (คูณ -1) ได้ทุกครั้งที่เลือกสมาชิก ต้องทำครบ k ครั้ง หาผลรวมสูงสุด
ตัวอย่าง: nums=[2,1,-6,-2], k=3 → 9 (Negate -6, -2, 1 → [2,-1,6,2] Sum=9)
ขั้นตอน (Greedy + Sort)
- เรียง
numsจากน้อยไปมาก - Negate ตัวเลขติดลบตั้งแต่น้อยที่สุด จนกว่า
k=0หรือหมดตัวติดลบ - ถ้า
kเหลือเป็นคี่: ลบ2*min(nums)ออกจากผลรวม (Negate ตัวเล็กที่สุดอีกครั้ง) - คืนผลรวม
ตัวอย่างโค้ด
def solve(nums, k):
n = len(nums)
if n == 0:
return 0
nums.sort()
for idx in range(n):
if nums[idx] < 0 and k > 0:
k -= 1
nums[idx] *= -1
if k & 1 == 1:
return sum(nums) - 2 * min(nums)
return sum(nums)
nums = [2, 1, -6, -2]
k = 3
print(solve(nums, k)) # Output: 9อินพุต
[2, 1, -6, -2], 3
เอาต์พุต
9