我必须通过检查smallList的值在bigList中以相同的顺序出现来查看smallList是否是bigList的子列表。元素也必须按顺序匹配
int bigList[] = {1,2,3,4,5,6,7,8,9};
int smallList[] = {3,4,5,6};
Binary Algortithm:
bool binarySearch(int x[],int list[],int first, int last)
{
bool yes=true;
bool no=false;
int mid=(first+last)/2;
if(x[last]>list[mid])
{
binarySearch(x,list,mid,last);
}
else if (x[last]<list[mid])
{
binarySearch(x,list,first,mid);
}
else if (x[last]==list[mid])
{
return true;
}
else
{
return false;
}
}
我需要知道如何使用/修改上述算法来检查smallList是否是bigList的子列表。我必须使用算法来解决这个问题。 问题链接:https://docs.google.com/document/d/12pWWQo66-P-CMWoFH0HPWy09ws4LccGay2pKsv0XWlo/edit?usp=sharing
答案 0 :(得分:3)
标准库包含std::includes
和std::search
算法用于此目的:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <ios>
int main()
{
int bigList[] = {1,2,3,4,5,6,7,8,9};
int smallList[] = {3,4,5,6};
std::cout << std::boolalpha;
std::cout << std::includes(
std::begin(bigList), std::end(bigList),
std::begin(smallList), std::end(smallList)
);
std::cout << (std::search(
std::begin(bigList), std::end(bigList),
std::begin(smallList), std::end(smallList)
) != std::end(bigList));
}
打印truetrue
的
std::includes
检查来自smallList
的所有元素是否都包含在bigList
中,std::search
检查smallList
是否是bigList
的正确子序列(如果不是,则返回结束迭代器)。