java - 成对积计算的算法速度
问题描述
我正在努力寻找数组算法的最大成对乘积作为练习。通过使用两个单独的 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];
}
}
解决方案
推荐阅读
- css - 如何在多个字符串上使用 CSS 应用类型编写器动画
- java - 设置列表首选项后,为什么我的应用程序不会更改为暗模式 (Android Q)?
- python - 如何按字典值搜索带有嵌套字典的列表,返回带有字典元素的列表索引
- java - 如何从 Intstream 创建 ArrayList
- javascript - Switch 语句不执行相应的块
- android - FirebaseAuth 监听器没有被调用
- python - Pygame Collidepoint 函数未按预期工作
- java - Kakfa consumer.poll 不返回 2.4.0 的记录
- c++ - 我希望两个循环并行运行
- javascript - 当用户关闭移动浏览器窗口时如何采取行动?