0
给定n个元素的SORTED数组。从数组中找出三个数字,它们将加起来给定数字k。3对已排序的数组进行排序。 O(NlogN)实现
下面是我一直想到现在: 我们从两个变量L和H开始,它们存储数组中第一个元素和最后一个元素的索引。在这些索引处添加元素,并从k中减去它并将其存储在一个变量中,比如z。 现在,由于数组已排序,我可以在数组中进行二进制搜索。如果发现z,我有三个数字。如果z没有找到,我不得不增加L或递减H.
现在我不知道何时增加L或何时递减H. 任何想法?
维基说:**低于第一各种各样的输入阵列算法然后测试以避免需要在排序列表中的对折半查找小心为了所有可能的对,实现最坏情况{\ displaystyle O(n^{2})} O(n^{2})time。** 这里,它说它避免了需要做二分搜索,我不明白为什么我们是否必须避免二分查找?另外,在我们的例子中,数组已经排序,我们不能使用这个事实并且使用二分搜索来获得更好的结果吗? – StillLearning
@StillLearning,我们避免二分搜索,因为二分搜索的复杂性将是O(n^2 * logn)(a和b的两个嵌套循环,以及c的二分搜索)。排序是O(n * logn),所以它对整体算法复杂度没有影响。 – DAle
好吧。谢谢! – StillLearning