สมมติว่าเรามีอาร์เรย์จำนวนเต็มที่ไม่ว่างเปล่า เราต้องหาจำนวนการเคลื่อนไหวน้อยที่สุดที่จำเป็นเพื่อทำให้องค์ประกอบทั้งหมดในอาร์เรย์เท่ากัน โดยการเคลื่อนไหวคือการเพิ่มหรือลดองค์ประกอบที่เลือกลง 1 ดังนั้นเมื่ออาร์เรย์เป็น [1, 2, 3] ผลลัพธ์จะเป็น 2 เพราะ 1 จะเพิ่มเป็น 2 และ 3 จะลดเป็น 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนต่อไปนี้ −
- เรียงอาร์เรย์ nums
- ตั้ง counter เป็น 0
- for i ใน nums ทำ
- counter := counter + ค่าสัมบูรณ์ของ (i - nums[ความยาวของ nums / 2])
- คืนค่า counter
ตัวอย่าง (Python)
มาดูการนำไปใช้เพื่อความเข้าใจที่ดีขึ้น −
class Solution:
def minMoves2(self, nums):
nums.sort()
counter = 0
for i in nums:
counter += abs(i - nums[len(nums)//2])
return counter
ob1 = Solution()
print(ob1.minMoves2([2, 5, 3, 4]))
อินพุต
[2,5,3,4]
ผลลัพธ์
4