思路一:
暴力求解:
1.定义一个ps作为中间下标去记录下标值。
2.循环下标ps从头到位,定义四个变量分别是left sum_left,right,sum_right…
3.初始化left=ps-1和right=ps+1.当ps0—>就让sum_left=0,和psn-1->>>sum_right=0;
4.循环结尾判断sum_left==sum_right;相当跳出循环,返回下标。
时间复杂度:O(2(N^2))时间复杂度比较高。(在牛客上说超出时间限制说明我们的这个暴力求解的时间复杂度比较高)。
int pivotIndex(int* nums, int numsSize) {
int n = numsSize;
int ps = 0;
int sum_left = 0;
int sum_right = 0;
while (ps <= n - 1)
{
sum_left = 0;
sum_right = 0;
int left = ps - 1;
int right = ps + 1;
if (right == n)
{
sum_right = 0;
}
else
{
while (right <= n - 1)
{
sum_right += nums[right];
right++;
}
}
if (left == -1)
{
sum_left = 0;
}
else
{
while (left >= 0)
{
sum_left += nums[left];
left--;
}
}
if (sum_left == sum_right)
{
break;
}
ps++;
}
if(sum_left == sum_right)
return ps;
return -1;
}
思路二:
1.定义一个ps作为中间下标去记录下标值。
2.循环下标ps从头到位,定义3个变量分别是 sum_left,right,sum_right…
3.初始化right=ps+1.当ps0—>就让sum_left=0,和psn-1->>>sum_right=0;
4,这个sum_left+=nums[ps-1]当前的数值中心下标的值是不参与计算的。
4.循环结尾判断sum_left==sum_right;相当跳出循环,返回下标。
时间复杂度:O(N^2)
int pivotIndex(int* nums, int numsSize){
int n=numsSize;
int ps=0;
int sum_left=0;
int sum_right=0;
int right=0;
while(ps<=n-1)
{
if(ps==0)
{
sum_left=0;
}
else
{
sum_left+=nums[ps-1];
}
right=ps+1;
sum_right=0;
if(ps==n-1)
{
sum_right=0;
}
else
{
while(right<=n-1)
{
sum_right+=nums[right];
right++;
}
}
if(sum_left==sum_right)
{
break;
}
ps++;
}
if(sum_left==sum_right)
return ps;
return -1;
}