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 0
s, 1
s, and 2
s, sort the array in ascending order.
Example:
Input:
arr = [0, 2, 1, 2, 0]
Output:
0 0 1 2 2
Explanation: 0
s, 1
s, and 2
s are segregated into ascending order.
Input:
arr = [0, 1, 0]
Output:
0 0 1
Explanation: 0
s, 1
s, and 2
s are segregated into ascending order.
My Approach
Three-Pointer Approach:
Use three pointers
low
,mid
, andhigh
to partition the array into three segments: 0s, 1s, and 2s.
Initialization:
low
andmid
pointers start at the beginning of the array, while thehigh
pointer starts at the end of the array.
Partitioning:
Iterate through the array using the
mid
pointer:If
arr[mid]
is0
, swaparr[mid]
witharr[low]
, increment bothlow
andmid
.If
arr[mid]
is1
, simply move themid
pointer 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
0
s,1
s, and2
s in their respective positions.
Time and Auxiliary Space Complexity
Expected Time Complexity: O(n), where
n
is 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 -= 1
Contribution 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