Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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:KSum优化_Java - Fatal编程技术网

Java:KSum优化

Java:KSum优化,java,Java,我最近遇到了这个问题,从一对数字中找出了ksum,我得到了解决方案,但只是希望有一个更优化的解决方案: public class KSum { public static void kSum(int[] array, int k){ for(int i=0;i<array.length;i++){ for(int j=i+1;j<array.length;j++){ if(k==(array[i]+a

我最近遇到了这个问题,从一对数字中找出了ksum,我得到了解决方案,但只是希望有一个更优化的解决方案:

public class KSum {


    public static void kSum(int[] array, int k){
        for(int i=0;i<array.length;i++){
            for(int j=i+1;j<array.length;j++){
                if(k==(array[i]+array[j])){
                    System.out.println("pair=("+array[i]+","+array[j]+")");
                }
            }
        }
    }
    public static void main(String[] args) {
        int[] array={1,2,3,4,5,6,7};
        kSum(array, 7);
    }

}
公共类KSum{
公共静态void kSum(int[]数组,int k){

对于(int i=0;i一个更有效的解决方案是对输入数组进行排序,并使用两个指针,一个从数组的开头开始,另一个在数组的结尾,在两个方向上遍历整个数组

根据基本逻辑,我们通过每次比较来推进两个指针,直到它们相遇

public static void kSum(int[] array, int K) {
    Arrays.sort(array);

    int start = 0, end = array.length - 1;
    while (start <= end) {
        int sum = array[start] + array[end];
        if (sum < K) {
            ++start
        } else if (sum > K) {
            --end
        } else {
            System.out.println ("pair=(" + array[start] + "," + array[end] + ")");
            ++start;
            --end;
    }
}
publicstaticvoidksum(int[]数组,int K){
数组。排序(数组);
int start=0,end=array.length-1;
while(启动K){
--结束
}否则{
System.out.println(“pair=(“+array[start]+”,“+array[end]+”));
++开始;
--结束;
}
}
在这种情况下,时间复杂度是线性的,因此它是从原始的
O(n^2)
优化的

对于这个问题,还有另一个解决方案,使用
HashMap
[1]

--


[1]

这个站点并不是为了优化工作代码,而是考虑询问,但是如果你走这条路线,请阅读他们的链接和它们的链接,因为他们的站点有高质量和包含/排除标准。我投票把这个问题关为离题,因为它询问的是工作代码。关于“优化”解决方案,你必须给出一个度量,一种判断你所说的优化是什么意思的方法。