2014-10-26 56 views
-2

因此,在C++中,我有两个数组 - arr1和arr2,我需要查找数组arr1中的最大数字,但不在数组arr2中。 例如,如果arr1 = {3,5,6,7}和arr2 = {2,4,7},那么arr1中不在arr2中的最大数字是6. 任何人都可以帮忙吗?C++中的两个数组中的元素

lar = arr1[0]; 


for (int i=0;i<m;i++) 
{ 
    for (int j=0;j<n;j++) 
    { 
     if (arr2[j] != arr1[i] && lar>arr1[i]) 
     { 
      lar = arr1[i]; 
     } 
    } 
} 

if (lar) 
    cout << "Largest number " << lar << endl; 
else 
    cout << "There is not such a number" << endl; 
+0

您是否尝试过要与我们分享的内容? – SMA 2014-10-26 14:43:53

+0

我知道这不是很好 – tret 2014-10-26 14:51:02

+0

发布到问题而不是评论! – 2014-10-26 14:53:16

回答

0

如果从排序两个数组开始,可以同时扫描这两个数组,直到找到要查找的元素。

尝试编码,然后发布到您的问题。目前,您可能会因为没有向您显示您自己尝试解决问题而关闭您的问题。

+0

@Chantola如果还没有关于如何在C++中对数组进行排序的Stack Overflow问题,我将在Notre Dame中裸体运行。 – 2014-10-26 14:55:52

0

算法 这里是我认为大小arr1[] and arr2[]分别是n和m; 第1步:对两个阵列进行排序。 第2步:现在设置max = arr1[n-1] 第3步:现在遍历arr2[],检查max是否存在或不存在。

//After sorting 
int max; 
bool flag = flase; 
for(int i = n-1; i >= 0; i--) 
{ 
    max = arr1[i]; 
    for(int j = m-1; j >= 0; j--) 
    { 
     if(max > arr2[j]) 
     { 
      flag = true; 
      break; 
     } 
     else if(max == arr2[j]) 
      break; 
    } 
    if(flag) 
     break; 
} 
//max has the maximum element here. 
+0

这比效率低。你不需要每次都循环遍历第二个数组:你可以跟踪你需要的地方。从本质上讲,你只需要通过两个数组,并且在每个阶段,您都会根据当前正在查看的两个元素向后移动一个数组中的一个步骤。 – 2014-10-26 15:04:15

+0

@ chiastic-security:我完全同意你的看法。我们可以在第二个数组上应用二分搜索。而且每次查找的时间至多为O(log(m))。 – Shravan40 2014-10-26 15:06:45

0

std::sort其次是std::set_difference会很直接地给出这个答案。