华为面试题(8分钟写出代码),这问题的正解究竟是啥( 二 )
这是我很久之前写的代码,用C实现的,数组大小我自定义为7,可以通过更改SIZE来改变大小,当然如果有缺陷也是很正常的,毕竟我也不是大神,望轻喷。思路是先分别计算出a,b两个数组的和suma和sumb,以及他们的差值,这里我用diff表示。然后sa和sb是用来记录循环之前的suma和sumb的,只有当循环前与循环后的差值相同时,才可以认为已经无法进行交换,所以我这里是用一个while(1)循环来控制。这里的flag和f是我设置的标志位。当suma\u0026gt;sumb和suma\u0026lt;sumb时不一样的执行路线,但是思路相同,拿suma\u0026gt;sumb举例,利用两个for循环嵌套遍历两个数组,当然这会使算法的执行效率降低,应该会有比我更好的方法,但是本人程度有限。这里涉及到两个数组元素之间相减,进而判断是否\u0026lt;=diff/2.为什么会用diff/2呢,是因为在这种情况下差值为diff,而若相减之后为diff/2,交换后即可保证其差值会变小,若正好为diff/2,甚至程序就可以执行完毕了,然后根据suma大还是sumb大进行具体交换。因为时隔很久,逻辑可能不是很清晰,老程序可能也有错误,希望大家轻喷,也希望得到大神们的指点。
■网友
没尝试写代码……我就脑洞一下======================脑洞1================================把所有数相加 求和,然后 /2 得 中间数M然后 拿全部数 一个个的相加,直到 值 接近M ,这个是A数组然后 剩下的 就是 另一个是 B数组……不过这好像不满足 “交换” 这个概念?
■网友
可不可以这样 1.将两组数据打乱然后去重,单个数字数目为偶数全删,为奇数则只留一个,这样排序后我将得到一个总数为偶数且完全不重复的一组数据A 2.随后将A两两分组,即第一位和第二位,第三位和第四位...,得到他们的差值,去重后得到B,重复进行上一部分由A-B的循环..3.这样其实就是用差值来代表二个,四个,或n个数,而所有被去重的以及被删除的,都会均分到两个数组,因此最后要么得到均分的两个数组,要么得到差值最小的两个数组,而且由于差值是越来越相似的,比如一次减法操作后出现大量的1,因此计算量会越来越少---来自一个医学狗的好奇
推荐阅读
- 汽车|传华为智能汽车部件采用三元锂电池
- 怎样评价华为、诺基亚、中兴中标中国移动高端路由交换设备扩容集采
- 汽车|长安汽车:公司与华为、宁德时代三方正在联合开发智能网联电动汽车平台和产品
- 华为会因为美国制裁而倒闭吗
- 华为项目经理offer
- 怎样看待华为手机中的\"情景智能\"功能
- PHP程序员岗位招聘面试题有哪些
- 本科工科985电气工程及其自动化四年出来可以去华为吗专业会不会不对口
- 华为为何在今年做出这种事小米又该怎样进军线下市场,或者说反击
- 汽车|华为正在热身!曾说不造手机,现又不造汽车
