Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 当需要嵌套循环时,如何提高大(0)的空间和时间复杂性?_Java_Algorithm_Time Complexity_Big O_Nested Loops - Fatal编程技术网

Java 当需要嵌套循环时,如何提高大(0)的空间和时间复杂性?

Java 当需要嵌套循环时,如何提高大(0)的空间和时间复杂性?,java,algorithm,time-complexity,big-o,nested-loops,Java,Algorithm,Time Complexity,Big O,Nested Loops,目标是创建一个接受两个参数的函数:一个整数数组和一个作为目标的整数,该函数应该返回数组元素的两个索引,这两个索引相加到目标。我们不能单独求和和元素,我们应该假设给定的数组总是包含和回答 我使用for循环和while循环解决了这个代码kata练习。当N为数组的总元素时,for循环的时间复杂度为线性O(N),但对于每个元素,有一个while过程,该过程也线性增加 这是否意味着此代码的总时间复杂度为O(N²) 公共int[]twoSum(int[]nums,int目标){ int[]答案=新的int

目标是创建一个接受两个参数的函数:一个整数数组和一个作为目标的整数,该函数应该返回数组元素的两个索引,这两个索引相加到目标。我们不能单独求和和元素,我们应该假设给定的数组总是包含和回答

我使用for循环和while循环解决了这个代码kata练习。当N为数组的总元素时,for循环的时间复杂度为线性O(N),但对于每个元素,有一个while过程,该过程也线性增加

这是否意味着此代码的总时间复杂度为O(N²)


公共int[]twoSum(int[]nums,int目标){
int[]答案=新的int[2];
对于(int i=0;i
这是否意味着此代码的总时间复杂度为O(N²)

是的,您的推理是正确的,您的代码确实是O(N²)时间复杂度

您将如何针对时间和空间复杂性对此进行优化

您可以使用辅助数据结构,或对数组进行排序,并对数组执行查找

一个简单的解决方案是
O(n)
average case,即使用哈希表,在遍历列表时插入元素。然后,假设当前遍历的元素是
x
,则需要在哈希表中查找
target-x


我将把实现留给您,我相信您可以做到这一点,并在这个过程中学到很多东西!

如果您有基于
n
的嵌套循环,它将是
O(n平方)
。做得更好的方法是看看您是否可以避免这种内部循环。一旦您有
nums[I]
在外部循环中,您确切地知道需要搜索的其他数字的总和是
target
。也许您可以将数组数及其索引预加载到另一个数据结构中,以便进行固定时间查找。为了进一步研究,将其命名为@Naman,恐怕这只会使问题变得复杂为CS初学者准备的东西。sun子集问题不局限于2个元素,寻找它将导致NP完全性和动态规划。我认为这个推广对于CS初学者来说可能太高级了。但我不会假设OP是初学者,而且,它可能仍然会帮助其他人接触到这篇文章。别担心无,当前建议仍为++。)