ধরুন আমাদের কাছে nums নামে একটি সংখ্যার তালিকা রয়েছে এবং আমাদের কাছে প্রশ্নের তালিকাও রয়েছে। যেখানে প্রতিটি প্রশ্নের উপাদান রয়েছে [i, j]। সুতরাং এই প্রশ্নটি জিজ্ঞাসা করছে যে [i, j] (উভয়ই অন্তর্ভুক্ত) থেকে সংখ্যার সাবলিস্টটি একটি গাণিতিক ক্রম বা না। তাই পরিশেষে আমাদের খুঁজে বের করতে হবে এমন প্রশ্নের সংখ্যা যা সত্য ফিরে আসে।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[2, 4, 6, 8, 7, 6, 5, 2] প্রশ্ন =[[3, 4],[0, 3],[2, 4]], তাহলে আউটপুট হবে 2, কারণ [2, 4, 6, 8] একটি গাণিতিক ক্রম, তাই ক্যোয়ারী [0, 3] সত্য। এবং [8, 7] এর জন্যও একটি গাণিতিক ক্রম, তাই প্রশ্ন [3, 4]ও সত্য। কিন্তু [6, 8, 7] একটি গাণিতিক ক্রম নয়, তাই [2, 4] সত্য নয়।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- সংখ্যা খালি হলে, তারপর
- রিটার্ন 0
- n :=সংখ্যার আকার
- diff :=0 থেকে n - 2 রেঞ্জের প্রতিটি i এর জন্য উপাদান সহ একটি তালিকা (সংখ্যা[i + 1] - সংখ্যা[i])
- rle :=আকারের একটি তালিকা (n - 1) এবং 0 দিয়ে পূরণ করুন
- আমি 0 থেকে n - 2 রেঞ্জের জন্য, কর
- যদি i> 0 এবং diff[i] diff[i - 1] এর মত হয়, তাহলে
- rle[i] :=rle[i - 1] + 1
- অন্যথায়,
- rle[i] :=1
- যদি i> 0 এবং diff[i] diff[i - 1] এর মত হয়, তাহলে
- উত্তর :=0
- প্রত্যেকটি (i, j) প্রশ্নের জন্য, করুন
- যদি i j এর মত হয়, তাহলে
- উত্তর :=উত্তর + ১
- অন্যথায়,
- উত্তর :=উত্তর + (1 যদি rle[j - 1]>=(j - i), অন্যথায় 0)
- যদি i j এর মত হয়, তাহলে
- উত্তর ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(nums, queries): if not nums: return 0 n = len(nums) diff = [nums[i + 1] - nums[i] for i in range(n - 1)] rle = [0] * (n - 1) for i in range(n - 1): if i > 0 and diff[i] == diff[i - 1]: rle[i] = rle[i - 1] + 1 else: rle[i] = 1 ans = 0 for i, j in queries: if i == j: ans += 1 else: ans += rle[j - 1] >= (j - i) return ans nums = [2, 4, 6, 8, 7, 6, 5, 2] queries = [[3, 4],[0, 3],[2, 4]] print(solve(nums, queries))
ইনপুট
[2, 4, 6, 8, 7, 6, 5, 2], [[3, 4],[0, 3],[2, 4]]
আউটপুট
2