查找数组中是否有一个元素的值是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;
}输出-
找不到元素!