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

โปรแกรมหาตัวเลขที่หายไปจาก 1 ถึง N ใน Python

สมมติว่ามีรายการตัวเลขชื่อ nums ขนาด n ที่ทุกตัวเลขอยู่ในช่วง [1, n] บางตัวอาจปรากฏสองครั้ง ส่วนอื่นหนึ่งครั้ง เราต้องหาตัวเลขทั้งหมดใน [1, n] ที่ไม่อยู่ในรายการ คืนค่าเรียงเพิ่มขึ้น พยายามหาวิธีที่ใช้เวลาเชิงเส้นและพื้นที่คงที่

เช่น ถ้าอินพุตคือ [4, 4, 2, 2, 6, 6] ผลลัพธ์จะเป็น [1, 3, 5]

ขั้นตอนการแก้ปัญหา

  • arr := อาร์เรย์ขนาด nums + 1 เติม 0
  • สำหรับแต่ละ i ใน nums arr[i] := arr[i] + 1
  • missing := รายการใหม่
  • for i ในช่วง 0 ถึงขนาดของ arr ถ้า arr[i] == 0 และ i != 0 ใส่ i เข้า missing
  • คืนค่า missing

ตัวอย่างโค้ด

class Solution:
    def solve(self, nums):
        arr = [0] * (len(nums) + 1)
        for i in nums:
            arr[i] += 1
        missing = []
        for i in range(len(arr)):
            if arr[i] == 0 and i != 0:
                missing.append(i)
        return missing

ob = Solution()
print(ob.solve([4, 4, 2, 2, 6, 6]))

อินพุต

[4, 4, 2, 2, 6, 6]

เอาต์พุต

[1, 3, 5]