【发布时间】:2015-03-12 01:59:34
【问题描述】:
我对此进行了很多思考,但无法找到最佳解决方案。我正在准备技术面试,但是我没有找到很多与这个问题相关的东西。我的第一步是实现一个简单的 O(n) 算法,该算法搜索整个数组以找到最大整数。现在我知道我可以做得比这更好,所以我想也许有一种方法可以使用二分搜索,或者利用数组至少有一半是完全排序的这一事实。也许您可以找到中间值并将其与数组的开头和结尾进行比较。
示例:
[5, 7, 11, 1, 3] 将返回 11。
[7, 9, 15, 1, 3] 将返回 15。
【问题讨论】:
-
好的,继续你的思路。回答面试问题不是要知道答案,而是要解决问题。
-
1.找到最小值。 2.返回左边的值。
-
我认为最佳复杂度是 O(log(n))。读取第一个、中间和最后一个值。如果 first
-
您的第一个数组似乎不符合条件。该数组应该是一个经过排序然后可能旋转的数组,对吗?在这种情况下,“排序”数组是
[1, 5, 7, 6, 4, 10, 11],它没有排序——对吧?还是我误解了这个问题?如果我误解了,我认为您需要更好地解释数组的约束是什么。
标签: java algorithm divide-and-conquer