亚马逊面试题: Four Integers

Four Integer

Given four integers, make F(S) = abs(S[0]-S[1])+abs(S[1]-S[2])+abs(S[2]-S[3]) to be largest

这道题说实话,我看到题目的时候并没有看懂是什么意思。

如果4个Integer 已定, 那这一大串东西的加减乘除的结果不是应该是一个定值吗。


偷偷看了一眼答案才知道,原来是要把4个integer放在array里打乱,问什么组合下 F(S) 最大。

于是,我的逻辑就是: 先把array 随便塞满, 然后把所有的possible 组合 搭配出来。 比如说abcd, acbd,adbc,.....【这里很明显要用到Backtracking的方法,combination】。

然后所有组合里面最大的那个组合就是our desired.

但是我这么做首先这个combination的过程就会很痛苦,而且速度很慢。于是我还是宣布放弃。。。

亚马逊面试题: Four Integers_第1张图片

参考了一下答案发现,这道题我最大的失败就是没仔细分析

F(S) = abs(S[0]-S[1])+abs(S[1]-S[2])+abs(S[2]-S[3])。

better Way :先写一个例子,1 3 4 6。如果采用一种greedy 的方法,第一个固定,第二个挑距离最大的6,第三个挑4,最后是3。这样下来 5 + 3 + 1 = 8。很明显,3和4放在一起距离太小了,把他们分开放最好。于是有了3 1 6 4,这样还是不如 4 1 6 3大。因为最大的和最小的会创造最大距离,而且他们离中间的两个都可以再差一个数这样将一头一尾放在中间,然后中间两个分立两边,可造成最大距离和。


亚马逊面试题: Four Integers_第2张图片

你可能感兴趣的:(亚马逊面试题: Four Integers)