LeetCode1122. 陣列的相對排序(20201114每日一題)
給你兩個陣列,arr1 和 arr2,
arr2 中的元素各不相同
arr2 中的每個元素都出現在 arr1 中
對 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,3,3,9,6,7,19]
提示:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2 中的元素 arr2[i] 各不相同
arr2 中的每個元素 arr2[i] 都出現在 arr1 中
連結:https://leetcode-cn.com/problems/relative-sort-array
import java.util.Arrays;
/**
* 給你兩個陣列,arr1 和 arr2,
* <p>
* arr2 中的元素各不相同
* arr2 中的每個元素都出現在 arr1 中
* 對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 中出現過的元素需要按照升序放在 arr1 的末尾。
* <p>
* 示例:
* <p>
* 輸入: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]
*
* @author mac
* @date 2020/11/14-9:51
*/
public class t1122_陣列的相對排序 {
public static void main(String[] args) {
}
/**
* @param arr1 待排序陣列
* @param arr2 排序規則陣列
* @return
*/
public int[] relativeSortArray(int[] arr1, int[] arr2) {
int[] arr = new int[arr1.length];
int a = 0;
// O(k*n) 雙重迴圈,把符合條件的資料放入新陣列,老陣列置位-1
for (int i = 0; i < arr2.length; i++) {
for (int j = 0; j < arr1.length; j++) {
if (arr2[i] == arr1[j]) {
arr[a] = arr1[j];
a++;
arr1[j] = -1;
}
}
}
// 如果arr1中沒有出現arr2中出現的資料,直接返回
int k = arr1.length - (a + 1);
if (k <= 0) {
return arr;
}
// 從小到大排序
Arrays.sort(arr1);
// 不是-1的資料繼續set到新陣列
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != -1) {
arr[a] = arr1[i];
k++;
a++;
}
}
return arr;
}
/**
* @param arr1 待排序陣列
* @param arr2 排序規則陣列
* @return arr 新陣列
*/
public int[] relativeSortArray0(int[] arr1, int[] arr2) {
int[] nums = new int[1001];
int[] arr = new int[arr1.length];
// 遍歷arr1,統計每個元素的出現的次數
for (int i : arr1) {
nums[i]++;
}
// 遍歷arr2,把arr2中出現的記錄在arr新陣列裡
int a = 0;
for (int i : arr2) {
while (nums[i] > 0) {
arr[a++] = i;
nums[i]--;
}
}
// 遍歷nums,處理剩下arr2中未出現的元素
for (int i = 0; i < nums.length; i++) {
while (nums[i] > 0) {
arr[a++] = i;
nums[i]--;
}
}
return arr;
}
}
相關文章
- LeetCode 關於陣列的相對排序LeetCode陣列排序
- LeetCode每日一題: 按奇偶排序陣列(No.905)LeetCode每日一題排序陣列
- 1122. 陣列的相對排序(計數排序 / 自定義排序)陣列排序
- LeetCode每日一題: 按奇偶排序陣列 II(No.27)LeetCode每日一題排序陣列
- 每日一題 [26] 刪除排序陣列中的重複項每日一題排序陣列
- 【每日一題】快照陣列每日一題陣列
- LeetCode每日一題:刪除排序陣列中的重複項(No.26)LeetCode每日一題排序陣列
- 【每日一題】3250. 單調陣列對的數目 I每日一題陣列
- Leetcode每日一題:992.sort-array-by-parity-ii(按奇偶排序陣列Ⅱ)LeetCode每日一題排序陣列
- LeetCode每日一題: 有序陣列的平方(No.977)LeetCode每日一題陣列
- 每日一練(24):在排序陣列中查詢數字排序陣列
- LeetCode每日一題: 旋轉陣列(No.189)LeetCode每日一題陣列
- LeetCode每日一題:找陣列的中心索引(No.724)LeetCode每日一題陣列索引
- 陣列的排序陣列排序
- 每日一題 - 劍指 Offer 53 - I. 在排序陣列中查詢數字 I每日一題排序陣列
- LeetCode每日一題: 陣列形式的整數加法(No.989)LeetCode每日一題陣列
- [每日一題] 第十五題:連續子陣列的最大和每日一題陣列
- [每日一題] 第十九題:陣列中重複的數字每日一題陣列
- 陣列排序函式-php陣列函式(一)陣列排序函式PHP
- 每日一道演算法:刪除排序陣列中的重複項演算法排序陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- 陣列排序陣列排序
- 每日一道演算法題--leetcode 26--刪除排序陣列中重複項--python演算法LeetCode排序陣列Python
- 每日一題(一):找出兩個陣列中共有的數字每日一題陣列
- 針對一個陣列的排序,面試官會這樣問陣列排序面試
- 每日一練(46):兩個陣列的交集陣列
- LeetCode每日一題:合併兩個有序陣列(No.88)LeetCode每日一題陣列
- 第三章:查詢與排序(下)----------- 3.23 相關題解:排序陣列中找和的因子排序陣列
- 陣列排序的實現陣列排序
- 1117陣列排序的技巧陣列排序
- 物件陣列排序物件陣列排序
- js陣列排序JS陣列排序
- JavaScript 陣列排序JavaScript陣列排序
- 每日一練(45):長度最小的子陣列陣列
- 題目:刪除排序陣列中的重複項排序陣列
- 為什麼處理排序陣列比未排序陣列快排序陣列
- Arr::sort()輔助函式對多維陣列的排序函式陣列排序
- Javascript中的陣列物件排序JavaScript陣列物件排序