Leetcode 760. Find Anagram Mappings, java解法

博客围绕给定两个列表,其中一个是另一个的变位词,要找出索引映射的问题展开。介绍了两种解法,一是暴力法,虽未处理重复元素情况但因题目允许多解可通过,时间复杂度为O(A.length ^2);二是哈希表法,时间复杂度为O(A.length),还提及相关Java知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given two lists Aand B, and B is an anagram of AB 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.

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 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:

  1. A, B have equal lengths in range [1, 100].
  2. 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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值