Đưa ra một danh sách với các số được sắp xếp, chúng tôi muốn tìm ra những số nào bị thiếu trong phạm vi số đã cho Show với phạm vichúng ta có thể thiết kế một vòng lặp for để kiểm tra phạm vi số và sử dụng điều kiện if với toán tử not in để kiểm tra các phần tử còn thiếu Giả sử chúng ta có một danh sách các số được gọi là nums kích thước n trong đó tất cả các số trong danh sách đều có mặt trong khoảng [1, n] một số phần tử có thể xuất hiện hai lần trong khi những phần tử khác chỉ xuất hiện một lần. Ta phải tìm tất cả các số từ [1, n] sao cho chúng không có trong danh sách. Chúng ta phải trả về các số được sắp xếp theo thứ tự tăng dần. Chúng ta phải cố gắng tìm một giải pháp có thời gian tuyến tính và không gian không đổi Vì vậy, nếu đầu vào là [4, 4, 2, 2, 6, 6], thì đầu ra sẽ là [1, 3, 5] Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
Chúng ta hãy xem triển khai sau đây để hiểu rõ hơn - Thí dụBản thử trực tiếp 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])) Đầu vào[4, 4, 2, 2, 6, 6] đầu ra[1, 3, 5] Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực thi chương trình nói trên Trình chỉnh sửa mã Python Đóng góp mã và nhận xét của bạn thông qua Disqus Trước. Viết chương trình Python để tìm một số còn thiếu trong danh sách Mức độ khó của bài tập này là gì? Dễ dàng trung bình khóKiểm tra kỹ năng Lập trình của bạn với bài kiểm tra của w3resource Theo dõi chúng tôi trên Facebook và Twitter để cập nhật thông tin mới nhất. con trăn. Lời khuyên trong ngàyQuản lý bộ nhớ getrefcount sẽ hiển thị số lần một đối tượng được sử dụng trong bộ nhớ. Đó là một công cụ tuyệt vời có thể được sử dụng để quản lý bộ nhớ trong bất kỳ chương trình nào và nó cũng rất tiện lợi Getrefcount sẽ tính toán mức sử dụng đối tượng ở mức ByteCode thấp để nó có thể có xu hướng cao hơn dự kiến. Ví dụ: khi bạn in một giá trị, giá trị đó thực sự được xử lý nhiều lần ở chế độ nền bên trong chính hàm in và getrefcount cũng đếm phiên bản khi giá trị đó được gọi bằng chính phương thức getrefcount. Vì vậy, thật an toàn khi nói rằng số lượng thực tế sẽ luôn cao hơn ít nhất 1 lần so với dự kiến Nếu trình tự đầu vào được sắp xếp, bạn có thể sử dụng bộ tại đây. Lấy giá trị bắt đầu và kết thúc từ danh sách đầu vào
Điều này giả sử Python 3; Cuộc gọi Thử nghiệm
Một cách tiếp cận khác là phát hiện khoảng cách giữa các số tiếp theo;
Đây là thao tác O(n) thuần túy và nếu bạn biết số lượng mục bị thiếu, bạn có thể đảm bảo rằng nó chỉ tạo ra những mục đó rồi dừng lại Có nhiều cách để giải quyết vấn đề này bằng Python. Trong bài viết này, chúng tôi sẽ đề cập đến những điều đơn giản nhất thuật toánBước 1. Tạo một mảng trống cho các mục bị thiếu Bước 2. Lặp qua các phần tử trong phạm vi của phần tử đầu tiên và cuối cùng của mảng Bước 3. So sánh biến vòng lặp với mảng đã cho nếu giá trị không xuất hiện, hãy thêm nó vào mảng bị thiếu Ghi chú. Mảng phải được sắp xếp để làm việc này. Sử dụng Giải pháp 1
đầu ra 2. Sử dụng danh sách hiểu
đầu ra ________số 8_______Sử dụng khả năng hiểu danh sách, chúng tôi gói gọn giải pháp trên trong một dòng 3. Sử dụng Bộ()________ 16 ________ là kiểu dữ liệu có thể thay đổi không theo thứ tự của Python chỉ chứa các giá trị duy nhất
đầu ra
Ở đây, chúng tôi đã tạo một đối tượng tập hợp có các giá trị trong phạm vi giá trị ban đầu và giá trị cuối cùng của mảng được cung cấp, sau đó so sánh nó với mảng được cung cấp để lấy giá trị còn thiếu |