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

โปรแกรมค้นหาความยาวของชุด 1 วินาทีที่ยาวที่สุดโดยพลิก k บิตใน Python


สมมติว่าเรามีรายการไบนารี ดังนั้นที่นี่มีเพียง 1 และ 0 เท่านั้นที่มีและเรายังมีตัวเลข k อีกตัว เราสามารถตั้งค่าได้มากที่สุด k 0s ถึง 1s เราต้องหาความยาวของรายการย่อยที่ยาวที่สุดที่มี 1s ทั้งหมด

ดังนั้น หากอินพุตเป็น nums =[0, 1, 1, 0, 0, 1, 1] k =2 ผลลัพธ์จะเป็น 6 เนื่องจากเราสามารถตั้งค่า 0s ตรงกลางสองตัวเป็น 1s จากนั้นรายการจะกลายเป็น [0, 1, 1, 1, 1, 1, 1].

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ศูนย์ :=0, ans :=0, j :=0
  • สำหรับแต่ละดัชนี i และค่า n เป็น nums ทำ
    • ศูนย์ :=ศูนย์ + (1 เมื่อ n เท่ากับ 0 มิฉะนั้น 0)
    • ในขณะที่ศูนย์> k ทำ
      • ศูนย์ :=ศูนย์ - (1 เมื่อ nums[j] เท่ากับ 0 มิฉะนั้น 0)
      • j :=j + 1
    • ถ้า i - j + 1> แล้ว
      • ตอบ :=i - j + 1
  • คืนสินค้า

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:
   def solve(self, nums, k):
      zeros = 0
      ans = 0
      j = 0
      for i, n in enumerate(nums):
         zeros += n == 0
         while zeros > k:
            zeros -= nums[j] == 0
            j += 1
         if i - j + 1 > ans:
            ans = i - j + 1
      return ans
ob = Solution()
nums = [0, 1, 1, 0, 0, 1, 1]
k = 2
print(ob.solve(nums, k))

อินพุต

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

ผลลัพธ์

6