Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 降低程序的复杂性_Java_Time Complexity - Fatal编程技术网

Java 降低程序的复杂性

Java 降低程序的复杂性,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

如何降低此代码的复杂性: 如果数组中有两个元素的和等于数字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;
}
公共静态布尔方法(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
不会为您提供此类属性。