Problem: 912. 排序数组
思路
👨🏫 三叶题解
💖 AC:计数排序
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)
class Solution {public int[] sortArray(int[] nums) {int max = -50001, min = 50001;for (int num: nums) {max = Math.max(num, max);min = Math.min(num, min);}int[] counter = new int[max - min + 1];for (int num: nums) {counter[num - min]++;}int idx = 0;for (int num = min; num <= max; num++) {int cnt = counter[num - min];while (cnt-- > 0) {nums[idx++] = num;}}return nums;}
}
💖 TLE:快速排序板子
⏰ 理想时间复杂度: O ( N l o g N ) O(NlogN) O(NlogN)
🌎 空间复杂度: O ( 1 ) O(1) O(1)
😶 被卡最坏的情况啦!
😶 原数组有序的情况下,选第一个数为标准值,所有数都会被分到另一边去
⏰ O ( n 2 ) O(n^2) O(n2)
class Solution {public int[] sortArray(int[] nums) {quickSort(nums,0,nums.length-1);return nums;}public void quickSort(int[] a,int left,int right){if(left < right){int x = a[left];int l = left;int r = right;while(l < r ){while(l < r && a[r] >= x )//先找右边小于标准值的数放在左边的位置(标准值也是在左边)r--;a[l] = a[r];while(l < r && a[l] <= x)// 再找左边大于标准值的数放在右边l++;a[r] = a[l];}a[l] = x;quickSort(a,left,l);quickSort(a,l+1,right);}}
}