我实现了最大的三重产品算法,但我使用了排序,这使我的时间复杂度为 O(nlogn)。有没有办法在没有临时排序数组的情况下实现它?
问题:给定一个包含 n 个整数 arr[0..(n-1)] 的列表。您必须计算一个列表 output[0..(n-1)] ,使得对于每个索引 i(在 0 和 n-1 之间,包括端点),output[i] 等于三个最大元素的乘积arr[0..i](如果 i < 2,则等于 -1,因为 arr[0..i] 然后包含少于三个元素)。请注意,用于形成任何乘积的三个最大元素可能彼此具有相同的值,但它们在 arr 中必须位于不同的索引处。
例子:
var arr_2 = [2, 4, 7, 1, 5, 3];
var expected_2 = [-1, -1, 56, 56, 140, 140];
Run Code Online (Sandbox Code Playgroud)
我的解决方案:
function findMaxProduct(arr) {
// Write your code here
if(!arr || arr.length === 0) return [];
let helper = arr.slice();
helper.sort((a,b)=>a-b); // THIS IS THE SORT
let ans = [];
let prod = 1;
for(let i=0; i<arr.length; i++) …Run Code Online (Sandbox Code Playgroud)