Java 降低程序的复杂性
如何降低此代码的复杂性: 如果数组中有两个元素的和等于数字K,则此代码返回trueJava 降低程序的复杂性,java,time-complexity,Java,Time Complexity,如何降低此代码的复杂性: 如果数组中有两个元素的和等于数字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
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;
}
公共静态布尔方法(int c,int[]t){
对于(int i=0;i
作为选项之一,您可以使用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;
}
公共静态布尔验证(int k,int[]选项卡){
Set unique=新的HashSet();
对于(int i=0;i
作为选项之一,您可以使用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;
}
公共静态布尔验证(int k,int[]选项卡){
Set unique=新的HashSet();
对于(int i=0;i
如果要检查两个元素的总和,可以使用以下代码。简单一点:
public static boolean verification(int k, int[] tab) {
for(int i = 0; i < tab.length - 1; i++)
for(int j = i + 1; j < tab.length; j++)
if(tab[i] + tab[j] == k)
return true;
return false;
}
公共静态布尔验证(int k,int[]选项卡){
对于(int i=0;i
如果要检查两个元素的总和,可以使用以下代码。简单一点:
public static boolean verification(int k, int[] tab) {
for(int i = 0; i < tab.length - 1; i++)
for(int j = i + 1; j < tab.length; j++)
if(tab[i] + tab[j] == k)
return true;
return false;
}
公共静态布尔验证(int k,int[]选项卡){
对于(int i=0;i
使用一个for循环遍历数组,并记录找到k
的次数。等等,您说过“如果两个值等于k,则返回true”。你是说如果两个值之和等于k吗?@khelwood我自己也注意到了这一点。起初,我没有仔细查看代码,但似乎这确实是我的意图——如果两个元素的总和是k
,如果两个元素分别等于k
@VLAZ,则可能运算会考虑得足够清楚。用一个for循环遍历数组,并记录找到k
的次数。等等,你说的是“如果两个值等于k,则返回true”。你是说如果两个值之和等于k吗?@khelwood我自己也注意到了这一点。起初我没有仔细看一下代码,但似乎这确实是我的意图——如果两个元素的总和是k
,而不是如果两个元素分别等于k
@VLAZ,那么OP可能会考虑得足够周全来澄清。解决方案是corerct,但从大O
的角度来看,它具有相同的复杂性。谢谢,但此代码复杂性等于我在问题中提出的代码复杂性。解决方案是corerct,但从big O
的角度来看,它具有相同的复杂性。谢谢,但此代码复杂性等于我在问题中提出的代码复杂性。首先感谢,我只想知道为什么要使用Set来存储值,以及我是否可以使用Arraylist或Array代替它,因为Set
包含唯一的元素和contains()
需要O(1)个时间ArrayList
不会为您提供此类属性。首先,我只想知道您为什么使用Set来存储值,以及我是否可以使用ArrayList或Array来代替thanks,因为Set
包含唯一的元素和contains()
需要0(1)个时间ArrayList
不会为您提供此类属性。