我想在索引i和索引j(包括i和j)之间的数组中执行循环左移。
例如:考虑数组A,例如,
int[] A = {1, 2, 3, 4, 5};如果我想在给定的数组A中执行0(索引i)和2(索引j)之间的循环左移,输出是:
A = {2, 3, 1, 4, 5}java中有没有内置的函数可以执行这种类型的操作。
我不是在问如何将一个数组循环左移n次。我的问题是循环左移数组中的一些元素,正如我在示例中所展示的那样。
发布于 2019-03-14 00:58:51
是的,它有一个内置函数:Collections.rotate
例如,
Collections.rotate(Arrays.asList(A).subList(i, j+1), -1);更新:
这不能直接用于原始数组,因为Arrays.asList不会为您执行装箱操作。您需要以某种方式创建一个Integer[]或List<Integer>,这并不是一种非常优雅的方法。
发布于 2019-03-14 01:07:43
对于集合,有许多可用的操作。对于数组,Arrays类提供了copyOfRange和其他方法,但没有提供所需的就地操作。您可以执行以下操作:
int[] a = {1, 2, 3, 4, 5};
final int lwb = 0;
final int upb = 2;使用lambda:
int alwb = a[lwb];
Arrays.setAll(a, i ->
i < lwb || i > upb ? a[i]
i < upb -> a[i+1] : alwb
);或者最好的:
int alwb = a[lwb];
System.arraycopy(a, lwb + 1, a, lwb, upb - lwb - 1);
a[upb] = alwb;https://stackoverflow.com/questions/55146987
复制相似问题