扫码关注官方订阅号
一定要是一组数组完全包含另一组数组里的全部值,长度可以不同.一个值不同则不符合要求.
业精于勤,荒于嬉;行成于思,毁于随。
SetA和SetB, 假设SetA的长度小于等于SetB, 那么SetA - SetB就应该是空集, 才能满足你的要求. 否则就算不是
SetA
SetB
SetA - SetB
C++标准库有一个库函数std::set_difference可以用来算集合的差集.
std::set_difference
PS: 两个集合必须是排过序的
在Java 里有个方法叫 list.containsAll()
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); } }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
SetA和SetB, 假设SetA的长度小于等于SetB, 那么SetA - SetB就应该是空集, 才能满足你的要求. 否则就算不是C++标准库有一个库函数
std::set_difference可以用来算集合的差集.PS: 两个集合必须是排过序的
在Java 里有个方法叫
list.containsAll()javascript的实现
思路一
先找到最长的数组,然后循环短的数组并判断元素是否在长数组中
思路二
判断两个数组的交集长度是否等于最小的数组长度,用到了第三方的jar包