如何通过将数字 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);
几天来我一直被一个算法问题困扰着。 如果我们有一个数字数组,比如 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);