几天以来,我一直陷入算法问题。 如果我们有一个数字数组,假设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概念的直觉,但无法一路弄清楚算法。潜在客户会受到高度赞赏。
答案 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);