<p>思路:荷兰国旗问题</p>
讯享网
这道题和这个经典问题是同一个问题。
其实就是00,11,22这中间两个逗号就是划分线,刚开始的时候,线在数组的两端。
可以观察看到,第一个逗号的左边是0,第二个逗号的右边是2,也就是说,第一个划分线的左边必须全是0才行;第二个划分线的右边必须全是2才行。
所以这样就可以下个结论:我们可以用双指针的做法,把这些数回归到它们该回归的地方去。
因此,会有三个变量l,r,i。最后一个变量表示当前遍历元素的变量下标。
当nums[i]==0的时候,我们就把它和左指指向的元素交换,然后我们再让左指针向前移,然后i变量也向前移;
当nums[i]==2的时候,我们就把它和右指针指向的元素进行交换,然后我们再让右指针向后移动,这个时候注意,i是不会发生变化的,因为i必须在l和r中间,并且,当右指针变化的时候i不用变化的原因就是:这个时候交换了的元素我们还没有遍历到,我们需要再次遍历这个位置上的元素,判断它的值是多少。
之后以此类推,当i超出了r边界的时候,我们就停止即可。
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/199519.html