原来以为看懂书中解题思路我就能够把这个变成程序,然后发现我真的不行。
就算我知道思路变成程序,还是有算法->程序的思路转换。
难道我真的不适合当一个码农,那我到底应该何去何从?
随着越来越多找工作的信息,越来越迷茫我应该何去何从。
好想就找个角落宅着,谁都不要管我,就让我静静看书,没有人鸟我==
什么事情都不想干,尤其不相干老板叫我测试的东西==
风格化笔画绘制有什么意思啊!!
但是还是需要测试!!
哎。回归正题。。
以下代码几乎都是模仿书本代码,注意子数组排好序后,如何利用子逆序对的信息。
int inverseCountCoreLX(int *data,int *copyD,int start,int end)
{
if(start==end)
{
copyD[start]=data[start];
return 0;
}
int l=(end-start)/2;
int countSub=inverseCountCoreLX(copyD,data,start,start+l)
+inverseCountCoreLX(copyD,data,start+l+1,end);
int count=0;
int li=start+l;
int ri=end;
int cidx=end;
while(li>=start && ri>=start+1+l)
{
if(data[li]>data[ri])
{
copyD[cidx--]=data[li--];
count+=ri-start-l;
}
else
{
copyD[cidx--]=data[ri--];
}
}
while(li>=start)
{
copyD[cidx--]=data[li];
--li;
}
while(ri>=start+l+1)
{
copyD[cidx--]=data[ri];
--ri;
}
return countSub+count;
}
int InversePairsLX(int* data, int length)
{
if (data==NULL ||length<0)
{
return 0;
}
int *copyD=new int[length];
for (int i=0;i<length;i++)
{
copyD[i]=data[i];
}
int n=inverseCountCoreLX(data,copyD,0,length-1);
delete []copyD;
return n;
}