我有一个 Java 计算问题,其中给了我一个整数数组:
例如:
3 -2 -10 0 1
我应该计算可以从这些整数中形成的最小整数和最大三元组。(在这种情况下,min=-30,max=60)
我最初认为最大值总是正数,最小值总是负数。
因此,
我最初的算法是:
- 扫描数组,取出里面最大的3个元素,存入一个数组。
- 同时取出里面最小的3个元素,存入另一个数组。
通过不等式,我们可以得出以下结论:
+ve = (-)(-)(+) 或 (+)(+)(+)
-ve = (+)(+)(-) 或 (-)(-)(-)
因此,我使用我计算的两个数组中的元素来尝试获得最大和最小三元组。(即为了得到最大的三元组,我比较了最大的3组成的三元组和最小的2和最大整数组成的三元组)
然而,我意识到如果所有给定的整数都是负数,我的算法就会失败,因为最大值是负数。(反之亦然)
我知道我可以简单地添加更多检查来解决这个问题,或者只是使用蛮力 O(N^3) 解决方案。但是必须有更好的方法来解决这个问题。
这个问题必须通过递归来解决,并且只能在 O(N) 时间内解决。
我正在修复中。有人可以指导我吗?
谢谢。