Java 3-SUM 代码表现异常

标签 java file oop

我尝试过解决 3-sum 问题,您可以从文件中读取数组元素的数量,然后读取数组本身,然后将三元组发送到另一个文件。

对于那些不知道 3-sum 问题的人,这里是:3SUM 问题询问给定的 n 个实数集是否包含三个总和为零的元素。如果是,则返回三元组。三胞胎必须是不同的。

这是我的代码:

   import java.util.*;
import java.io.*;

public class Main 
    { public static void main(String[] args) throws Exception            
        { int number_elements=0;
        int[] array_elements=null;
        File file = new File("date.in.txt");     
        File file2 = new File("date.out.txt");

        try  
            {Scanner input = new Scanner(file);
            number_elements=input.nextInt();
            array_elements = new int[number_elements];
            int contor=0;
            while(input.hasNext())
                { array_elements[contor]=input.nextInt();
                contor++; }}

        catch(IOException e)
            { System.out.println("eroare"); }


        Arrays.sort(array_elements);


        try 
            { PrintWriter output = new PrintWriter(file2); 
            output.print("The triplets who sum to 0: ");
            for(int i=0;i<number_elements-2;i++)
                { int j=i+1;
                int k=number_elements-1;
                while(k>=j)
                    { int temp=array_elements[i]+array_elements[j]+array_elements[k];
                    if(temp==0)
                        { output.println("( "+array_elements[i]+", "+array_elements[j]+", "+array_elements[k]+" )\n");
                        break; }
                    else if(temp>0)
                        k--;
                    else if(temp<0)
                        j++; }}
           output.close(); }

        catch(IOException e)
            { System.out.println("eroare"); }
        }}

对于输入:

8

3 1 2 -5 -2 10 7 3

我明白了

The triplets who sum to 0: ( -5, -2, 7 )

( -2, 1, 1 )

我真的不明白为什么,我的意思是,

( -2, 1, 1 )

甚至不属于我的数组。如果有人能指出我的错误,我将非常感激。

最佳答案

(-2,1,1) 不属于您的数组。然而,-2 和 1 却可以。所以你可以断定“1”正在重复。要解决此问题,您应该将 while 循环的条件更改为 k > j 而不是 k >= j

关于Java 3-SUM 代码表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40204061/

相关文章:

python - 如何在新类中实例化对象?

c++ - C++ 中的组合模式,是否有首选方法?

java - 我应该在 API 包中使用数据类的接口(interface)吗?

java - JPA Left Join IS NULL 条件不起作用

java - Google Cloud Tools for Eclipse 控制台中的字符损坏

java - 从文件系统中获取文件并将其作为 File 对象传递

c - 写入文件并使用带循环的 if 语句

linux - 在awk中将不同的行累积到不同的文件中

java - 在 Glassfish 4 上启动小程序

c++ - 函数指针是否不支持 C++ 中的实例类型