当前位置: 首页 > 后端技术 > Java

LeetCode-075-ColorClassification

时间:2023-04-01 21:35:15 Java

ColorClassification题目描述:给定一个包含红、白、蓝共n个元素的数组,原地排序,使相同颜色的元素相邻,并按红色排序,白色,蓝色依次。在这个问题中,我们使用整数0、1和2分别表示红色、白色和蓝色。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:遍历数组首先,声明2个参数,zeroIndex用于记录从左数第一个非红色的位置,初始值为0,twoIndex用于记录从右数第一个非蓝色的位置,初始值为nums.length-1,然后遍历数组。遍历过程如下:如果当前值等于2,则将当前位置的值与twoIndex位置的值交换,然后将twoIndex减1,进行下一轮处理;如果当前值等于1,则继续判断下一个数;如果当前值等于0,则将当前位置的值与zeroIndex位置的值交换,然后将zeroIndex加一,然后进行下一轮处理。遍历结束的位置是twoIndex,因为twoIndex可能会左移,即不需要遍历到数组的最后一位。publicclassLeetCode_075{publicstaticvoidsortColors(int[]nums){if(nums.length==1){返回;}//zeroIndex用于记录从左数第一个非红色的位置,twoIndex用于记录从右数第一个非蓝色的位置intzeroIndex=0,twoIndex=nums.length-1;for(inti=0;i<=twoIndex;){if(nums[i]==2){//如果当前值等于2,将当前位置的值与twoIndex位置的值交换nums[i]=nums[twoIndex];nums[twoIndex]=2;twoIndex--;继续;}elseif(nums[i]==1){i++;}elseif(nums[i]==0){//如果当前值等于0,将当前位置的值与zeroIndex处的值交换nums[i]=nums[zeroIndex];nums[zeroIndex]=0;零索引++;我++;}}}publicstaticvoidmain(String[]args){int[]nums=newint[]{2,0,2,1,1,0};排序颜色(数字);对于(intnum:nums){System.out.print(num+"");}}}【每日一帖】智者重于时间,时间不可辜负