两组数组,长度不一样,如果其中一个数组的值在另一个中不存在,则不符合要求.怎么算?

一定要是一组数组完全包含另一组数组里的全部值,长度可以不同.一个值不同则不符合要求.

阅读 6.3k
4 个回答

SetASetB, 假设SetA的长度小于等于SetB, 那么SetA - SetB就应该是空集, 才能满足你的要求. 否则就算不是

C++标准库有一个库函数std::set_difference可以用来算集合的差集.

PS: 两个集合必须是排过序的

在Java 里有个方法叫 list.containsAll()

    public static void main(String args[]){
        String[] a = {"01", "02", "03", "04","05"};
        String[] b = {"01", "05", "03"};
        System.out.println("isContains = " + isContains(a, b));
    }

    private static boolean isContains(String[] a,String[] b) {
        List<String> listA = Arrays.asList(a);
        List<String> listB = Arrays.asList(b);
        return listA.containsAll(listB);
    }

javascript的实现

var p1=[77,9999,1];
var p2=[1,2,0,9999,4,65,77];

function isSubArray(p1,p2){
    var i= 0,j= 0,resultArray=[];
    p1.sort();
    p2.sort();
    if(p1[0]>p2[p2.length-1]||p1[p1.length-1]<p2[0]||p1.length>p2.length){
        return false;
    }
    while(i<p1.length){
     while(j<p2.length){
         if(p1[i]>p2[j]){
             j++;
         }else if(p1[i]<p2[j]){
            i++;
            break;
         }else{
             resultArray.push(p1[i]);
             i++;
             j++;
         }
     }

     if(j==p2.length){
         break;
     }
    }
    return resultArray.length===p1.length;
}
!isSubArray(p1,p2)?console.log('p1 isn\'t subset of p2'):console.log('p1 is subset of p2');

思路一

先找到最长的数组,然后循环短的数组并判断元素是否在长数组中

public class Main {

    public static void main(String[] args) throws CloneNotSupportedException {
        String[] strArr1={"ee","aa","bb","cc"};
        String[] strArr2={"aa","bb","cc","dd","44"};
        System.out.println(Main.subContain(strArr1,strArr2));
    }

    public static boolean subContain(String[] strArr1, String[] strArr2) {
        if (null == strArr1 || null == strArr2) {
            return false;
        }

        boolean flag = true;

        if (strArr2.length > strArr1.length) {
            String[] temp;
            temp = strArr1;
            strArr1 = strArr2;
            strArr2 = temp;
        }

        for (String str : strArr2) {
            if (!Arrays.asList(strArr1).contains(str)) {
                flag = false;
                break;
            }
        }

        return flag;
    }
}

思路二

判断两个数组的交集长度是否等于最小的数组长度,用到了第三方的jar包

public class Main {

    public static void main(String[] args) throws CloneNotSupportedException {
        String[] strArr1 = {"aa", "bb", "cc"};
        String[] strArr2 = {"aa", "bb", "cc", "dd", "44"};
        System.out.println(Main.subContain(strArr1, strArr2));
    }

    public static boolean subContain(String[] strArr1, String[] strArr2) {
        if (null == strArr1 || null == strArr2) {
            return false;
        }

        Collection collection = org.apache.commons.collections.CollectionUtils.intersection(Arrays.asList(strArr1), Arrays.asList(strArr2));
        return collection.size() == Math.min(strArr1.length, strArr2.length);
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题