如果有这样的互换,那么两个值之间的差值必须是总和差的一半。交换两个值意味着两个列表的总和将改变,一个上升,另一个下降,以相同的数量。这两个变化必须加上掉期前的和之间的差值,且两个总和都会以相同的值(^{cd1>}和^{cd2>}或值delta(这是两个交换值之间的差异)而变化。

首先,函数将^{{cd3>}计算为总和和和和之间的δ。注意^{cd4>}可能大于^{cd5>},此时结果^{cd6>}为负值。这只意味着^{cd7>}中必须有一个小于^{{cd8>}中的目标值的值,然后交换将减少^{{cd4>}并增加^{cd5>}使它们相等。如果总和增量的奇偶性是odd而不是偶数,则永远找不到值delta是总和增量的一半,因此函数此时返回^{{cd11>}。^{cd3>}的最终值是值delta,两个交换值之间的差值量。记住,值delta是总和的一半。

算法计算^{{cd8>}中的所有值,然后测试^{{cd7>}中的所有值。只有当^{cd7>}中的^{em>a值与^{cd8>}中的aaa值不同时,才可能在^{cd8>}和^{cd7>}之间交换两个值。与^{cd7>}交换的^{cd8>}中的值需要等于^{{cd22>}。对于一个负^{cd3>}(^{cd24>}),如果一个正^{cd3>}的数值越大,它会使^{cd25>}变小。

^{cd28>}测试将查看^{{cd29>}中是否有可用的值,但它首先测试^{{cd22>}仍在[0-m]:0 <= B[i] - d测试A中所寻求的数字是否仍然为正数。

^{cd33>}如果所寻求的数字仍然不大于^{cd34>};如果^{{cd35>}关闭,^{{cd3>}为负值,则可能会发生测试。

^{cd37>}包含^{{cd8>};如果^{{cd39>}中的数字计数为true,则A中至少有一个这样的数字。这是一个可以交换的数字。

需要进行范围测试,因为^{{cd40>}列表仅保留从0到m(包括)的数字的计数,而不是负数或大于^{{cd34>}的数字。

该函数可以通过使用集合而不是计数函数来改进。没有必要知道数字在^{cd8>}中出现多少次,只是它存在存在。这将使边界检查过时,因为超出界限的数字将不会出现在^{{cd8>}的一组值中。

一旦我们有了一组a的值,我们就可以使用^{}测试这个集是否来自应用了delta的b值集的disjoint:def faster_solution(A, B, m=None): # m is ignored in this version

delta = sum(A) - sum(B)

if delta % 2 == 1:

return False

delta //= 2

return not set(A).isdisjoint(b - delta for b in B)

如果^{cd8>}中的值等于^{{cd7>}中的a值减去δ,则返回True。Python只会在^{cd47>}循环上循环,直到找到匹配(此时集合不是不相交的,并且^{cd48>}将结果反转为True),或者循环已用尽,因此在^{cd8>}中找不到此类值,并且发现这些集合是不相交的。

所示的^{cd50>}函数还有另一个问题:它需要的内存远远超过所需的内存,而且与在进行计数时实现优化循环的^{} object相比,它的速度非常慢。A^{cd52>}使用字典(哈希映射)仅存储大于0的计数。

上述设置的解决方案击败了“快速解决方案”的手:

^{pr2}$

不使用计数器,并且使用Python的set功能使长度为1000的输入速度快了17倍!

故事的寓意:使用你所选择的语言中可用的最好工具,并批判性地思考解决问题所需要的实际需要他有问题。Python内置的类型和操作通常可以让您避免在Python字节码中运行关键循环,从而显著减少算法的恒定时间因子。在

python中交换a和b的值_交换A和B之间的元素以获得和相等相关推荐

  1. python表达式3 5_运行以下Python中表达式后,X的值为是x=3==3,5A.3B.5C.(True,5)D.(False,5)...

    运行以下Python中表达式后,X的值为是x=3==3,5A.3B.5C.(True,5)D.(False,5) 更多相关问题 [单选,A4型题,A3/A4型题] 一女性,55岁.丧偶8年,现独居,嗜 ...

  2. python中能够处理的最大整数是_实例讲解Python中整数的最大值输出

    在Python中可以存储很大的值,如下面的Python示例程序: x = 10000000000000000000000000000000000000000000; x = x + 1 print ( ...

  3. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用residuls函数从模型中提取每个样本点的残差值、可视化残差与拟合值之间的散点图来看残差的分布模式

    R语言使用lm函数构建简单线性回归模型(建立线性回归模型).拟合回归直线.使用residuls函数从模型中提取每个样本点的残差值.可视化残差与拟合值之间的散点图来看残差的分布模式 目录

  4. python交换两个变量的值_python交换两个变量的值方法

    python交换两个变量的值方法 大部分语言,例如c语言,交换两个变量的值需要使用中间变量. 例如交换a,b 伪代码: tmp = a a = b b = tmp python里面可以实现无临时变量的 ...

  5. python怎么交换两个变量的值_python交换两个变量的值方法

    大部分语言,例如c语言,交换两个变量的值需要使用中间变量. 例如交换a,b 伪代码: tmp = a a = b b = tmp python里面可以实现无临时变量的交换 (a,b) = (b,a) ...

  6. Python中的Optional和带默认值的参数

    文章目录 带默认值的参数 Typing.Optional类 Optional[X]等价于Union[X, None] 带默认值的参数 在Python中的类或者函数中,若参数在声明时附带了它的默认值,则 ...

  7. python中表达式4**0.5的值为_Python内置函数__用来返回序列中的最小元素

    [填空题]表达式 int(4**0.5) 的值为 [判断题]3+4j不是合法的Python表达式. [填空题]已知列表对象x = ['11', '2', '3'],则表达式 max(x) 的值为 [填 ...

  8. Python中如何设置函数的默认值

    1 问题描述 如何在python中获得一个设置了指定参数默认值的函数呢? 2 获得指定参数默认值的函数 使用functools.partial来实现:

  9. python中 a or b 的值为_详解python中and和or的返回值

    在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. 一.and:>>> 'a' and 'b' ' ...

最新文章

  1. 2017敏捷沙滩大会:完美软件,测量持续交付,以及探索未来
  2. c++内存对齐的规则
  3. MVC判断用是否登录了平台
  4. 在JSP页面中获取系统当前日期时间
  5. @程序员,夏天来了,你该送心仪女生这个啦
  6. python常用数据结构_Python中常用的查找数据结构及算法汇总
  7. hyperledger fabric超级账本java sdk样例e2e代码流程分析
  8. 【记录】帮同学做的一个函数拟合
  9. 小米MAX Root,第三方REC,XP框架刷入
  10. Qt编写QUI皮肤生成器
  11. 人物肖像速写_骄傲家庭:肖像项目
  12. 小程序发布上线流程_微信小程序发布流程
  13. iphone 投android电视,手机投屏到电视上的2种方法,看完才知道原来这么简单
  14. AspNetPager组件
  15. 巴西游戏出海攻略,优质游戏出海市场
  16. 【EasyUI篇】一整套EasyUI示例集锦
  17. Stm32型号查阅手册
  18. 小程序--错误{errcode:40029,errmsg:invalid code, hints: [ req_id: weh8ka0297hc58 ]}
  19. 我国各省市县的名称列表
  20. Java操作数据库方式五MyBatis使用入门

热门文章

  1. JS流程图解决方案GoJS
  2. scala-数组操作
  3. 介绍一个对陌生程序快速进行性能瓶颈分析的技巧
  4. 把base64转为blob
  5. centos7硬盘分区
  6. Mysql 学习笔记2
  7. 2015.11.27---Java
  8. c# 连接各种数据库 Access、Server等
  9. Asp.net中页面传值几种方式
  10. 表单元素对齐问题解决方案