मान लीजिए हमारे पास संख्याओं का एक क्रम nums है, और दो अन्य ऐरे l और r आकार m के हैं, ये l और r रेंज क्वेरी को दर्शाते हैं जैसे [l[i], r[i]]। हमें एक बूलियन अनुक्रम ans ढूंढना है, जहां ans[i] तब true होता है जब सबऐरे nums[l[i]], nums[l[i]+1], ... 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 :=lके आकार की सूची और सभीTrueमानों से भरीiको 0 सेlen(l)-1तक:data := nums[l[i]:r[i]+1]सबलिस्टdataसूची को सॉर्ट करेंd := []jको 0 सेlen(data)-2तक:data[j+1] - data[j]कोdके अंत में डालें
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]