java - 如何更改二维数组的大小?
问题描述
如何在不重新排列数组中的数字的情况下更改二维数组的大小,主要使用 for 循环并且仅使用内置方法?例如 {{4,5,6,7,10}, {8,4,3,9,13}} 变为 {{4}, {5,6}, {7,10,8}, { 4,3,9,13}}。
我尝试将二维数组分成两个单独的部分,然后将其添加回新的二维数组。我不确定如何创建第二个二维数组。
解决方案
有很多方法可以做到这一点。这是一个适用于
源自二维数组的任何三角形数量的元素。
首先,将它们全部展平为一个数组。
int[] oneD = Arrays.stream(src).flatMapToInt(Arrays::stream).toArray();
然后反转长度,应该是下面k
的k = n(n+1)/2
行数。并且 2D 结果是部分分配的。
int rows = (int)(Math.sqrt(2*oneD.length + .25) -.5);
int[][] dest = new int[rows][];
现在只需从oneD
数组复制到目标即可。
for (int i = 0, s = 0, e = 1; i < rows; i++) {
dest[i] = Arrays.copyOfRange(oneD, s, e );
s = e;
e += i+2;
}
for (int[] arr : dest) {
System.out.println(Arrays.toString(arr));
}
印刷
[4]
[5, 6]
[7, 10, 8]
[4, 3, 9, 13]
推荐阅读
- amadeus - Amaedus航班预订的工作流程?
- oracle - 按顺序更改列数据位置
- unity3d - 会话开始使用 ARFoundation 后,如何让模型出现在 AR Camera 前?
- eclipse - 当以 ASCII 格式转储时,CAP 文件包含主小程序类和所有其他类文件详细信息
- mysql - VB.Net Query For MYSQL Query 在集合中查找
- ruby-on-rails - Capistrano 获取命令行选项
- django - Django 日志中未知的无效 HTTP_HOST 标头:api-keyboard.cmcm.com
- charts - Google LineChart - 如何根据最大值绘制垂直轴线。行在最大值之前停止
- java - Leanback 视频播放器 UI 的修改
- scrapy - 抓取 RSS:Scrapy 未返回任何数据