Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm mảng con dài nhất 1s sau khi xóa một phần tử bằng Python

Giả sử chúng ta có một mảng nhị phân gọi là nums, chúng ta có thể xóa một phần tử khỏi nó. Chúng ta phải tìm kích thước của mảng con dài nhất không trống chỉ chứa 1 trong mảng kết quả. Nếu không có mảng con nào như vậy, thì trả về 0.

Vì vậy, nếu đầu vào giống như nums =[1,0,1,1,1,0,1,1,0], thì đầu ra sẽ là 5 vì bằng cách loại bỏ 0 khỏi vị trí 5, chúng ta có thể nhận được một mảng con [1 , 1,1,1,1] có năm số 1.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu 0 không có trong nums thì

    • kích thước trả về của nums - 1

  • nếu 1 không có trong nums, thì

    • trả về 0

  • a:=một danh sách mới

  • cnt:=0

  • đối với mỗi tôi trong nums, hãy thực hiện

    • nếu tôi giống 0, thì

      • nếu cnt không giống 0, thì

        • chèn cnt vào cuối

        • cnt:=0

      • chèn tôi vào cuối

      • nếu không,

        • cnt:=cnt + 1

  • nếu cnt không giống 0, thì

    • chèn cnt vào cuối

  • Tối đa:=0

  • đối với tôi trong phạm vi từ 0 đến kích thước của a, do

    • nếu [i] không giống 0 thì

      • chuyển sang lần lặp tiếp theo

    • nếu [i] giống 0 và i giống với kích thước của a - 1 thì

      • Max:=tối đa của Max và a [i-1]

    • ngược lại khi [i] giống 0 và i giống 0 thì

      • Max:=tối đa của Max và a [i + 1]

    • ngược lại khi [i] giống 0 thì

      • Max:=tối đa của Max và (a [i + 1] + a [i-1])

  • trả về Tối đa

Ví dụ

def solve(nums):
   if 0 not in nums:
      return len(nums)-1
   if 1 not in nums:
      return 0
      a = []
      cnt = 0
      for i in nums:
         if i == 0:
            if cnt != 0:
               a.append(cnt)
               cnt = 0
            a.append(i)
         else:
            cnt += 1
      if cnt!=0:
         a.append(cnt)
      Max = 0
      for i in range(len(a)):
         if a[i] != 0:
            continue
         if a[i] == 0 and i == len(a)-1:
            Max = max(Max,a[i-1])
         elif a[i] == 0 and i == 0:
            Max = max(Max,a[i+1])
         elif a[i] == 0:
            Max = max(Max,a[i+1]+a[i-1])
   return Max
nums = [1,0,1,1,1,0,1,1,0]
print(solve(nums))

Đầu vào

[1,0,1,1,1,0,1,1,0]

Đầu ra

5