1122 陣列的相對排序 力扣

2021-10-10 13:47:07 字數 1615 閱讀 4949

問題描述:

給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同,arr2 中的每個元素都出現在 arr1 中

對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 **現過的元素需要按照公升序放在 arr1 的末尾。

解題思路:

直接法:

按照題目的直譯,我的不成熟理解就是,先定義乙個從頭開始的指標index,在遍歷arr2陣列的同時,將arr2的各個元素與arr1的元素進行對比,如何相同則將arr1的該下標的元素與下標為index的元素進行置換,index向下移動。直至遍歷所有的arr2中的元素,這時在arr2**現的元素已經被相對排序了,剩下的就是對arr2中未出現的arr1中的元素進行排序了,用任一排序演算法即可進行解決。

**為:

class

solution}}

reverse

(arr1,start)

;return arr1;

}//置換陣列中兩個元素的方法

public

static

void

swap

(int

arr,

int i,

int j)

// 排序arr2中未出現的數字

public

static

void

reverse

(int

arr,

int start)}}

}}

桶排序法:

觀察到測試用例並不算大,陣列的最大長度,最大取值均不大於1000.因此可以用桶排序一試。

開始定義乙個長度為1001的陣列frequency,遍歷arr1,將arr1陣列中的每個值i出現一次,就將frequency [i] +1 ,遍歷完成後得到的就是關於arr1每個值出現的次數的乙個陣列了。frequency陣列中下標表示arr1中的值,下標對應的值就是 arr1中的這個值出現的次數。然後遍歷arr2 陣列 ,如果在frequency中的值不為0 ,就從0 依次賦值給arr1,賦值後右移,並且在將乙個值賦值後要賦值為0(以便後續對arr2中不存在的值的排序和賦值)這時,就按arr2中的相對順序給arr1排序了,並且在arr2出現過的值都給置0 了,接著只需要再次從0開始遍歷frequency陣列,將非0的數依次輸出即可。

**:

class

solution

// 從0開始的指標,用來對arr1進行覆蓋排序

int start=0;

// 按arr2**現的次序進行覆蓋

for(

int i:arr2)

}// 遍歷frequency,對非0 值進行「輸出」,此時已是按序了

for(

int i=

0;ireturn arr1;

}}

綜上,就是小生對此題的理解,如果對您有所幫助,欣喜萬分。如果上訴書寫有所不妥,請及時「批評」,定將虛心接受,及時改正。如果您還有什麼好的點子,望不吝賜教哦!碼海再會!

1122 陣列的相對排序

給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同 arr2 中的每個元素都出現在 arr1 中 對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 現過的元素需要按照公升序放在 arr1 的末尾。示例 輸入 arr1 2,3,1...

1122 陣列的相對排序

給你兩個陣列,arr1和arr2,對arr1中的元素進行排序,使arr1中項的相對順序和arr2中的相對順序相同。未在arr2 現過的元素需要按照公升序放在arr1的末尾。示例 輸入 arr1 2,3,1,3,2,4,6,7,9,2,19 arr2 2,1,4,3,9,6 輸出 2,2,2,1,4,...

1122 陣列的相對排序

題目描述 給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同 arr2 中的每個元素都出現在 arr1 中 對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 現過的元素需要按照公升序放在 arr1 的末尾。示例 輸入 arr1 ...