কম্পিউটার টিউটোরিয়াল

পাইথনে নাইস সাবঅ্যারে গণনা করার প্রোগ্রাম


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

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

সমাধানের ধাপসমূহ

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

  • i = 0 থেকে nums-এর আকার - 1 পর্যন্ত লুপ চালান:

    • যদি nums[i] % 2 == 1 হয়, তবে:

      • i-কে odd_i-এর শেষে যোগ করুন

  • start := 0, end := k - 1

  • i := 0

  • count := 0

  • end < odd_i-এর আকার থাকাকালীন লুপ চালান:

    • যদি end == odd_i-এর আকার - 1 হয়, তবে:

      • j := nums-এর আকার - 1

    • অন্যথায়:

      • 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

  • count রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:

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,1,2,1,1], 3

আউটপুট

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

  2. পাইথনে স্ট্রিং-এর সকল ভিন্ন উপস্ট্রিংয়ের সংখ্যা বের করার প্রোগ্রাম

  3. পাইথনে ব্র্যাকেট ডেপথ অনুযায়ী ক্যারেক্টার কাউন্ট করা

  4. পাইথন প্রোগ্রাম - n নোড দিয়ে BST-এর সংখ্যা বের করুন