3 回答


TA貢獻(xiàn)27條經(jīng)驗(yàn) 獲得超28個(gè)贊
題目不是很完整。我理解是比如說(shuō)把n個(gè)(二維)坐標(biāo)值,保存到長(zhǎng)為n的一維數(shù)組里,數(shù)組里每個(gè)元素對(duì)應(yīng)一個(gè)坐標(biāo)?
取巧的方法,因?yàn)槟銢](méi)說(shuō)一維數(shù)組是什么類型的,比如你定義一個(gè)Coordinate類,里面存儲(chǔ)坐標(biāo)值:
class?Coordinate{ ????public?int?x; ????public?int?y; }
那你的一維數(shù)組就存儲(chǔ)這個(gè)Coordinate類
Coordinate[]?array
如果你的數(shù)組要求是個(gè)int類型的,這看起來(lái)像是關(guān)系到可計(jì)算理論,可數(shù)和等勢(shì)的問(wèn)題了。說(shuō)白了就是讓二維(假設(shè)你是二維坐標(biāo)值)數(shù)和自然數(shù)建立一一映射的關(guān)系??雌饋?lái)像是個(gè)算法題,記得以前見(jiàn)過(guò)這種類似的面試題。
要求是首先你的坐標(biāo)值不可以是實(shí)數(shù),因?yàn)閷?shí)數(shù)本身不可數(shù),更別提二維實(shí)數(shù)了。
假設(shè)你的坐標(biāo)也全是int類型。那么問(wèn)題轉(zhuǎn)化為如何建立一對(duì)<int, int> 和 一個(gè)int 的一一對(duì)應(yīng)的關(guān)系。如果你學(xué)過(guò)有理數(shù)和自然數(shù)是如何一一對(duì)應(yīng)的,應(yīng)該可以解答,因?yàn)橛欣頂?shù)可以看做兩個(gè)自然數(shù)的商。假設(shè)坐標(biāo)值非負(fù),那么可以用三角形數(shù)法,按照組零:(0,0) 組一(0,1) (1,0) 組二(0,2) (1,1) (2,0) 組三(0,3) (1,2) (2,1) (3,0)這樣一路數(shù)下來(lái)。每一組的橫縱坐標(biāo)相加等于組號(hào),而第k組有k+1個(gè)坐標(biāo)。
比如給你個(gè)坐標(biāo)(m,n),先找它對(duì)應(yīng)的組是m+n。在它之前的組總共有(m+n+1)*(m+n)/2個(gè)坐標(biāo)了,再加上(m,n)是這一組的第m+1個(gè)坐標(biāo)(或者叫偏移量),所以(m,n)是第(m+n+1)*(m+n)/2+m+1個(gè)坐標(biāo),你如果喜歡從零開(kāi)始計(jì)數(shù),就是(m+n+1)*(m+n)/2+m。于是成功將(m,n)映射成為了一個(gè)自然數(shù)。舉例(3,4)對(duì)應(yīng)的自然數(shù)就是31,把它作為相應(yīng)的一維int數(shù)組元素。
輸入(0,0), (1,2), (3,4)
輸出array={0,7,31}
而從自然數(shù)解碼出二維數(shù)組,就把上面的過(guò)程反過(guò)來(lái)。
如果考慮負(fù)數(shù),比較方便的比如用菱形數(shù)法,|x|+|y|=k作為第k組,該組有4k個(gè)元素,然后從(0,k)開(kāi)始順時(shí)針計(jì)算偏移量。不贅述了。
把二維坐標(biāo)擴(kuò)展到任意有限維有理數(shù)都是可以的,因?yàn)槎际强蓴?shù)的。

TA貢獻(xiàn)14條經(jīng)驗(yàn) 獲得超3個(gè)贊
? 百度上找的,,我也要學(xué)習(xí)一下
java將動(dòng)態(tài)產(chǎn)生的坐標(biāo)值存到數(shù)組當(dāng)中,可以將數(shù)據(jù)放入二維數(shù)組中,如下代碼:
public?class?test{
????public?static?void?main(String[]?args){
????????int?[]?arr1?=?{1,?2,?3,?4,?5,?6,?7,?8,?9,?10};?//?假設(shè)這是你的坐標(biāo)(1,2),(3,4),……
????????int?[][]?arr2?=?new?int[arr1.length?/?2][2];?//?創(chuàng)建一個(gè)行為原數(shù)組長(zhǎng)度一半,列為2的二維數(shù)組
????????for?(int?i?=?0;?i?<?arr1.length;?i++)?{
????????????//?遍歷原數(shù)組,賦值給新數(shù)組
????????????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();
????????}
????}?
}
??
添加回答
舉報(bào)