剑指offer-面试题36 数组中的逆序对

原来以为看懂书中解题思路我就能够把这个变成程序,然后发现我真的不行。

就算我知道思路变成程序,还是有算法->程序的思路转换。

难道我真的不适合当一个码农,那我到底应该何去何从?

随着越来越多找工作的信息,越来越迷茫我应该何去何从。

好想就找个角落宅着,谁都不要管我,就让我静静看书,没有人鸟我==

什么事情都不想干,尤其不相干老板叫我测试的东西==

风格化笔画绘制有什么意思啊!!

但是还是需要测试!!

哎。回归正题。。

以下代码几乎都是模仿书本代码,注意子数组排好序后,如何利用子逆序对的信息。



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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值