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

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/07

今天做了一个动态规划的题目(8780:导弹拦截),之前上课没认真听,感觉是白听了,也没感觉到动态规划到底是个啥东西。

感觉自己下次得先把老师讲的题目做做再去听课,会有印象一些T-T。

后来参考了一位童鞋的代码:http://blog.csdn.net/c20190733_zt/article/details/77456620。

刚开始看这个思路还是能理解,但是后来发现自己弄错了啊,后来发现是它很巧妙地...就把它一环扣一环。

换个题目自己可能就想不出了- _-,果然还是得好好理解好概念和方法,今天依旧失败。

不会放弃的( •̀ ω •́ )

2017/09/08

今天又是大失败啊,想好好了解了解动态规划,结果最后感觉还是模模糊糊,看到题目不知道怎么下手,最后源码也没看懂。

明天就是放假了,一定要对自己狠一点练习!!我觉得我必须要要调整好自己的心态,不能因为算法写不出就没有信心学前端了QAQ,

好咯,今天就先这样吧,明天一定要弄懂。

原文地址:https://www.cnblogs.com/rimochiko/p/7487084.html