题解 | #牛的品种排序I# 双指针

牛的品种排序I

https://www.nowcoder.com/practice/e3864ed7689d460c9e2da77e1c866dce

知识点

双指针

思路

维护两个指针,i在左边,j在右边,i从左到右遍历,当遇到i指向的位置是1的时候,j向左移动找到最近的0,然后交换,如果i和j相遇则表示完成。

时间复杂度

双指针,每个节点只会访问常数次,时间复杂度为O(n)

AC Code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param cows int整型vector 
     * @return int整型vector
     */
    vector<int> sortCows(vector<int>& cows) {
        int n = cows.size();
        for (int i = 0, j = n - 1; i <= j; i ++) {
            if (!cows[i]) continue;
            while (j >= i and cows[j] == 1) j --;
            if (i < j and cows[j] == 0) {
                swap(cows[i], cows[j]);
                j --;
            }
        }
        return cows;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务