python面试题,通过交换a,b中的元素,使[序列a和]与[序列b和]之间的差最小

有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。

只能想到最傻的办法


import random

import time


def timeit(func):
    def _deco(*args, **kwargs):
        start = time.clock()
        d = func(*args, **kwargs)
        end = time.clock()
        print "used time: %s" % str(end - start)
        return d
    return _deco

@timeit

def exchange(lsta, lstb):

    suma = sum(lsta)

    sumb = sum(lstb)
    d = abs(suma-sumb)
    if d == 0:
        return d
    
    bExchange = False    
    for indexa, ia in enumerate(lsta):
        if d == 0:
            break
        for indexb, ib in enumerate(lstb):
            tempd = abs((suma-ia+ib)-(sumb+ia-ib))
            if tempd < d:
                bExchange = True
                tempindexa = indexa
                tempindexb = indexb
                d = tempd

        if bExchange:
            suma = suma - lsta[tempindexa] + lstb[tempindexb]
            sumb = sumb - lstb[tempindexb] + lsta[tempindexa]
            tempv = lsta[tempindexa]
            lsta[tempindexa] = lstb[tempindexb]
            lstb[tempindexb] = tempv
            bExchange = False
        
    return d
lsta = []
lstb = []
for i in range(1000):
    lsta.append(random.randint(0, 1000000))
for i in range(1000):
    lstb.append(random.randint(0, 1000000))

print exchange(lsta,lstb)

lsta = []
lstb = []
for i in range(10000):
    lsta.append(random.randint(0, 1000000))
for i in range(10000):
    lstb.append(random.randint(0, 1000000))

print exchange(lsta,lstb)
=======================================================
分别测试一千个数和一万个数的结果,一万个数时耗时真多。
>>> 
used time: 0.223763605341
3
used time: 46.6022585932
1
>>> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Python面试题可以有很多不同的问题,以下是一些常见的问题和答案: 1. Python3和Python2之间的区别是什么? 在Python3,print是一个函数,必须加上括号;而在Python2,print是一个语句,不需要括号。此外,Python3使用range函数来生成一个范围内的整数序列,而Python2使用xrange函数。另外,Python3默认的字符串类型是Unicode,而Python2默认的字符串类型是ASCII。还有一些其他的区别,比如整数除法的结果类型不同等。\[2\] 2. 请解释一下Python的参数传递方式是什么? 在Python,参数传递是通过引用传递的。这意味着当我们将一个变量作为参数传递给一个函数时,函数内部对该参数的修改会影响到原始变量。这是因为函数内部的参数实际上是原始变量的引用,而不是副本。\[3\] 3. 请解释一下Python的装饰器是什么? 装饰器是一种用于修改函数或类的行为的特殊语法。它们允许我们在不修改原始函数或类的情况下,通过在其周围添加额外的功能来扩展其功能。装饰器通常是一个函数,它接受一个函数作为参数,并返回一个新的函数。通过在函数定义之前使用@符号,我们可以将装饰器应用于函数。\[1\] 希望以上回答对您有所帮助!如果您有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [Python 常见170道面试题解析](https://blog.csdn.net/qq_16033847/article/details/103817765)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python基础---面试题汇总](https://blog.csdn.net/m0_70618214/article/details/124890559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值