मान लीजिए हमारे पास nums नामक संख्याओं की एक सरणी है। हमें जांचना है कि क्या इसमें सन्निकट मान हैं या नहीं।
उदाहरण के लिए, यदि nums = [6, 8, 3, 5, 4, 7] है, तो आउटपुट True होगा क्योंकि तत्व 3, 4, 5, 6, 7, 8 हैं।
हल करने का तरीका
- यदि सरणी का आकार < 1, तो False लौटाएं
- min_val := nums का न्यूनतम, max_val := nums का अधिकतम
- यदि (max_val - min_val + 1) == सरणी का आकार:
- प्रत्येक तत्व के लिए इंडेक्स j = nums[i] - min_val निकालें
- यदि nums[j] > 0, तो nums[j] := -nums[j] (भ्रमण के लिए चिह्नित करें)
- अन्यथा False लौटाएं (डुप्लिकेट)
- True लौटाएं
- अन्यथा False लौटाएं
यह तरीका सरणी को ही विज़िटेड मार्कर के रूप में उपयोग करके O(1) अतिरिक्त स्थान प्राप्त करता है।
उदाहरण
def solve(nums):
if len(nums) < 1:
return False
min_val = min(nums)
max_val = max(nums)
if max_val - min_val + 1 == len(nums):
for i in range(len(nums)):
if nums[i] < 0:
j = -nums[i] - min_val
else:
j = nums[i] - min_val
if nums[j] > 0:
nums[j] = -nums[j]
else:
return False
return True
return False
nums = [6, 8, 3, 5, 4, 7]
print(solve(nums))
इनपुट
[6, 8, 3, 5, 4, 7]
आउटपुट
True