在这个问题中,我们得到了一个排序的唯一值数组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; }
找不到元素!