lintcode(148)颜色分
来源:互联网 发布:为知笔记转印象笔记 编辑:程序博客网 时间:2024/06/05 22:44
Description:
给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。
我们可以使用整数 0,1 和 2 分别代表红,白,蓝。
注意事项
不能使用代码库中的排序函数来解决这个问题。
排序需要在原数组中进行。
一个相当直接的解决方案是使用计数排序扫描2遍的算法。
首先,迭代数组计算 0,1,2 出现的次数,然后依次用 0,1,2 出现的次数去覆盖数组。
你否能想出一个仅使用常数级额外空间复杂度且只扫描遍历一遍数组的算法?
Explanation:
给你数组 [1, 0, 1, 2]
, 需要将该数组原地排序为 [0, 1, 1, 2]
。
Solution:
使用两根指针,只享首尾,如果当前值为0,则和前边指针指向的成员交换,并且指针向后移,当前值为1则下一位,当前值为2则和后面的指针交换,指针前移。
class Solution { /** * @param nums: A list of integer which is 0, 1 or 2 * @return: nothing */ public void sortColors(int[] nums) { // write your code here if(nums == null || nums.length == 0 || nums.length == 1) return; int left = 0; int right = nums.length - 1; int index = 0; while(index <= right){ if(nums[index] < 1){ swap(nums , left , index); left++; index++; }else if(nums[index] > 1){ swap(nums , right , index); right--; }else{ index++; } } } public void swap(int[] nums , int start , int end){ int temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; return ; }}
阅读全文
0 0
- lintcode(148)颜色分
- lintcode-颜色分类-148
- LintCode-分糖果
- Lintcode:分糖果
- lintcode(412)分糖果
- lintcode--分糖果
- 分糖果-LintCode
- LintCode-颜色分类
- Lintcode: 颜色分类
- LintCode : 排颜色 II
- LintCode:排颜色 II
- 【Lintcode】颜色分类
- lintcode ----排颜色 II
- LintCode:颜色分类
- lintcode--颜色分类
- Lintcode 颜色排序2
- 排颜色 II -LintCode
- 颜色分类-LintCode
- spring_spring集合装配注入
- Leetcode004. Median of Two Sorted Arrays
- codeforces 755 A O(N)素数筛模板
- ss-libev 源码解析local篇(3): server_recv_cb之SNI和STAGE_PARSE
- nyoj-20吝啬的国度
- lintcode(148)颜色分
- CryMisc__writeup
- MySQL用户与权限管理
- swift3 tableView刷新数据
- Android项目混淆ProGuard详解
- 汽车加油问题--贪心算法
- Python中iteration(迭代)、iterator(迭代器)、generator(生成器)等相关概念的理解
- HDU 1201 18岁生日
- 程序小白---IO流之输入输出流