মান লিজিয়ে একটি নাম্বার সিকোয়েন্স nums এবং আরেকটি দুটি অ্যারে l এবং r সাইজ m, এগুলো রেঞ্জ কোয়েরি রিপ্রেজেন্ট করে [l[i], r[i]]। আমাদের একটি বুলিয়ান সিকোয়েন্স ans বের করতে হবে, যেখানে ans[i] হবে true যদি সাব-অ্যারে nums[l[i]] ... nums[r[i]] কে রি-অ্যারেঞ্জ করে আর্থমেটিক সিকোয়েন্স বানানো যায়, অন্যথায় false।
একটি সিকোয়েন্স আর্থমেটিক বলা হয় যদি সেটিতে কমপক্ষে দুটি এলিমেন্ট থাকে এবং প্রতিটি দুটি পরপর এলিমেন্টের পার্থক্য একই থাকে। উদাহরণ: [2,4,6,8,10], [5,5,5,5], [4,-2,-8,-14] আর্থমেটিক, কিন্তু [2,2,3,6,9] নয়।
যেমন, ইনপুট হলে nums = [6,8,7,11,5,9], l = [0,0,2], r = [2,3,5], তবে আউটপুট হবে [True, False, True] কারণ:
কোয়েরি
[0,2]: সিকোয়েন্স[6,8,7], রি-অ্যারেঞ্জ[6,7,8]- ভ্যালিডকোয়েরি
[0,3]:[6,8,7,11]- আর্থমেটিক নয়কোয়েরি
[2,5]:[7,11,5,9], রি-অ্যারেঞ্জ[5,7,9,11]- ভ্যালিড
সমাধানের ধাপসমূহ
new := [True]*len(l)i = 0থেকেlen(l)-1পর্যন্ত:data := nums[l[i]:r[i]+1]data.sort()d := []j = 0থেকেlen(data)-2পর্যন্ত:d.append(data[j+1] - data[j])d := list(set(d))যদি
len(d) != 1হয়, তবেnew[i] = False
newরিটার্ন করুন।
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
def solve(nums, l, r):
new = [True] * len(l)
for i in range(len(l)):
data = nums[l[i]:r[i]+1]
data.sort()
d = []
for j in range(len(data) - 1):
d.append(data[j+1] - data[j])
d = list(set(d))
if len(d) != 1:
new[i] = False
return new
nums = [6,8,7,11,5,9]
l = [0,0,2]
r = [2,3,5]
print(solve(nums, l, r))ইনপুট
[6,8,7,11,5,9], [0,0,2], [2,3,5]
আউটপুট
[True, False, True]