传说中的华为Python笔试题——两等长整数序列互换元素,序列和的差值最小(修正)
有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;
要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
1. 将两序列合并为一个序列,并排序,得到sourceList
2. 拿出最大元素Big,次大的元素Small
3. 在余下的序列S[:-2]进行平分,得到序列max,min
4. 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。
如下,提供递归版本和迭代版本的解体思路:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#########################################################################
# File Name: minDistance.py
# Author: lpqiu
# mail: qlp_1018@126.com
# Created Time: 2014年10月27日 星期一 05时19分45秒
######################################################################### # recusive version
def minDist(sortedList):
if not sortedList:
return ([], []) large = sortedList[-1]
secondLarge = sortedList[-2] largeList, smallList = minDist(sortedList[:-2])
largeList.append(secondLarge)
smallList.append(large)
#print('LargeList:', largeList, 'SmallList', smallList) if sum(largeList) > sum(smallList):
return (largeList, smallList)
else:
return (smallList, largeList) # iteriation version
def minDistIterVer(sortedList):
largeList, smallList = [], [] for i in range(0, len(sortedList), 2):
if sum(largeList) > sum(smallList):
largeList.append(sortedList[i])
smallList.append(sortedList[i + 1])
else:
largeList.append(sortedList[i + 1])
smallList.append(sortedList[i]) if sum(largeList) > sum(smallList):
return (largeList, smallList)
else:
return (smallList, largeList) def testMain(listA, listB): # len(listA) == len(listB) = n
print("Sorted List: ", sorted(listA + listB))
largeList, smallList = minDist(sorted(listA + listB))
print(largeList, smallList, "distance: ", sum(largeList) - sum(smallList)) largeListIterVer, smallListIterVer = minDistIterVer(sorted(listA + listB))
print(largeListIterVer, smallListIterVer, "distance: ", sum(largeListIterVer) - sum(smallListIterVer)) if __name__ == "__main__":
listA = [1,-1,2,3,6,189]; listB = [2,3,4,6,7,123]
testMain(listA, listB)
传说中的华为Python笔试题——两等长整数序列互换元素,序列和的差值最小(修正)的更多相关文章
- 华为Java笔试题
华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...
- 关于面试总结-python笔试题(递归)
前言 本篇继续收集一些常见的python笔试题,以基础知识为主,递归是面试最喜欢考的一个问题,不管是做开发还是测试,都无法避免考递归.本篇结合实际案例,讲下几种关于递归的场景. 计算n的阶乘 计算n! ...
- 【Python】【面试必看】Python笔试题
前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出 2 个笔试题,这些题目一般不难,主要考察基本功.要是给你一台电脑,在编辑器里面边写边调试,没 ...
- python笔试题(1)
为了充实自己,小编决定上传自己见到的笔试题和面试题.可能要写好长时间,一时半会写不了多少,只能说遇到多少写多少吧,但是只要小编有时间,会持续上传(但是答案却不能保证,所以有看到错误的及 ...
- Python笔试题&面试题总结
黑色加粗的是笔试题,蓝色是面试题 1.什么是GIL 2.Python中的@staticmethod和@classmethod的区别 (**) 3.Python里面如何拷贝一个对象,并解析深浅拷贝 4. ...
- 关于面试总结-python笔试题
关于面试总结4-python笔试题 前言 现在面试测试岗位,一般会要求熟悉一门语言(python/java),为了考验求职者的基本功,一般会出2个笔试题,这些题目一般不难,主要考察基本功. 要是给你一 ...
- 华为Python面试题
最近在网上偶然看到此题: 有两个序列a,b,大小都为n,序列元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小 经过一番思索,我试着用穷举法 ...
- 基于visual Studio2013解决面试题之1101差值最小
题目
- 将元素平分成差值最小的两个集合(DP)
现有若干物品,要分成较为平均的两部分,分的规则是这样的: 1)两部分物品的个数最多只能差一个. 2)每部分物品的权值总和必须要尽可能接近. 现在请你编写一个程序,给定现在有的物品的个数以及每个物品的权 ...
随机推荐
- 网络资源(10) - Eclipse开发项目
2014_08_26 http://www.360doc.com/content/13/0403/14/11843499_275730704.shtml Eclipse 下搭建struts2开发环境
- WebService返回DataTable问题
今天做项目时,想在WebService中返回DataTable,在单位没成功,看网上有人说datable在.net1.1中是没有序列化的,不能直接在webservice中返回,可以返回dataset. ...
- 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划
今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...
- Swift的笔记和参考
原文:Swift的笔记和参考 好久没来了,趁着新语言Swift发布,继续钻研中! Create Class 创建类 (多态效果) // Create Class 创建类 class MyClass { ...
- Exception dispatching input event. use XlistView
今天上午解决Bug,一个上午的时间: log: 11-01 14:49:14.826: E/InputEventReceiver(30810): Exception dispatching input ...
- ApacheBench(ab)使用简介
网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种设置不当所暴露出的问题. 性能测试工具目前最常见的有以下几种:ab.http_lo ...
- Hibernat之关系的处理一对一处理
第一步:编写两个pojo,比如一个学生表一个班级表 这里使用注解. 需要 公司表: package com.qcf.pox; import javax.persistence.CascadeType ...
- Hibernate 一对多注解 mappedby 作用
package oneToMany; import java.util.Set; import javax.persistence.*; /* 注意导入时,是导入:import javax.persi ...
- C语言库函数大全及应用实例十三
原文:C语言库函数大全及应用实例十三 [编程资料]C语言库函数大全及应用实例十三 函数名: stat 功 能: 读取打 ...
- Delphi三层网络架构代码实现
Delphi三层网络架构代码实现 1 .三层网络的概念 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为: 表现层(UI).业务逻辑层(BLL).数据访 ...