Count of Smaller Numbers After Self

发布时间:2019-06-13 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Count of Smaller Numbers After Self脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Count of Smaller Numbers After Self 题解


题目描述

Count of Smaller Numbers After Self
即对一个数组中所有元素,找出右边小于自身的元素的个数。
如:[5,2,1,1]
返回[3,2,0,0]

题解

可以遍历元素右边的元素,进行比较并记录小于其的元素个数。时间复杂度为线性。若想降低复杂度,可通过二分查找思想降低到O(log n)。因为会随机插入,所以采取二叉搜索树进行记录。

代码

#include <vector>

typedef int _Type;

class Solution {
public:
    typedef struct Node {
        _Type val;
        size_t leftChild;
        struct Node *left, *right;
    } Node;

    void freeTree(Node* p) {
        if (p == NULL)
            return;
        freeTree(p->left);
        freeTree(p->right);
        free(p);
    }

    size_t insert(Node* & p, _Type val) {
        if (p == NULL) {
            p = (Node*)malloc(sizeof(Node));
            p->val = val;
            p->left = p->right = NULL;
            return p->leftChild = 0U;
        }
        if (p->val < val)
            return (p->leftChild) + 1 + insert(p->right, val);
        if (p->val == val)
            return (p->leftChild) + insert(p->right, val);
        ++(p->leftChild);
        return insert(p->left, val);
    }

    std::vector<int> countSmaller(std::vector<int>& nums) {
        std::vector<int> vec(nums.size());
        Node* root = NULL;
        for (int i = nums.size() - 1; i >= 0; --i)
            vec[i] = insert(root, nums[i]);
        freeTree(root);
        return vec;
    }
};

总结

主要应用了二分查找思想。

脚本宝典总结

以上是脚本宝典为你收集整理的Count of Smaller Numbers After Self全部内容,希望文章能够帮你解决Count of Smaller Numbers After Self所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: