Description:
Given two lists Aand 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 ith 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.
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 0th element of A appears at B[1], and P[1] = 4 because the 1st 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].
Link:
If you want to solve the problem, you can visite the web site.click me
Code:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* anagramMappings(int* A, int ASize, int* B, int BSize, int* returnSize) {
int *p;
p = (int *)malloc(sizeof(int)*ASize);
int flag[ASize];
memset(flag, 0, sizeof(flag));
*returnSize = ASize;
for(int i=0; i<ASize; i++){
for(int j=0; j<BSize; j++){
if(A[i]==B[j]&&flag[j]==0){
p[i]=j;
// printf("p[%d]=%d\n",i,j);
flag[j]=1;
break; //一定别忘了break!
}
}
}
return p;
}
感想
刷题一定要看清题目让你返回什么!博主一开始就写对了,但是就是在提交的时候一直结果都是空,不知道哪个地方有问题。后来仔细的研究了以下代码前面的几句说明性的话。
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
第一句跟你说,让你将返回的数组大小放在returnSize中。第二句让你动态的分配数组,不要直接用定义数组的方法。注意到这两点,就很简单了。