查找数组中是否有一个元素的值是C ++中数组和的一半

在这个问题中,我们得到了一个排序的唯一值数组arr。我们的任务是查找array是否具有其值为数组sum的一半的元素。 

问题描述: 对于数组arr [],我们需要在数组中找到元素x,以使数组所有元素的总和等于2 * X。

让我们举个例子来了解这个问题,

输入:  arr [] = {2,4,5,6,7}

输出: 

解释: 

总和= 2 + 4 + 5 + 6 + 7 = 24

找不到元素。

解决方法: 

为了解决这个问题,我们只需要找到元素,它是数组所有元素之和的一半。

算法:

步骤1: 找出阵列中所有元素的总和。

步骤2:如果总和为奇数,则返回-1。

步骤3: 如果求和值是偶数,则找到元素x,使x * 2 =和。

步骤4: 如果找到元素,则返回1。
步骤5: 如果找不到元素,则返回-1。

为了搜索元素,我们可以使用二进制搜索算法 对元素进行排序。

该程序说明了我们解决方案的工作原理,

示例

#include <iostream>
using namespace std;

int checkForElement(int array[], int n) {

   int arrSum = 0;
   for (int i = 0; i < n; i++)
      arrSum += array[i];

   if (arrSum % 2)
   return -1;

   int start = 0;
   int end = n - 1;
   while (start <= end)
   {
      int mid = start + (end - start) / 2;
      if ( ( 2 * array[mid] ) == arrSum)
         return array[mid];      
      else if (( 2 * array[mid] ) > arrSum)
         end = mid - 1;      
      else
         start = mid + 1;
   }

   return -1;
}

int main() {

   int array[] = { 4, 5, 6, 7, 9 };
   int n = sizeof(array) / sizeof(array[0]);
   int x = checkForElement(array, n);
   if(x != -1)
    cout<<"Element found, value is "<<x;
   else
    cout<<"找不到元素!";
   return 0;
}

输出-

找不到元素!