java - 降低程序的复杂性
问题描述
如何降低此代码的复杂性:如果数组中有两个元素的和等于数字 K,则此代码返回 true
public static boolean methode(int c, int[] t) {
for(int i = 0; i < t.length; i++)
for(int j = 0; j < t.length; j++)
if(j != i && t[i] + t[j] == c)
return true;
return false;
}
解决方案
作为选项之一,您可以使用Set
存储以前的号码。它将时间复杂度从O(n*n)降低到O(n),但同时将空间复杂度从O(1)增加到O(n)。
public static boolean verification(int k, int[] tab) {
Set<Integer> unique = new HashSet<>();
for(int i = 0; i < tab.length; i++) {
if(unique.contains(k - tab[i]))
return true;
unique.add(tab[i]);
}
return false;
}
推荐阅读
- python - 如何在Tensorflow中使用前向填充合并不规则索引上的多个文件
- c - C中的Char *指针与整数
- c - 数组中的所有元素都设置为C中的最后一个元素?
- r - 在 ggplot 中,如何仅在条形图中仅在特定条形上方打印计数?
- java - 使用 switch 语句嵌套 HTML 代码在 JSP 中报告错误
- javascript - 在 JavaScript 中,为什么任何值都可以散布在对象中,而不能散布在数组中?
- android - 替换剪贴板内容
- javascript - 在 JavaScript 中从 addEventListner 方法调用外部函数时,为什么不在外部函数名称前使用括号
- matlab - GitLab CI 没有启动 Matlab
- sql - Oracle 从序列中提取 ORA-01002