首页 > 解决方案 > 成对积计算的算法速度

问题描述

我正在努力寻找数组算法的最大成对乘积作为练习。通过使用两个单独的 for 循环查找数组中的最大和第二大数字,我已经能够将其减少到 2n 次比较。我知道如果我排序然后比较,我可以把它弄得更远。

在下面的算法中是 n 次比较吗?我只有 1 个循环,所以我假设它是。另外,这个的大 O 数是多少?和比较次数一样吗?我知道如果有一个变量,我们会删除任何常量并承担最大程度的问题[抱歉对算法的解释不清楚-我才刚刚开始。

static int EvenFasterAlgorithm (int[] numbers) {
        int maxNum1, maxNum2, index, index2;
        maxNum1 = -1;
        maxNum2 = -1;
        index = -1;
        index2 = -2;
        System.out.println("the size is "+ numbers.length);
        int k = numbers.length-1;

        if(numbers.length > 1)
        {
        for(int i = 0; i < numbers.length; i++) {

            if(numbers[i] > maxNum1 && i != index2) {
                maxNum1=numbers[i];
                index = i;

            }

            if(numbers[k] >= maxNum2 && k != index)
            {
                maxNum2 = numbers[k];
                index2 = k;

            }
            k--;
        }
        return maxNum1*maxNum2;
        }
        else
        {
            return numbers[0];
        }
    }

标签: javaalgorithmbig-o

解决方案


推荐阅读