从任意两个整数的和中删除数组中的相似元素

时间:2018-09-07 12:42:29

标签: java

我的输入是一个整数,假设M,并且程序必须打印两个整数xy的所有组合,其中x + y = M

让我们将输入作为M = 50,将数组元素作为25 20 25 30 15 45 45 5 而我需要的输出是

5 45,20 30,25 25.

但是我的输出是

5 45,5 45,20 30,25,25

如何删除两次5 45的出现?

我的代码如下

Scanner s = new Scanner(System.in);
int m = s.nextInt();
s.nextLine();
String str = s.nextLine();
StringTokenizer st = new StringTokenizer(str);
int len = st.countTokens();
int[] a = new int[len];
String[] temp = new String[len];
for (int i = 0; i < len; i++)
{
    temp[i] = st.nextToken();
    a[i] = Integer.parseInt(temp[i]);
}
Arrays.sort(a);

for (int i = 0;i < len-1; i++)
{
    for(int j = i + 1; j < len; j++)
    {
        if ((a[i] +a [j]) == m)
            System.out.println(a[i] + " " + a[j]);
    }
}

5 个答案:

答案 0 :(得分:0)

(5 45)打印两次,因为输入中有45次出现了2次(25 20 25 30 15 45 45 5),如果需要不同的对,请从数组中删除重复项。

无论如何,这不是最佳的优化解决方案。有关更多详细信息,请检查https://www.geeksforgeeks.org/count-pairs-with-given-sum/

答案 1 :(得分:0)

使用break跳过重复数字(内循环),然后选中(a[i] - a[i+1]) == 0并使用continue跳过外循环中的重复数字。

for循环中仅包含以下更改,效果很好

// Init a new array.
for(int i=0;i<len-1;i++)
{        
    if((a[i] - a[i+1]) == 0)
       continue;         // for skipping repeated number in outer loop 
    for(int j=i+1;j<len;j++)
    {
        if((a[i]+a[j])==m ) {
            System.out.println(a[i]+" "+a[j]);
            break;             // for skipping repeated number in inner loop
        }
      else if(a[i] == m/2){
        System.out.println(a[i]+" "+a[i]);
        break;
      }
    } 

}

输入

25 ,20, 25 ,30, 15, 45, 45, 5

输出

5 45
20 30
25 25

输入

5 ,5 ,45, 45, 45

输出

5 45

答案 2 :(得分:0)

仅打印正确的对时,您无法检查以前的解决方案。您可以将总和为M的a [i]和a [j]添加到数组中。之后,如果新的对摘要提供M,则可以检查数组中是否有元素。

addProductToCart(product) {
    this.$store.commit("addProductToCart", product);
    this.$toastr("success", "Product added to cart successfully.");
},

答案 3 :(得分:0)

您可以尝试将打印的内容存储在列表中,如果已经打印,则不重复打印。

pip3 install plotly==2.7

答案 4 :(得分:0)

我不会尝试重新发明轮子。只需将每对都放在java.util.Set中,这样您就可以拥有不同的对:

在最后一个嵌套循环之前添加此代码:

Set<String> pairs = new HashSet<>();

然后将System.out.println(a[i] + " " + a[j]);更改为pairs.add(a[i] + " " + a[j]);

最后,您可以打印Set的内容。

Try it online.