小编tri*_*hit的帖子

不使用排序的最大三重产品?

我实现了最大的三重产品算法,但我使用了排序,这使我的时间复杂度为 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)

javascript arrays algorithm

2
推荐指数
1
解决办法
808
查看次数

标签 统计

algorithm ×1

arrays ×1

javascript ×1