java - 有没有办法扫描一维数组的 SVD,这样你就可以拥有 O(n) 的复杂度?
问题描述
我正在尝试扫描一维数组以查找奇异值分解(SVD),最差的时间和空间复杂度为 O(n),而不使用任何辅助数据结构。
我设法做到这一点的唯一方法是使用嵌套循环,但这使它成为 O(n^2)
public static void svd(Integer[] array){
int count = 0;
int svd = 0;
for (int i = 0; i < array.length; i++) {
count=0;
for (int j = 0; j < array.length; j++) {
if(array[i] == array[j]){
count++;
}
if(count>(array.length/2)){
svd = array[i];
System.out.println("svd = "+svd);
}
else if(count<array.length/2){}
}
}
}
解决方案
遮阳篷正在使用 Boyer-Moore 多数投票算法
https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm
推荐阅读
- javascript - 使用 express 提供静态文件以进行反应
- html - 使用 React.js 将具有多列的行添加到 html 表
- excel - 如果满足条件,VBA 从工作表复制行并将其粘贴到不同的工作表中
- mysql - 两个 MySQL 表之间的关系问题
- dart - 无论如何要在 Flutter Webview 上绘制一个小部件
- dart - 如何在flutter redux中不构建小部件的情况下调度动作?
- r - 如何聚合不同日期的数据并考虑 R 中的其他列?
- angular - 在 Angular 2 中,如何创建具有泛型类型的类的实例
- ansible - 在 Ansible 中,我如何在有限的时间内循环运行一个任务块?
- node.js - 为什么从工作线程发送日期对象作为消息将其转换为字符串?