题解 | #牛的品种排序II#

牛的品种排序II

https://www.nowcoder.com/practice/43e49fbb98b4497ba46e185918188b1c

知识点:

排序/归并排序

分析:

总结归并思路

1.有数组 q, 左端点 l, 右端点 r

2.确定划分边界 mid

3.递归处理子问题 q[l..mid], q[mid+1..r]

4.合并子问题

1.主体合并

至少有一个小数组添加到 tmp 数组中

2.收尾

可能存在的剩下的一个小数组的尾部直接添加到 tmp 数组中

3.复制回来

tmp 数组覆盖原数组

完整代码C++:

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param cows int整型vector
     * @return int整型vector
     */
    void mergeSort(vector<int>& q, int l, int r) {
        if (l >= r) return ;
        int mid = l + r >> 1;
        mergeSort(q, l, mid);
        mergeSort(q, mid + 1, r);
        int p1 = l;
        int p2 = mid + 1;
        int tmp[q.size()];
        int k = 0;
        while (p1 <= mid && p2 <= r) {
            tmp[k++] = q[p1] < q[p2] ? q[p1++] : q[p2++];
        }
        while (p1 <= mid) {
            tmp[k++] = q[p1++];
        }
        while (p2 <= r) {
            tmp[k++] = q[p2++];
        }
        for (int i = l, j = 0; i <= r; i++, j++) {
            q[i] = tmp[j];
        }

    }
    vector<int> sortCows(vector<int>& cows) {
        mergeSort(cows,0,cows.size() - 1);
        return cows;
    }
};

全部评论

相关推荐

点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务