我想用数组列表对nums[]进行排序,但是它只能通过17/83的情况,我不知道我哪里做错了。
public class Solution {
public void sortColors(int[] nums) {
List<Integer> list = new ArrayList<Integer>();
List<Integer> redList = new ArrayList<Integer>();
List<Integer> whiteList = new ArrayList<Integer>();
List<Integer> blueList = new ArrayList<Integer>();
if(nums==null||nums.length==0)
return ;
for(int number:nums){
switch (number){
case 0:
redList.add(number);
break;
case 1:
whiteList.add(number);
break;
case 2:
blueList.add(number);
break;
default:
break;
}
}
list.addAll(redList);
list.addAll(whiteList);
list.addAll(blueList);
}
}
它占用了很多额外的空间,但我认为它可以比插入排序更快。
3条答案
按热度按时间fykwrbwg1#
检查API到期日Collections.sort
输出:
vlju58qv2#
颜色排序问题分3步解决
方法
1.初始化低=0,中=0,高=数值长度-1;
1.检查nums[mid]与nums[low],以及nums[mid]与nums[high]
1.比较后进行操作,如开关情况所示。
wnvonmuf3#
也许你不应该在练习算法时使用内置函数:)
他们要求的算法是一个标准的
3-way-quicksort
或national-flag-sort
或two-pivot-sort
。非常好的解释是在这个链接:https://www.geeksforgeeks.org/3-way-quicksort-dutch-national-flag/关键是要有两个枢轴,基本上你可以在一次迭代中就地排序数组。