मान लीजिए हमारे पास संख्याओं की एक सरणी है जिसमें ठीक तीन तत्वों -1, 0 और 1 की कोई भी आवृत्ति होती है जैसे -
const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];
हमें एक JavaScript फ़ंक्शन लिखना है जो ऐसी एक सरणी लेता है। फ़ंक्शन को बस इस विशेष सरणी को स्थानांतरित (in-place) क्रमबद्ध करना चाहिए यानी मानों को संग्रहीत करने के लिए किसी अतिरिक्त सरणी का उपयोग किए बिना।
एकमात्र शर्त यह है कि हमारा फ़ंक्शन एक रैखिक समय फ़ंक्शन होना चाहिए (केवल एक पुनरावृत्ति का उपयोग करके)।
उदाहरण
निम्नलिखित कोड देखें:
const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];
const sortSpecialArray = (arr = []) => {
const swap = (a, b) => {
let middle = arr[a];
arr[a] = arr[b];
arr[b] = middle;
};
let left = 0;
let middle = 0;
let right = arr.length - 1;
while (middle <= right) {
if (arr[middle] === -1) {
swap(left++, middle++);
} else if (arr[middle] === 0) {
middle++;
} else if (arr[middle] === 1) {
swap(right--, middle);
}
};
};
sortSpecialArray(arr);
console.log(arr);
आउटपुट
कंसोल आउटपुट निम्नलिखित है -
[
-1, -1, 0, 0, 0,
0, 1, 1, 1, 1,
1
]