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

পাইথনে ট্রিপলেট কাউন্ট যাদের যোগফল টার্গেটের চেয়ে ছোট (3Sum Smaller)

দেওয়া লিস্ট nums এবং টার্গেট target। সাবসেকশন i < j < k যাতে nums[i] + nums[j] + nums[k] < target, সেই ট্রিপলেটের সংখ্যা গণনা করতে হবে।

উদাহরণ: nums=[-2,6,4,3,8], target=12 → ৫টি ট্রিপলেট: [-2,6,4], [-2,6,3], [-2,4,3], [-2,4,8], [-2,3,8]।

টু-পয়েন্টার অপ্টিমাইজেশন

  1. অ্যারে সর্ট করুন।
  2. প্রতিটি i (০ থেকে n-3) এর জন্য:
    • k = n-1 (ডান পয়েন্টার)।
    • প্রতিটি j (i+1 থেকে n-2) এর জন্য:
      • যখন k > j এবং nums[i] + nums[j] + nums[k] >= target: k--।
      • যদি j == k: ব্রেক।
      • ভ্যালিড ট্রিপলেটের সংখ্যা: k - j (কারণ j+1 ... k সব ভ্যালিড)।

পাইথন কোড

class Solution:
    def solve(self, nums, target):
        nums.sort()
        ans = 0
        n = len(nums)
        for i in range(n):
            k = n - 1
            for j in range(i + 1, n):
                while k > j and nums[i] + nums[k] + nums[j] >= target:
                    k -= 1
                if j == k:
                    break
                ans += k - j
        return ans

ob1 = Solution()
print(ob1.solve([-2, 6, 4, 3, 8], 12))  # 5

টাইম কমপ্লেক্সিটি: O(n²), স্পেস: O(1)। sорту করায় ইনার লুপ O(n) এ চলে।

  1. পাইথনে বাইনারি ট্রিতে যেসব পথের যোগফল k তাদের সংখ্যা গুনার প্রোগ্রাম

  2. পাইথনে সংখ্যা স্বতন্ত্র ফ্যাক্টোরিয়াল যোগফল হিসেবে প্রকাশযোগ্য কিনা যাচাই করার প্রোগ্রাম

  3. পাইথনে দেয়া সংখ্যা নার্সিসিস্টিক নম্বর কিনা যাচাই করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম: কোনো সংখ্যা প্রাইম কিনা তা যাচাই করা