寻找数组中的一个位置,其左右两边元素之和相等,如果存在返回其索引位置,数组第一个元素左边的和为0,最后一个元素右边的和为0,如果不存在返回-1
遍历整个数组
1.设置一个middle从数组第一个元素开始,直至数组末尾。
2.分别计算middle左边的元素之和,右边的元素之和。
3.如果两边的和相等返回middle,否则返回-1。
#include<stdio.h>
int pivotIndex(int* nums, int numsSize);
int main(){
int num[6] = {1,7,3,6,5,6};
int pos = pivotIndex(num,6);
printf("%d",pos);
return 0;
}
int pivotIndex(int* nums, int numsSize){
// 数组元素为空返回-1
if(numsSize==0){
return -1;
}
// 索引位置
int middle = 0;
while(middle<numsSize){
// 重新计数
int leftSum = 0;
int rightSum = 0;
// 中间元素左侧值相加
for(int i=0;i<middle;i++){
leftSum = leftSum+nums[i];
}
for(int j=middle+1;j<numsSize;j++){
rightSum = rightSum+nums[j];
}
// 两边元素之和相等
if(leftSum==rightSum){
return middle;
}
// middle后移
middle++;
}
return -1;
}
不计算右边的值,我们先计算出所有元素之和,判断总的元素之和减去左边元素之和再减去中间元素,是否等于左边元素之和
#include<stdio.h>
int pivotIndex(int* nums, int numsSize);
int main(){
int num[6] = {1,7,3,6,5,6};
int pos = pivotIndex(num,6);
printf("%d",pos);
return 0;
}
int pivotIndex(int* nums, int numsSize){
int sum= 0;
// 计算所有元素之和
for(int i=0;i<numsSize;i++){
sum = sum+nums[i];
}
// 数组元素为空返回-1
if(numsSize==0){
return -1;
}
// 索引位置
int middle = 0;
while(middle<numsSize){
// 重新计数
int leftSum = 0;
// 中间元素左侧值相加
for(int i=0;i<middle;i++){
leftSum = leftSum+nums[i];
}
// 总元素之和减去左边元素之和再减去中间元素,是否相等
if((sum-leftSum-nums[middle])==leftSum){
return middle;
}
// middle后移
middle++;
}
return -1;
}