亚马逊面试题: 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的过程就会很痛苦,而且速度很慢。于是我还是宣布放弃。。。

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

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大。因为最大的和最小的会创造最大距离,而且他们离中间的两个都可以再差一个数这样将一头一尾放在中间,然后中间两个分立两边,可造成最大距离和。


推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 30,766评论 18 399
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,438评论 0 33
  • 最近手头没什么项目,正好可以静下心来提升一下自己的水平(:з」∠)。于是就瞄上了Dependency Inject...
    9b9e2461db01阅读 1,997评论 3 3
  • 2017年十月七日 晚上6:20,我吃到了今天的第一个月饼。今天是中秋过后的第三天。 2017年九月二十九日,上午...
    嫮媚阅读 304评论 0 0
  • 按键音 给控件配置系统按键音非常简单,创建具有提示音功能控件的基类,然后在touch事件中调用 AudioSer...
    远方的枸杞阅读 1,056评论 0 2