寻找数组中的一个位置,其左右两边元素之和相等,如果存在返回其索引位置,数组第一个元素左边的和为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;
}
该博客探讨了一个算法问题,即在整数数组中找到一个位置,使得该位置左边元素之和等于右边元素之和。文章通过两种不同的方法实现了这个功能:一种是分别计算左右两边的和进行比较,另一种是先计算整个数组的和,然后逐次检查中间位置的平衡条件。这两种方法都在循环中逐步移动中间指针,直到找到符合条件的索引或者遍历完整个数组返回-1。
3066

被折叠的 条评论
为什么被折叠?



