问题描述:
1、画一条线,分开左右两边,左右两边元素之和相等。
2、索引,从零开始数,数到线的地方将它所在地方的数字输出。
3、要是没有找到线,就返回-1。
leetcode 官方给出的解答:
C++实现
贴上官方的码:
class Solution {
public:
int pivotIndex(vector<int> &nums) {
int total = accumulate(nums.begin(), nums.end(), 0);
int sum = 0;
for (int i = 0; i < nums.size(); ++i) {
if (2 * sum + nums[i] == total) { //???
return i;
}
sum += nums[i];
}
return -1;
}
};
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/find-pivot-index/solution/xun-zhao-shu-zu-de-zhong-xin-suo-yin-by-gzjle/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
PS:accumlate()函数
1、带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
2、将它的一个内部变量设置为指定的初始值,然后在此初值上累加输入范围内所有元素的值。accumulate算法返回累加的结果,其返回类型就是其第三个实参的类型。
3、对要累加的元素类型一无所知,这个事实有两层含义。首先,调用该函数时必需传递一个初始值,否则,accumulate将不知道使用什么初始值。
C实现如下:
int pivotIndex(int* nums, int numsSize) {
int total = 0;
for (int i = 0; i < numsSize; ++i) {
total += nums[i];
}
int sum = 0;
for (int i = 0; i < numsSize; ++i) {
if (2 * sum + nums[i] == total) {
return i;
}
sum += nums[i];
}
return -1;
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/find-pivot-index/solution/xun-zhao-shu-zu-de-zhong-xin-suo-yin-by-gzjle/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
**小结:**第一天第一题就给跪了,一个字“绝”。
1、线的左边+线+线的右边=total
路漫漫其修远兮…
question:
乍一眼纠结这,还是不好好读思路,妙了~