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

本文分享了一道力扣题目,涉及找到数组中使得左侧元素之和等于右侧元素之和的中心索引。作者提供了两种不同的解决方案,一种是通过双指针逐步计算左右两侧的和,另一种则是利用数学性质简化条件。讨论了时间复杂度,并对代码可读性进行了评价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目连接: 力扣

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

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

#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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值