当前位置: 首页> 汽车> 行情 > 四川建筑培训考试网_网页设计图片居右代码_营销推广文案_免费推广引流平台推荐

四川建筑培训考试网_网页设计图片居右代码_营销推广文案_免费推广引流平台推荐

时间:2025/9/16 8:36:34来源:https://blog.csdn.net/m0_73917165/article/details/143504602 浏览次数: 0次
四川建筑培训考试网_网页设计图片居右代码_营销推广文案_免费推广引流平台推荐

思路:荷兰国旗问题

这道题和这个经典问题是同一个问题。

其实就是00,11,22这中间两个逗号就是划分线,刚开始的时候,线在数组的两端。

可以观察看到,第一个逗号的左边是0,第二个逗号的右边是2,也就是说,第一个划分线的左边必须全是0才行;第二个划分线的右边必须全是2才行。

所以这样就可以下个结论:我们可以用双指针的做法,把这些数回归到它们该回归的地方去。

因此,会有三个变量l,r,i。最后一个变量表示当前遍历元素的变量下标。

当nums[i]==0的时候,我们就把它和左指指向的元素交换,然后我们再让左指针向前移,然后i变量也向前移;

当nums[i]==2的时候,我们就把它和右指针指向的元素进行交换,然后我们再让右指针向后移动,这个时候注意,i是不会发生变化的,因为i必须在l和r中间,并且,当右指针变化的时候i不用变化的原因就是:这个时候交换了的元素我们还没有遍历到,我们需要再次遍历这个位置上的元素,判断它的值是多少。

之后以此类推,当i超出了r边界的时候,我们就停止即可。

class Solution {public void sortColors(int[] nums) {int l=0;int r=nums.length-1;int i=0;while(i<=r){if(nums[i]==0){int tmp=0;tmp=nums[i];nums[i]=nums[l];nums[l]=tmp;l++;i++;}else if(nums[i]==2){int tmp=0;tmp=nums[i];nums[i]=nums[r];nums[r]=tmp;r--;}else{i++;}}}
}

关键字:四川建筑培训考试网_网页设计图片居右代码_营销推广文案_免费推广引流平台推荐

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: