首頁 > 軟體

go語言題解LeetCode1122陣列的相對排序

2022-12-29 14:01:05

題目描述

1122. 陣列的相對排序 - 力扣(LeetCode)

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

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

範例 1:

輸入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
輸出:[2,2,2,1,4,3,3,9,6,7,19]

範例  2:

輸入:arr1 = [28,6,22,8,44,17], arr2 = [22,28,8,6]
輸出:[22,28,8,6,17,44]

提示:

1 <= arr1.length, arr2.length <= 1000

0 <= arr1[i], arr2[i] <= 1000

arr2 中的元素 arr2[i]  各不相同 

arr2 中的每個元素 arr2[i] 都出現在 arr1 中

思路分析

最簡單的就是 暴力法 了

解題思路

利用雙迴圈將陣列1的數位依次與陣列二相比較,相同則與前面元素交換位置
陣列1中剩餘元素利用sort函數進行排序即可

vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
        int tmp = 0;
        for(int i = 0;i<arr2.size();++i)
           for(int j = 0;j<arr1.size();++j){
               if(arr1[j] == arr2[i]){
                     swap(arr1[j],arr1[tmp]);
                     ++tmp;
               }
           }
           sort(arr1.begin()+tmp,arr1.end());
           return arr1;
    }

還有就是 計數排序

解題思路

與遞增遞減排序不同,本題是根據陣列順序自定義排序,因此最適合計數排序來實現(桶排序)

因為題意說明陣列中元素在0~1000之間,因此定義一個容量為1000的桶

第一個迴圈對陣列1中的元素進行計數,結果儲存在桶中

第二個迴圈通過陣列2,將重合的元素從陣列1的0位置開始插入

第三個迴圈,搜尋桶中剩餘的陣列1元素,並把它們插入到陣列1的後面。

vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) 
{
	vector<int> count(1001);
	for (int i = 0; i<arr1.size(); i++)
	{
		count[arr1[i]]++;
	}
	int k = 0;
	for (int i = 0; i<arr2.size(); i++)
	{
		while (count[arr2[i]]>0)
		{
			arr1[k++] = arr2[i];
			count[arr2[i]]--;
		}
	}
	for (int i = 0; i < count.size(); i++)
	{
		while (count[i] >0)
		{
			arr1[k++] = i;
			count[i]--;
		}
	}
	return arr1;
}

以上就是go語言題解LeetCode1122陣列的相對排序的詳細內容,更多關於go語言陣列相對排序的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com