牛牛算数

30分做法

用冒泡排序等方法对数组排序后找出平均数与中位数,时间复杂度o(n^2),空间复杂度o(1)

100分做法

这里提供两种做法

1.时间复杂度o(nlogn)的做法

方法同上,只是在排序中选用o(nlogn)的排序算法即可,由于相关算法众多不一一在此列举了。由于中位数和平均数都可能有精度的问题,所以这里可以比较n中位数与n平均数的大小。仅展示使用sort的做法,时间复杂度o(nlogn),空间复杂度o(1);

class Solution {
public:
    /**
     * 
     * @param arr int整型vector 
     * @return int整型
     */
    int Answerofjudge(vector<int>& arr) {
        // write code here
        sort(arr.begin(),arr.end());
        long long sum1=0;
        long long sum2=0;
        long long n=arr.size();
        if(n%2)
        {
            sum1=arr[n/2]*n;
        }
        else
        {
            sum1=(arr[n/2]+arr[n/2-1])*n/2;
        }
        for(int i=0;i<n;i++)sum2+=arr[i];
        int ans;
        if(sum1==sum2)ans=0;
        else if(sum1>sum2)ans=1;
        else ans=-1;
        return ans;
    }
};

2.时间复杂度o(n)的做法

首先显然平均数是很容易o(n)的时间算出的,比较麻烦的就是中位数,因为中位数只和最中间的一个/两个数有关,所以可以用黑科技nth_element()在数据大时可以o(n)的时间复杂度找到中位数。空间复杂度o(1)。(虽然理论时间复杂度是低的,但是常数较大再加上sort的log的常数很小,实际测试时两者运行时间差别并不明显,特此说明)代码如下:

class Solution {
public:
    /**
     * 
     * @param arr int整型vector 
     * @return int整型
     */
    int Answerofjudge(vector<int>& arr) {
        // write code here
        long long sum1=0;
        long long sum2=0;
        long long n=arr.size();
        if(n%2)
        {
            nth_element(arr.begin(),arr.begin()+n/2+1,arr.end());
            sum1=arr[n/2]*n;
        }
        else
        {
            nth_element(arr.begin(),arr.begin()+n/2,arr.end());
            sum1=arr[n/2];
            nth_element(arr.begin(),arr.begin()+n/2-1,arr.end());
            sum1+=arr[n/2-1];
            sum1*=n/2;
        }
        for(int i=0;i<n;i++)sum2+=arr[i];
        int ans;
        if(sum1==sum2)ans=0;
        else if(sum1>sum2)ans=1;
        else ans=-1;
        return ans;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-19 14:46
和女友两个人马上毕业,现在我在鹅实习995,周六日偶尔也去北京;她在北京金融007,经常忙到后半夜,周末也没啥休息机会两个人现在都不咋聊天了,一句话隔半小时甚至半天才回。&nbsp;她是个很优秀的妹子,工作也很努力,是值得学习一辈子的人。我在努力工作求转正,即便不行至少赚到了一段不错的实习经历。已经异地了半年,接下来可能还会持续是这个状态。我们都算是对方重要的人,只是感觉看上去不是很有未来的样子。希望牛友们给点的鼓励
梦旅奇缘:很难。异地首先就已经很难了,加上妹子是金融行业,忙碌高压,对情感需求很高,而且见惯纸醉金迷,你的很多优势在她那里可能就不算什么了。这种情况下,在她们那里遇到一个能及时照顾她的人,即使那人可能很多条件不如你,你也有可能被分手。 说白了,两个卷王就不太适合在一起。因为卷王最大的优势,在另一个卷王那里就不算优势了。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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