09. Sort 0s, 1s, and 2s
The problem can be found at the following link: Question Link
Note: Sorry for uploading late, my exam is going on.
Problem Description
Given an array arr containing only 0s, 1s, and 2s, sort the array in ascending order.
Example:
Input:
arr = [0, 2, 1, 2, 0]Output:
0 0 1 2 2Explanation: 0s, 1s, and 2s are segregated into ascending order.
Input:
arr = [0, 1, 0]Output:
0 0 1Explanation: 0s, 1s, and 2s are segregated into ascending order.
My Approach
Three-Pointer Approach:
Use three pointers
low,mid, andhighto partition the array into three segments: 0s, 1s, and 2s.
Initialization:
lowandmidpointers start at the beginning of the array, while thehighpointer starts at the end of the array.
Partitioning:
Iterate through the array using the
midpointer:If
arr[mid]is0, swaparr[mid]witharr[low], increment bothlowandmid.If
arr[mid]is1, simply move themidpointer forward.If
arr[mid]is2, swaparr[mid]witharr[high]and decrementhigh.
Final Array:
After the loop, the array will be sorted in ascending order with all
0s,1s, and2s in their respective positions.
Time and Auxiliary Space Complexity
Expected Time Complexity: O(n), where
nis the length of the array. Each element is processed at most once.Expected Auxiliary Space Complexity: O(1), as we only use a constant amount of additional space for pointers.
Code (C++)
class Solution {
public:
void sort012(vector<int>& arr) {
int low = 0, mid = 0, high = arr.size() - 1;
while (mid <= high) {
if (arr[mid] == 0) {
swap(arr[low], arr[mid]);
low++;
mid++;
}
else if (arr[mid] == 1) {
mid++;
}
else {
swap(arr[mid], arr[high]);
high--;
}
}
}
};Code (Java)
class Solution {
public void sort012(ArrayList<Integer> arr) {
int low = 0, mid = 0, high = arr.size() - 1;
while (mid <= high) {
if (arr.get(mid) == 0) {
Collections.swap(arr, low, mid);
low++;
mid++;
} else if (arr.get(mid) == 1) {
mid++;
} else {
Collections.swap(arr, mid, high);
high--;
}
}
}
}Code (Python)
class Solution:
def sort012(self, arr):
low, mid, high = 0, 0, len(arr) - 1
while mid <= high:
if arr[mid] == 0:
arr[low], arr[mid] = arr[mid], arr[low]
low += 1
mid += 1
elif arr[mid] == 1:
mid += 1
else:
arr[mid], arr[high] = arr[high], arr[mid]
high -= 1Contribution and Support
For discussions, questions, or doubts related to this solution, please visit my LinkedIn:- Any Questions. Thank you for your input; together, we strive to create a space where learning is a collaborative endeavor.
⭐ Star this repository if you find it helpful or intriguing! ⭐
📍Visitor Count
Last updated