Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ลบค่าซ้ำจากอาร์เรย์ที่เรียงแล้วใน Python

สมมติว่าเรามีรายการที่เรียงแล้ว 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]
  • คืนค่า 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