(1过,解法不好,看參考荷兰国旗问题解法)

给定一个包含红色、白色和蓝色,一共 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

注意:
不能使用代码库中的排序函数来解决这道题。

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

进阶:

    • 一个直观的解决方案是使用计数排序的两趟扫描算法。
      首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
    • 你能想出一个仅使用常数空间的一趟扫描算法吗?

我的:双指针都在前

    public void sortColors(int[] A) {
int redindex = 0;
int whiteindex = 0;
int temp1=0;
for (int i=0;i<A.length;i++) {
if (A[i] == 0) {
temp1 = A[redindex];
A[redindex] = A[i];
A[i] = temp1;
redindex++;
if (A[i] != 1)
whiteindex++;
}
if (A[i] == 1) {
temp1 = A[whiteindex];
A[whiteindex] = A[i];
A[i] = temp1;
whiteindex++;
}
}
}

参考:双指针一前一后

链接:https://www.nowcoder.com/questionTerminal/4345e55fdb03498a89a97ec18e62b3ab
来源:牛客网 //荷兰国旗问题,基本思路是,遍历数组跟中间值1做比较,主要有以下两步:
//1、设置最后一个连续0的位置索引(从前往后),设置第一个连续2的位置索引(从后往前)
//2、如果遍历到0,就交换,此时不用考虑交换后的ind位置的值(因为如果后面还有0会继续替换),
//如果遇到2,需要与连续2的位置索引交换,但此时ind不能++(因为如果++后面就没有机会和2的索引位置交换值了)
class Solution {
public:
    void sortColors(int A[], int n) {
        int zeroInd = 0,twoInd = n-1;
        for(int ind=0;ind<=twoInd;ind++)
        {
            if(A[ind]==0)
            {
                A[ind] = A[zeroInd];
                A[zeroInd] = 0;
                zeroInd++;
            }else if(A[ind]==2)
            {
                A[ind] = A[twoInd];
                A[twoInd] = 2;
                twoInd--;
                ind--;
            }
        }
    }
};

【leetcode-75】 颜色分类的更多相关文章

  1. LeetCode 75. 颜色分类(Sort Colors) 30

    75. 颜色分类 75. Sort Colors 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中, ...

  2. Java实现 LeetCode 75 颜色分类

    75. 颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红 ...

  3. Leetcode 75.颜色分类 By Python

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  4. leetcode 75颜色分类

    两趟扫描,由于排序变量的特殊性,使用计数排序方法可以明显降低至O(n)time O(n) space 关于计数排序:https://mp.weixin.qq.com/s/WGqndkwLlzyVOHO ...

  5. leetcode 75. 颜色分类 JAVA

    题目: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和 ...

  6. Leetcode 75. 颜色分类

    题目链接 https://leetcode-cn.com/problems/sort-colors/description/ 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们 ...

  7. LeetCode 75. 颜色分类(Sort Colors)

    题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...

  8. [LeetCode] 75. 颜色分类(荷兰国旗)

    class Solution { public: void sortColors(vector<int>& nums) { ,current=,end=nums.size()-; ...

  9. LeetCode:颜色分类【75】

    LeetCode:颜色分类[75] 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 ...

  10. Leetcode题目75.颜色分类(双指针-中等)

    题目描述: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白 ...

随机推荐

  1. 【XSY2665】没有上司的舞会 LCT DP

    题目大意 有一棵树,最开始只有一个点.每次会往这棵树中加一个点,总共\(n\)次.输出每次加点后树的最大独立集大小. 强制在线. \(n\leq 300000\) 题解 显然是LCT. 那么要维护什么 ...

  2. Leetcode 350.两个数组的交集|| By Python

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...

  3. HDU1285确定比赛名次

    确定比赛名次                                Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/ ...

  4. python列表转字符串

    temp = "".join(sorted(arr[i])) arr[i] = temp

  5. luogu5007 DDOSvoid 的疑惑 (树形dp)

    我们来算每个点出现在的集合的个数 设f[i]为i出现的集合个数,g[i]是只选子树i 可以有多少种选法 那就有$g[i]=1+\prod\limits_{j是i的孩子}{g[j]} , f[i]=f[ ...

  6. centos7系统安装完成后一些基本的优化

    安装完centos7.3后,做一些基本的操作 基本操作一:主机名 centos7有一个新的修改主机名的命令hostnamectl # hostnamectl set-hostname --static ...

  7. htmlunit 校验验证码

    htmlUnit 校验验证码 直接上代码 String url = "http://www.zycg.gov.cn/"; WebclientUtil webClientUtils ...

  8. 商品详情页系统的Servlet3异步化实践

    http://jinnianshilongnian.iteye.com/blog/2245925 博客分类: 架构   在京东工作的这一年多时间里,我在整个商品详情页系统(后端数据源)及商品详情页统一 ...

  9. MacBook上使用ssh localhost被拒绝

    最开始以为没有装sshd呢,实际上不是.又查了些方法,有些人居然把Linux上访问失败的方法直接照搬,让我建立公私钥.都没有成功.最后找到了解决方法,原来是由于苹果的安全限制,限制了这个功能. sud ...

  10. 测试利器 Postman

    一.安装 官网:https://www.getpostman.com/ Postman是一个Chrome的一个插件工具,我们可以通过Chrome的应用商店进行进行搜索并安装,安装完成会在桌面上显示一个 ...