簡體   English   中英

數組子集問題[時間為O(n)的最小空間]

[英]Array Subset problem [least space with O(n) time complexity]

我想在Java中編寫一個函數,將2個數組作為輸入,如果較小的數組是較大數組的子集,則返回true

有沒有一種方法可以使下面的代碼簡潔並節省空間(同時保持O(n)時間復雜性?

public boolean isArraySubset(int[] arr1, int arr2[]) {
    Set<Integer> set = new HashSet<>();

    int largeArr[];
    int smallArr[];
    if (arr1.length > arr2.length) {
        largeArr = arr1;
        smallArr = arr2;
    } else {
        largeArr = arr2;
        smallArr = arr1;
    }
    for (int i : largeArr) {
        set.add(i);
    }
    for (int i : smallArr) {
        if (!set.contains(i)) {
            return false;
        }
    }

    return true;
}

為什么不使用Set<T>呢? 只需使用removeAll方法並檢查較小Set的大小即可。 這種事情已經為您完成。

smallerSet.removeAll(largerSet);

if (smallerSet.isEmpty()) {
   // It's a subset
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM