一種排序 引發 java兩個引用指向同乙個物件

2021-06-22 14:35:58 字數 2208 閱讀 5714

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:3 描述

現在有很多長方形,每乙個長方形都有乙個編號,這個編號可以重複;還知道這個長方形的寬和長,編號、長、寬都是整數;現在要求按照一下方式排序(預設排序規則都是從小到大);

1.按照編號從小到大排序

2.對於編號相等的長方形,按照長方形的長排序;

3.如果編號和長都相同,按照長方形的寬排序;

4.如果編號、長、寬都相同,就只保留乙個長方形用於排序,刪除多餘的長方形;最後排好序按照指定格式顯示所有的長方形;

輸入第一行有乙個整數 0

每一組第一行有乙個整數 0

接下來的m行,每一行有三個數 ,第乙個數表示長方形的編號,

第二個和第三個數值大的表示長,數值小的表示寬,相等

說明這是乙個正方形(資料約定長寬與編號都小於10000);

輸出順序輸出每組資料的所有符合條件的長方形的 編號 長 寬

樣例輸入

1

81 1 1

1 1 1

1 1 2

1 2 1

1 2 2

2 1 1

2 1 2

2 2 1

樣例輸出

1 1 1

1 2 1

1 2 2

2 1 1

2 2 1

由題目:要注意一點:第二個和第三個數值大的表示長,數值小的表示寬,相等。

需要對長和寬進行處理。

思路:其實也很簡單,就是一種公升序的排列,還要涉及到權重,權重(編號》長》寬),只有相等的時候,才需要比較下乙個等級。並且,乙個尤其重要的是:涉及到交換和移動的時候一定要整體進行。而且測試用例有點坑嗲,如果你交換或移動沒有整體性的話,得出的結果和測試用例是一樣的。這就導致為什麼很多人士wrong answer 的。。---我就是其中乙個。

第一種方法:(同樣是用插入排序,把他寫熟了,效能是怎麼都好過氣泡排序的)

//暴力的插入排序,思想很簡單,根據權重順序進行排列,相等的時候,繼續比較下乙個(權重:編號,長,寬)不過不知道為何wrong answer,感覺思路是沒有錯的--原來是要整體**換

public void insertsortone(scanner sc)

//插入排序--先實現,後面再優化--交換的時候,要當成乙個整體進行交換,不是就會錯,而且給出的測試案例特殊,不交換測試案例也是對的。但是肯定是wrong answer

int j=i;

while(j>0&&tmpn0&&tmpl0&&tmpw

就是宣告乙個內部類,將編號,長,寬放進去。通過get,set進行修改,也是一種封裝的思想(但是乙個開始不是這樣的,貪圖方便)。尤其是插入排序,一定為涉及到陣列物件的移動的。

使用前必須例項化乙個物件先:rectangle[i]=new rectangle();

直接把它寫成:rectangle[j]=rectangle[j-1];

物件陣列存的是乙個物件引用,前面這樣先,相當於拷貝,即:兩個引用指向了同乙個物件,無論通過修改那個引用,必定會修改到同乙個物件,具體檢視:淺拷貝和深拷貝。留個**(不一定是最好的):

所以必須做出修改,通過get,set進行賦值,移動 或者用集合,暫時沒想到

rectangle[j].setnum(rectangle[j-1].getnum());

rectangle[j].setleng(rectangle[j-1].getleng());

rectangle[j].setwidth(rectangle[j-1].getwidth());

附上方法二:

public void insertsorttwo(scanner sc)

}for (int j = 0; j < longer - 1; j++) else if (num[j] == num[k] && length[j] < length[k]) else if (num[j] == num[k] && length[j] == length[k]

&& wide[j] < wide[k]) else if (num[j] == num[k] && length[j] == length[k]

&& wide[j] == wide[k]) }}

for (int j = longer - 1; j >= 0; j--) else

}} }

}

合併兩個DataSet的一種方法

需求描述 欲實現列印功能,一些記錄項,即使內容項沒有資料,也要保留其編號,並空出這一行 資料庫在採集資料時,只採集了那些內容項不為空的資料,即只有乙個包含均不為空的表。直觀想法 設計乙個和資料庫中採集到的資料的那個表結構一樣的表table2,只包含全部的 id 值,內容項由已有的table1來填充。...

JAVA兩個引用指向同乙個陣列

在這段程式中,arrayb是通過arraya賦值得到的,並不是new出來的,所以他們內部儲存的位址值是一樣,他們指向的是同乙個陣列。注 陣列在程式執行當中,長度是不能改變的。arraya與arrayb即為引用。可以理解為c語言中的指標,都是儲存乙個記憶體位址值,指向一塊記憶體。引用與指標的區別 1....

劍指Offer Python 合併兩個排序的鍊錶

題目 合併兩個排序的鍊錶 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 因為兩個鍊錶是有序的,將其合併,用到了雙指標合併的方法。大致步驟 設定兩個指標分別指向兩個鍊錶的頭部,定義乙個新的鍊錶。比較兩個指標結點大小,將較小結點插入新煉表中,然後繼續向...