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,
好咯,今天就先这样吧,明天一定要弄懂。