สมมติว่าเรามีรายการที่เรียงแล้ว A เราต้องคืนค่าความยาวของอาร์เรย์หลังจากลบรายการซ้ำทั้งหมด เราต้องทำในพื้นที่เพิ่ม O(1) นั่นคือต้องดำเนินการในที่เดิม (in-place)
ตัวอย่างเช่น สมมติ A = [1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 5, 5, 5, 6] ผลลัพธ์จะเป็น 6 เนื่องจากมีองค์ประกอบที่แตกต่างกัน 6 ตัว
วิธีการแก้ปัญหา
- ถ้ารายการว่าง ให้คืนค่า 0
- มิฉะนั้น เริ่มต้น prev = องค์ประกอบแรกของ A และกำหนด length = 0
- สำหรับ i := 1 ถึง n-1:
- ถ้า A[i] ไม่เหมือน prev:
- length := length + 1
- prev := A[i]
- ถ้า A[i] ไม่เหมือน prev:
- คืนค่า length
ตัวอย่าง (Python)
class Solution(object):
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 0:
return 0
length = 1
previous = nums[0]
index = 1
for i in range(1, len(nums)):
if nums[i] != previous:
length += 1
previous = nums[i]
nums[index] = nums[i]
index += 1
return length
input_list = [1,1,2,2,2,3,3,3,3,4,5,5,5,6]
ob1 = Solution()
print(ob1.removeDuplicates(input_list))
อินพุต
[1,1,2,2,2,3,3,3,3,4,5,5,5,6]
เอาต์พุต
6