Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kiểm tra mảng có chứa các số liên tiếp trong Python

Cho mảng nums. Kiểm tra xem các phần tử có tạo thành dãy số liên tiếp hay không (chỉ số dương).

Ví dụ: [6,8,3,5,4,7] → các số 3,4,5,6,7,8 → True.

Giải thuật

  • Tìm min, max. Nếu max - min + 1 == n thì có thể là dãy liên tiếp.
  • Dùng kỹ thuật đánh dấu âm: với mỗi phần tử, tính chỉ số j = nums[i] - min (hoặc -nums[i] - min nếu âm). Đánh dấu nums[j] âm. Nếu gặp phần tử đã âm → trùng lặp → False.

Mã ví dụ

def solve(nums):
    if len(nums) < 1:
        return False
    min_val = min(nums)
    max_val = max(nums)
    if max_val - min_val + 1 == len(nums):
        for i in range(len(nums)):
            if nums[i] < 0:
                j = -nums[i] - min_val
            else:
                j = nums[i] - min_val
            if nums[j] > 0:
                nums[j] = -nums[j]
            else:
                return False
        return True
    return False

nums = [6, 8, 3, 5, 4, 7]
print(solve(nums))

Đầu vào

[6, 8, 3, 5, 4, 7]

Đầu ra

True