मान लीजिए हमारे पास अद्वितीय तत्वों की एक सरणी nums है। हमें जांचना है कि क्या इसकी एक उपसरणी को उलटने से सरणी क्रमबद्ध हो जाएगी। यदि सरणी पहले से क्रमबद्ध है, तो भी True लौटाएं।
उदाहरण के लिए, यदि nums = [4, 6, 27, 25, 15, 9, 37, 42] है, तो आउटपुट True होगा क्योंकि [9, 15, 25, 27] को उलटने से सरणी क्रमबद्ध हो जाती है।
हल करने का तरीका
- n := nums का आकार
- यदि केवल एक तत्व है तो True लौटाएं
- पहला इंडेक्स i ढूंढें जहां nums[i-1] > nums[i] (पहली गिरावट)
- j := i से आगे बढ़ें जब तक nums[j] < nums[j-1] (गिरावट जारी है)
- जांचें कि क्या यह उपसरणी उलटने के बाद फिट बैठती है
- बाकी सरणी जांचें कि क्रमबद्ध है या नहीं
उदाहरण कोड
def solve(nums):
n = len(nums)
if n == 1:
return True
i = 1
for i in range(1, n):
if nums[i - 1] < nums[i]:
if i == n:
return True
else:
break
j = i
while j < n and nums[j] < nums[j - 1]:
if i > 1 and nums[j] < nums[i - 2]:
return False
j += 1
if j == n:
return True
k = j
if nums[k] < nums[i - 1]:
return False
while k > 1 and k < n:
if nums[k] < nums[k - 1]:
return False
k += 1
return True
nums = [4, 6, 27, 25, 15, 9, 37, 42]
print(solve(nums))
इनपुट
[4, 6, 27, 25, 15, 9, 37, 42]
आउटपुट
True