首页 > 编程语言 > 详细

2017/09/06:算法练习小记

时间:2017-09-06 21:47:09      阅读:270      评论:0      收藏:0      [点我收藏+]

今天做了7622求排列逆序,半个小时,得到了一个时间超时的结果,但是我不太知道怎么改进了。

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
int num[100002];
int status[100002];
long long result = 0;
int n;
int cal2(int number){
    int x=0;
    for(int i=number;i<n;i++){
        if(status[i]==1)
            x++;
    }
    return x;
}

void cal(int number){
    int i=0;
    for(;i<n;i++){
        if(status[i]==0){
            if(number == num[i]){
                status[i]=1;
            }

            if(number > num[i]){
                break;
            }
        }
    }
    result+=(n-i-cal2(i));
}

bool cmp(int a,int b){
    return a>b;
}

int main()
{
    int x[100002];
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>num[i];
        x[i]=num[i];
        status[i]=0;
    }
    sort(num,num+n,cmp);


    for(int i=0;i<n;i++){
        cal(x[i]);
    }
    cout<<result<<endl;
    return 0;
}

思路是把数组排序好,然后每个对应了标记,用过的就把标记设为1,这样再计算。

后来发现,确实要循环很多次,有点耗时间。

然后看看提干,发现有提示说用归并排序,然后我就去查归并排序了。

后来发现是利用递归,然后把左边排好,右边排号,再合并起来。

但是我还是不太熟悉,大概是弄懂原理了,还是错了0-0。

觉得自己周末得花半天来专门练习算法,然后解决这些遗留问题,

然后每天的算法题如果没做出来,就至少也得写一篇这样的小结文章,反思,嗯啊加油。

2017/09/06:算法练习小记

原文:http://www.cnblogs.com/rimochiko/p/7487084.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!