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

Posted 年糕君の勉强笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017/09/06:算法练习小记相关的知识,希望对你有一定的参考价值。

今天做了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:算法练习小记的主要内容,如果未能解决你的问题,请参考以下文章

自已的sql server练习小记

练习小记2:SpringBoot整合MyBatis

算法踩坑小记

从搜索文档中查找最小片段的算法?

2018.07.29(搜索)学习DFS算法小记

DOM练习小记--简单的拼单词游戏