(Easy) Mock Interview LeetCode;

半世苍凉 提交于 2019-11-28 08:08:01

 

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 in arr1.

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;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!