如何通过将数字 k 添加到数字数组 arr[] 来得到一个公共数字?

How to reach a common number by adding a number k, to an array of numbers arr[]?

几天来我一直被一个算法问题困扰着。 如果我们有一个数字数组,比如 arr[2,4,9] 和一个 var k,比如 k=7.

是否有一个可能的公共数字,可以通过将 k 添加到 arr[] 中的每个元素来达到?

编辑:


WHen i say common number i mean a number X=(nikarr[i]) 其中 n 是一个正整数,每个 i 可以不同,k 是提供给我们的正整数,arr 是数字数组。 所以基本上是找到一个 n ,其中 nikarr[i] = 所有 i.

的公共数

我有一种在这里使用 LCM 概念的预感,但一直无法弄清楚算法。将不胜感激。

如果您可以将 k 的倍数添加到每个元素,则数组的每个元素都可以采用

形式的值
value := arr[i] + j * k

对于某个整数值 j。因此,如果所有元素最初都是 k 彼此相差的某个倍数,它们只能获得相同的值。

或者,您可以从模运算的角度来看待这个问题。只有当所有元素以模 k 减少到相同的值时,您才能通过添加 k

的倍数来获得它们之间的公共值
forall e in arr ->  e mod k == c; for some constant c

超级简单。

    List<Integer> l = Arrays.asList(1, 6, 11);
    int k = 5;

    int min = l.stream().mapToInt(x -> x).min().getAsInt();
    boolean result = l.stream().mapToInt(x -> x)
            .map(x -> x - min)
            .allMatch(x -> x % k == 0);

    System.out.println("result = " + result);