কম্পিউটার

পাইথনে চমৎকার সাবয়ারের সংখ্যা গণনা করার প্রোগ্রাম


ধরুন আমাদের nums নামে একটি অ্যারে আছে এবং আরেকটি মান k। আমাদের চমৎকার সাব-অ্যারের সংখ্যা খুঁজে বের করতে হবে। একটি সাবঅ্যারেকে চমৎকার সাবঅ্যারে বলা হয় যদি এতে k বিজোড় সংখ্যা থাকে।

সুতরাং, ইনপুট যদি nums =[1,1,2,1,1], k =3 এর মত হয়, তাহলে আউটপুট হবে 2 কারণ দুটি সাবয়ারে [1,1,2,1] এবং [1,2] ,1,1]।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • odd_i :=একটি নতুন তালিকা

  • আমি 0 থেকে সংখ্যার আকার - 1 এর মধ্যে, কর

    • যদি nums[i] mod 2 1 এর মত হয়, তাহলে

      • odd_i

        এর শেষে i ঢোকান
  • শুরু :=0, শেষ :=k - 1

  • i :=0

  • গণনা :=0

  • শেষে

    • যদি প্রান্তটি odd_i - 1 এর আকারের সমান হয়, তাহলে

      • j :=সংখ্যার আকার - 1

    • অন্যথায়,

      • j :=odd_i[শেষ + 1] - 1

    • গণনা :=গণনা +(বিজোড়_i[শুরু] - i + 1) *(j - odd_i[শেষ] + 1)

    • i :=odd_i[start] + 1

    • start :=start + 1

    • end :=end + 1

  • ফেরত গণনা

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

def solve(nums, k):
   odd_i = []
   for i in range(len(nums)):
      if nums[i] % 2 == 1:
         odd_i.append(i)
   start = 0
   end = k - 1
   i = 0
   count = 0
   while end < len(odd_i):
      if end == len(odd_i) - 1:
         j = len(nums) - 1
      else:
         j = odd_i[end + 1] - 1
      count = count + (odd_i[start] - i + 1) * (j - odd_i[end] + 1)
      i = odd_i[start] + 1
      start = start + 1
      end = end + 1
   return count

nums = [1,1,2,1,1]
k = 3
print(solve(nums, k))

ইনপুট

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

আউটপুট

2

  1. পাইথনে দুটি মানচিত্রে ওভারল্যাপিং দ্বীপের সংখ্যা গণনা করার প্রোগ্রাম

  2. পাইথনে s-এ স্বতন্ত্র সাবস্ট্রিংয়ের সংখ্যা গণনা করার জন্য প্রোগ্রাম

  3. পাইথনে প্রতিটি বন্ধনী গভীরতায় অক্ষরের সংখ্যা গণনা করার প্রোগ্রাম

  4. পাইথনে n নোড সহ BST সংখ্যা গণনা করার প্রোগ্রাম