[抄题]:
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.
[暴力解法]:
时间分析:
空间分析:
[优化后]:
时间分析:
空间分析:
[奇葩输出条件]:
[奇葩corner case]:
[思维问题]:
先存原数组,不好读取
[一句话思路]:
先存新数组,别开生面
[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):
[画图]:
[一刷]:
[二刷]:
[三刷]:
[四刷]:
[五刷]:
[五分钟肉眼debug的结果]:
[总结]:
先存新数组,别开生面
[复杂度]:Time complexity: O(n) Space complexity: O(n)
[英文数据结构或算法,为什么不用别的数据结构或算法]:
[关键模板化代码]:
[其他解法]:
[Follow Up]:
[LC给出的题目变变变]:
[代码风格] :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Solution { public int[] anagramMappings(int[] A, int[] B) { //ini map int l = A.length; int[] res = new int[l]; HashMap<Integer, Integer> map = new HashMap<>(); //cc if (A.length == 0 && B.length == 0) { return res; } //for, put b, find a for (int i = 0; i < l; i++) { map.put(B[i], i); } for (int i = 0; i < l; i++) { res[i] = map.get(A[i]); } //return return res; } }