java - 两组数组,长度不一样,如果其中一个数组的值在另一个中不存在,则不符合要求.怎么算?
迷茫
迷茫 2017-04-17 16:18:33
[Java讨论组]

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(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);
    }
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号