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();
????????}
????}?
}
??
添加回答
舉報