leetcode刷题记录--数组 “寻找数组的中心索引”

题目连接: 力扣

自己编写的答案及测试函数:

想法:先求出初识索引下左值和右值,然后遍历求中心索引。

#include<stdio.h>


int pivotIndex(int* nums, int numsSize) 
{
	int left_val = 0;
	int right_val = 0;
	int index = 0;
	int match_flag = 0;
	int media_index = 0;

	for (index = 1; index < numsSize; index++)
	{
		right_val += nums[index];
	}

	for (index = 0; index < numsSize; index++)
	{
		if (left_val == right_val)
		{
			match_flag = 1;
			break;
		}

		if ((index + 1) == numsSize)
		{
			break;
		}

		left_val += nums[index];
		right_val -= nums[index + 1];
	}

	media_index = match_flag == 1 ? index : -1;

	return media_index;

}

int main()
{
	//int arr[6] = { 1, 7, 3, 6, 5, 6 };
	//int arr[3] = {1, 2, 3};
	int arr[3] = { 2, 1, -1 };
	int media_index = 0;
	int arr_len = sizeof(arr) / sizeof(int);

	media_index = pivotIndex(arr, arr_len);

	printf("media_index = %d\n", media_index);
	
	return 0;
}

时间复杂度有点高啊,没有提前返回。好在代码可读性还在。。。

评论区里大部分同学的想法都是这样,只是处理方式略有不同。

只有一个同学使用了点技巧,使用判断条件: 左值*3+索引值 == 数组元素和

不得不说短小精悍,但是可能正常人一下子理解不了,可能要思索1分钟。。。

int pivotIndex(int *nums, int numsSize)
{
    int i, totalNums = 0, leftNums = 0;
    for (i = 0; i < numsSize; i++)
        totalNums += nums[i] ;
    for (i = 0; i < numsSize; i++)
    {
        if (leftNums * 2 + nums[i] == totalNums)
            return i;
        leftNums += nums[i];
    }
    return -1;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值