判断一个数组是否是另一个数组的子集
生活随笔
收集整理的這篇文章主要介紹了
判断一个数组是否是另一个数组的子集
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給兩個數組:arr1[0..m-1] 和arr2[0..n-1]. 判斷arr2是否是arr1的一個子集合,兩個數組都是未排序的。
例子:
Input: arr1[] = {11, 1, 13, 21, 3, 7}, arr2[] = {11, 3, 7, 1}
Output: arr2[] is a subset of arr1[]
Input: arr1[] = {1, 2, 3, 4, 5, 6}, arr2[] = {1, 2, 4}
Output: arr2[] is a subset of arr1[]
Input: arr1[] = {10, 5, 2, 23, 19}, arr2[] = {19, 5, 3}
Output: arr2[] is not a subset of arr1[]
1、簡單方法就是雙重遍歷
判斷arr2矩陣中的所有元素是不是在arr1
#include<stdio.h> bool isSubset(int arr1[], int arr2[], int m, int n) {int i = 0;int j = 0;for (i=0; i<n; i++){for (j = 0; j<m; j++){if(arr2[i] == arr1[j])break;}if (j == m)return 0;}return 1; }int main() {int arr1[] = {11, 1, 13, 21, 3, 7};int arr2[] = {11, 3, 7, 1};int m = sizeof(arr1)/sizeof(arr1[0]);int n = sizeof(arr2)/sizeof(arr2[0]);if(isSubset(arr1, arr2, m, n))printf("arr2[] is subset of arr1[] ");elseprintf("arr2[] is not a subset of arr1[]"); return 0; }但是對于重復的元素方法好像不行, 例如{1, 4, 4, 2} 并不是 {1, 4, 2}的子集 bool isSubset(int arr1[], int arr2[], int m, int n) {int i = 0, j = 0;if(m < n)return 0;quickSort(arr1, 0, m-1);quickSort(arr2, 0, n-1);while( i < n && j < m ){if( arr1[j] <arr2[i] )j++;else if( arr1[j] == arr2[i] ){j++;i++;}else if( arr1[j] > arr2[i] )return 0;}if( i < n )return 0;elsereturn 1; }
總結
以上是生活随笔為你收集整理的判断一个数组是否是另一个数组的子集的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 删除链表中重复的结点
- 下一篇: 求字符串中最长无重复字符的子串