3 回答
TA贡献27条经验 获得超28个赞
题目不是很完整。我理解是比如说把n个(二维)坐标值,保存到长为n的一维数组里,数组里每个元素对应一个坐标?
取巧的方法,因为你没说一维数组是什么类型的,比如你定义一个Coordinate类,里面存储坐标值:
class Coordinate{ public int x; public int y; }
那你的一维数组就存储这个Coordinate类
Coordinate[] array
如果你的数组要求是个int类型的,这看起来像是关系到可计算理论,可数和等势的问题了。说白了就是让二维(假设你是二维坐标值)数和自然数建立一一映射的关系。看起来像是个算法题,记得以前见过这种类似的面试题。
要求是首先你的坐标值不可以是实数,因为实数本身不可数,更别提二维实数了。
假设你的坐标也全是int类型。那么问题转化为如何建立一对<int, int> 和 一个int 的一一对应的关系。如果你学过有理数和自然数是如何一一对应的,应该可以解答,因为有理数可以看做两个自然数的商。假设坐标值非负,那么可以用三角形数法,按照组零:(0,0) 组一(0,1) (1,0) 组二(0,2) (1,1) (2,0) 组三(0,3) (1,2) (2,1) (3,0)这样一路数下来。每一组的横纵坐标相加等于组号,而第k组有k+1个坐标。
比如给你个坐标(m,n),先找它对应的组是m+n。在它之前的组总共有(m+n+1)*(m+n)/2个坐标了,再加上(m,n)是这一组的第m+1个坐标(或者叫偏移量),所以(m,n)是第(m+n+1)*(m+n)/2+m+1个坐标,你如果喜欢从零开始计数,就是(m+n+1)*(m+n)/2+m。于是成功将(m,n)映射成为了一个自然数。举例(3,4)对应的自然数就是31,把它作为相应的一维int数组元素。
输入(0,0), (1,2), (3,4)
输出array={0,7,31}
而从自然数解码出二维数组,就把上面的过程反过来。
如果考虑负数,比较方便的比如用菱形数法,|x|+|y|=k作为第k组,该组有4k个元素,然后从(0,k)开始顺时针计算偏移量。不赘述了。
把二维坐标扩展到任意有限维有理数都是可以的,因为都是可数的。
TA贡献14条经验 获得超3个赞
百度上找的,,我也要学习一下
java将动态产生的坐标值存到数组当中,可以将数据放入二维数组中,如下代码:
public class test{
public static void main(String[] args){
int [] arr1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 假设这是你的坐标(1,2),(3,4),……
int [][] arr2 = new int[arr1.length / 2][2]; // 创建一个行为原数组长度一半,列为2的二维数组
for (int i = 0; i < arr1.length; i++) {
// 遍历原数组,赋值给新数组
arr2[i / 2][i % 2] = arr1[i];
}
for (int i = 0; i < arr2.length; i++ ) {
for (int j = 0; j < arr2[i].length; j++ ) {
System.out.print(arr2[i][j] + " ");
}
System.out.println();
}
}
}
添加回答
举报