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

时间:2019-01-04 04:29:16

标签: java arrays algorithm math lcm

几天以来,我一直陷入算法问题。 如果我们有一个数字数组,假设arr [2,4,9]和一个var k,假设k = 7。

是否可以通过将k加到arr []内部的每个元素中来获得一个公共数?

编辑:


我说的公共数字是指数字X =(n i k arr [i]) 其中n是每个i可能不同的正整数,k是提供给我们的正整数,arr是数字数组。 因此,基本上是找到一个n,其中n i k arr [i] =所有i的公共数。


我这里有使用LCM概念的直觉,但无法一路弄清楚算法。潜在客户会受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

如果您可以向每个元素添加k的倍数,则数组的每个元素都可以采用以下形式的值

value := arr[i] + j * k

表示某个整数值j。因此,只有当所有元素最初都是彼此相差k的某个倍数时,它们才能获得相同的值。

或者,您可以按照模块化算法查看此问题。只有当所有元素的模值都减少到相同值时,您才能通过添加k

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

答案 1 :(得分:0)

超级简单。

    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);