Java 3-SUM代码意外地运行

时间:2016-10-23 14:30:23

标签: java file oop

我已经解决了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

我得到了

  

总和为0的三胞胎:( - 5, - 2,7)

     

(-2,1,1)

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

  

(-2,1,1)

甚至不属于我的阵列。如果有人能指出我的错误,我会非常感激。

1 个答案:

答案 0 :(得分:1)

( - 2,1,1)不属于您的阵列。但是,-2和1确实如此。所以你可以得出结论&#34; 1&#34;正在重复。要解决此问题,您应该将while循环的条件更改为k > j而不是k >= j

相关问题