(Easy) Mock Interview LeetCode;
Description:
Given two arrays arr1
and arr2
, the elements of arr2
are distinct, and all elements in arr2
are also in arr1
.
Sort the elements of arr1
such that the relative ordering of items in arr1
are the same as in arr2
. Elements that don't appear in arr2
should be placed at the end of arr1
in ascending order.
Example 1:
Input: arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6] Output: [2,2,2,1,4,3,3,9,6,7,19]
Constraints:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
- Each
arr2[i]
is distinct. - Each
arr2[i]
is inarr1
.
Solution:
class Solution { public int[] relativeSortArray(int[] arr1, int[] arr2) { String str = ""; int tp =0; int[] result = new int[arr1.length]; for(int i = 0; i<arr2.length; i++){ str = str+Repeat(arr2[i] ,Count(arr1,arr2[i])); tp = tp+ Count(arr1,arr2[i]); } int[] tmp = new int[ arr1.length - tp]; int k = 0; for(int i = 0; i<arr1.length; i++){ if(!find(arr2,arr1[i])){ tmp[k]= arr1[i]; k++; } } Arrays.sort(tmp); String[] arrOfStr = str.split("-"); for(int i = 0; i<arrOfStr.length; i++){ result[i]= Integer.parseInt(arrOfStr[i]); } int tmd =0; for(int i = arrOfStr.length; i<arr1.length; i++ ){ result[i] = tmp[tmd++]; } return result; } public int Count(int[] s, int a){ int num = 0; for(int i = 0; i< s.length; i++){ if ( s[i] ==a){ num++; } } return num; } public String Repeat(int a, int n){ String res=""; for(int i = 0; i<n;i++){ res = res+a; res = res+"-"; } return res; } public boolean find(int[] a, int b){ for(int i =0; i<a.length; i++) if(a[i] == b){ return true; } return false; } }