LeetCode 關於陣列的相對排序

ckxllf發表於2020-03-04

  給你兩個陣列,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 中

  1、C++

  先遍歷arr1中的元素個數,然後遍歷arr2按照arr1中對應元素的個數新增進結果陣列中,最後將剩餘的arr1中的元素按照原順序的元素個數迴圈新增。

  class Solution {

  public:

  vector relativeSortArray(vector& arr1, vector& arr2) {

  map m;

  int s1 = arr1.size(), s2 = arr2.size();

  vector res;

  for(int i=0;i

  auto iter = m.find(arr1[i]);

  if(iter!=m.end()){

  int temp = m[arr1[i]]+1;

  m.erase(arr1[i]);

  m.insert(pair(arr1[i], temp));

  }else{

  m.insert(pair(arr1[i], 1));

  }

  }

  for(int i=0;i

  auto iter = m.find(arr2[i]);

  if(iter!=m.end()){

  for(int j=0;jsecond;j++){

  res.push_back(iter->first);

  }

  m.erase(iter);

  }

  }

  for(auto i=m.begin();i!=m.end();i++){

  for(int k=0;ksecond;k++){

  res.push_back(i->first);

  }

  }

  return res;

  }

  };

  2、桶排序 鄭州婦科醫院哪家好

  先統計arr1中元素的數量,注意索引是arr1中的值,然後把arr2中的數按順序拿完,在把桶中剩下的按順序拿完。

  public int[] relativeSortArray(int[] arr1, int[] arr2) {

  int[] nums = new int[1001];

  int[] res = new int[arr1.length];

  //遍歷arr1,統計每個元素的數量

  for (int i : arr1) {

  nums[i]++;

  }

  //遍歷arr2,處理arr2中出現的元素

  int index = 0;

  for (int i : arr2) {

  while (nums[i]>0){

  res[index++] = i;

  nums[i]--;

  }

  }

  //遍歷nums,處理剩下arr2中未出現的元素

  for (int i = 0; i < nums.length; i++) {

  while (nums[i]>0){

  res[index++] = i;

  nums[i]--;

  }

  }

  return res;

  }

  3、python

  直接將arr2加上arr1減去arr2中的元素,並按照從小到大排序。然後按照arr2中的下標的順序對arr1進行排序,其餘的按照原來的順序。

  class Solution:

  def relativeSortArray(self, arr1: List[int], arr2: List[int]) -> List[int]:

  arr2 += sorted(set(arr1)-set(arr2))

  arr1.sort(key=arr2.index)

  return arr1



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2678475/,如需轉載,請註明出處,否則將追究法律責任。

相關文章