我已经解决了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)
甚至不属于我的阵列。如果有人能指出我的错误,我会非常感激。
答案 0 :(得分:1)
( - 2,1,1)不属于您的阵列。但是,-2和1确实如此。所以你可以得出结论&#34; 1&#34;正在重复。要解决此问题,您应该将while循环的条件更改为k > j
而不是k >= j
。