寻找数组的中心索引

寻找数组中的一个位置,其左右两边元素之和相等,如果存在返回其索引位置,数组第一个元素左边的和为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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值