支配值数目

# -*- coding: cp936 -*-
'''
支配值数目
已知f[]与g[]两个整数数组,元素已经从小到大排列,请写一个程序,
算出f[]中比g[]元素大的对数。换句话说,f[0]比g[]中多少个元素大,
f[1]比g[]中多少元素大等,这些值的总和就是要求的答案。
'''
def ComputSumOfBigger(fList , gList):

    if (len(gList) == 0) or (len(fList) == 0):
        return -1
    
    sumOfBigger=0
    indexg=0
    tempLen=0
    for item in fList:
        while(indexg < len(gList)  and item > gList[indexg]):
            indexg+=1
            tempLen+=1
        sumOfBigger+=tempLen

    print "f[]中比g[]元素大的个数%d" %(sumOfBigger)


ComputSumOfBigger([1,3,5,7,9], [2,3,4,7,8])


另外附上M.Rem的c++代码,思路相似,我是以gList为着力点算长度,M.Rem先生以fList为着力点算长度,

我的算法维护tempLen多了点时间复杂度,不管一个数组是否结束,总要判断indexg < len(gList),有少许性能损失

int dominance_count(int f[], int g[], int m, int n)
{
	int index_f,  index_g;
	int count;
	count=index_f=index_g=0;
	while(index_f<m && index_g <n)
	{
		if(f[index_f <= g[index_g]])
		{
		     index_f++;
		}
		else
		{
		     index_g++, count+=m-index_f;
		} 
	}
	return count;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值