मान लीजिए हमारे पास एक इंटीजर ऐरे है, हमें एक कंटीन्यूअस सबऐरे ढूंढना है जैसे कि यदि हम केवल उस सबऐरे को आरोही क्रम में सॉर्ट करें, तो पूरा ऐरे सॉर्ट हो जाए। हमें सबसे छोटे ऐसे सबऐरे की लंबाई आउटपुट करनी है। इसलिए यदि ऐरे [2,6,4,8,10,9,15] है, तो आउटपुट 5 होगा। सबऐरे [6,4,8,10,9] होगा।
समाधान के चरण
- res := nums को सॉर्ट करके एक ऐरे बनाएं
- ans := 0
- r को एक लिंक्ड लिस्ट के रूप में सेट करें (व्यावहारिक रूप से एक खाली लिस्ट)
- for i in range 0 से res की लंबाई तक
- यदि nums[i], res[i] के समान नहीं है, तो i को r में इन्सर्ट करें
- यदि r की लंबाई 0 है, तो 0 लौटाएं, यदि लंबाई 1 है, तो 1 लौटाएं
- r के अंतिम एलिमेंट - पहले एलिमेंट + 1 लौटाएं
उदाहरण (पायथन)
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:
class Solution(object):
def findUnsortedSubarray(self, nums):
res = sorted(nums)
ans = 0
r = []
for i in range(len(res)):
if nums[i] != res[i]:
r.append(i)
if not len(r):
return 0
if len(r) == 1:
return 1
return r[-1] - r[0] + 1
ob1 = Solution()
print(ob1.findUnsortedSubarray([2,6,4,8,10,9,15]))
इनपुट
[2,6,4,8,10,9,15]
आउटपुट
5