链接地址:https://leetcode-cn.com/problems/sort-colors/
这道题目看起来简单,实际由于规定了各种各样的条件,不能采用传统的排序算法来做,否则报超时。实际上这道题目也是用索引指针来做,需要利用一些规律。
同时,通过让红色指针不断循环下去,来进行判断,直到红色指针的索引大于紫色指针方可进行中断循环。
为什么不能红色指针不能等于紫色指针呢,当出现以下这种情况:
此时按照规律,红色指针的2和紫色指针的0进行交换,同时紫色指针--
发现,数组并没有排好序。所以需要继续按照规律进行多一步。遇到0,指针进行交换后再++。
public void sortColors(int[] nums) { int i=0,l=0; int r=nums.length-1; while (i<=r){ if(nums[i]==0){ swap(nums,l++,i++); }else if(nums[i]==1){ i++; }else { swap(nums,i,r--); } } }
private void swap(int[]nums,int l,int r){ int temp=nums[r]; nums[r]=nums[l]; nums[l]=temp; }
|