Intuition
The basic intuition comes from sorting.
Approach
In the naive approach, we can sort the array using inbuilt sorting function. The time complexity will be O(N*log(N))
.
- Optimize: Since we are sorting only three numbers, we can use the concept of counting sort. Keep track of number of zeros and number of ones in the array.
Complexity
-
Time complexity:
O(N)
-
Space complexity:
O(1)
Code
class Solution {public void sortColors(int[] nums) {int countZero = 0;int countOne = 0;for(int num: nums){switch(num){case 0:countZero++;break;case 1:countOne++;}}int currentIndex = -1;while(0<countZero--){nums[++currentIndex] = 0;// countZero--;}while(0<countOne--){nums[++currentIndex] = 1;// countOne--;}while(currentIndex<nums.length-1){nums[++currentIndex] = 2;}}}class Solution { public void sortColors(int[] nums) { int countZero = 0; int countOne = 0; for(int num: nums){ switch(num){ case 0: countZero++; break; case 1: countOne++; } } int currentIndex = -1; while(0<countZero--){ nums[++currentIndex] = 0; // countZero--; } while(0<countOne--){ nums[++currentIndex] = 1; // countOne--; } while(currentIndex<nums.length-1){ nums[++currentIndex] = 2; } } }class Solution { public void sortColors(int[] nums) { int countZero = 0; int countOne = 0; for(int num: nums){ switch(num){ case 0: countZero++; break; case 1: countOne++; } } int currentIndex = -1; while(0<countZero--){ nums[++currentIndex] = 0; // countZero--; } while(0<countOne--){ nums[++currentIndex] = 1; // countOne--; } while(currentIndex<nums.length-1){ nums[++currentIndex] = 2; } } }
Enter fullscreen mode Exit fullscreen mode
GitHub repo for more solutions: Git
Leetcode profile: Leetcode: devn007
© 版权声明
THE END
暂无评论内容