Given two lists A
and B
, and B
is an anagram of A
. B
is an anagram of A
means B
is made by randomizing the order of the elements in A
.
We want to find an index mapping P
, from A
to B
. A mapping P[i] = j
means the i
th element in A
appears in B
at index j
.
These lists A
and B
may contain duplicates. If there are multiple answers, output any of them.
For example, given
A = [12, 28, 46, 32, 50] B = [50, 12, 32, 46, 28]
We should return
[1, 4, 3, 2, 0]
as P[0] = 1
because the 0
th element of A
appears at B[1]
, and P[1] = 4
because the 1
st element of A
appears at B[4]
, and so on.
Note:
A, B
have equal lengths in range[1, 100]
.A[i], B[i]
are integers in range[0, 10^5]
.
--------------------------------------------------------------------------------------------------------------------------------------
Approach #1 Brute Force, 我的解法
class Solution {
public int[] anagramMappings(int[] A, int[] B) {
int len = A.length;
int[] ans = new int[len];
for(int i=0; i<len; i++){
for(int j=0;j<len;j++){
if(A[i]==B[j]){
ans[i]=j;
}
}
}
return ans;
}
}
分析:
虽然通过了,但是没有处理可能存在的A, B有重复元素的情况。不过题目说如有多解,允许返回任意解,可以通过。
时间复杂度: O(A.length ^2)
空间复杂度:O(A.length)
知识点:
java语言使用new 来创建数组。
dataType[] arrayRefVar = new dataType[arraySize];
或者
dataType[] arrayRefVar = {value0, value1, ..., valuek};
Approach #2 Hash Map
class Solution {
public int[] anagramMappings(int[] A, int[] B) {
Map<Integer, Integer> D = new HashMap();
for (int i = 0; i < B.length; ++i)
D.put(B[i], i);
int[] ans = new int[A.length];
int t = 0;
for (int x: A)
ans[t++] = D.get(x);
return ans;
}
}
分析:
时间复杂度:O(A.length)
空间复杂度: O(A.length)
知识点:
1. HashMap
Type Parameters:
K
- the type of keys maintained by this map
V
- the type of mapped values
Map<K,V> nameOfMap = new HashMap();
2. Method
nameOfMap.get(): Returns the value to which the specified key is mapped, or null
if this map contains no mapping for the key.
nameOfMap.put(K Key, V Value) : Associates the specified value with the specified key in this map. If the map previously contained a mapping for the key, the old value is replaced.