两种解法

1)记录0和1的个数

然后按照记录的个数将0和1重新放入原数组,剩下的补2

2)双指针left,right

left表示0~left-1都为0,即i之前都为0

right表示right+1~nums.length都为2,即j之后都为2

遍历原数组

  a)遇到为0的就把当前nums[i]与nums[left]交换

  b)遇到为2的就交换nums[i]&nums[right],注意,写代码的时候要考虑交换过来的nums[right]有可能是2,如果i正常迭代变成i+1,漏掉了nums[right]为2的情况,所以我们这里i要减1

那么为什么前面a)不需要i减一呢?因为按照我们对left的定义,nums[left]不可能为0

 class Solution {
public void sortColors(int[] nums) {
int len = nums.length;
int index=0, i=0, j=len-1; while(index <= j){
if(nums[index] == 0){
nums[index] = nums[i];
nums[i++] = 0;
} if(nums[index] == 2){
nums[index] = nums[j];
nums[j--] = 2;
index--;
}
index++;
} }
}

最新文章

  1. 1.值得推荐的C/C++框架和库 (转)
  2. POJ2823 Sliding Window (单调队列)
  3. Some tips on using HashSet&lt;T&gt; and List&lt;T&gt;
  4. blockUI
  5. Controller.RedirectToAction 方法
  6. BZOJ 1677: [Usaco2005 Jan]Sumsets 求和
  7. PHP命名空间的概念与使用
  8. 【Eclipse】给web项目打war包
  9. 第三章 go语言 程序的流程控制
  10. 2018-2019-2 20175328 《Java程序设计》第八周学习总结
  11. 自制模态窗体闪烁效果: MessageBeep &amp; FlashWindowEx
  12. mysql的基本查询(等于,不等于,between...and...,)
  13. caffe 测试时间报错 Aborted at unix time
  14. lazy-mock ,一个生成后端模拟数据的懒人工具
  15. 20155314 2016-2017-2 《Java程序设计》第2周学习总结
  16. xshell显示隐藏窗口页签
  17. 模板中的 TemplateBinding 问题
  18. python 数据清洗
  19. ZT 创建类模式总结篇
  20. sqoop 1.99.7 安装及配置

热门文章

  1. IDEA快捷键(收集自网络后整理)
  2. zabbix配置文件解析
  3. thinkphp 获取模板地址
  4. kubernetes istio的快速安装和使用例子
  5. 关于maven工程将model删除重建之后变为灰色的问题的解决
  6. System.Web.Mvc.HttpPostAttribute.cs
  7. 多进程并发socket通信
  8. Git合并时遇到冲突或错误后取消合并
  9. &lt;Django&gt; 第三方扩展
  10. nput=&quot;file&quot; 浏览时只显示指定excel文件,筛选特定文件类型