724. Find Pivot Index(python+cpp)
阿新 • • 發佈:2018-11-03
題目:
Given an array of integers
nums
, write a method that returns the"pivot" index of this array.
We define the pivot index as the index where the sum of the numbers to the left of the index is equal to the sum of the numbers to the right of the index.
If no such index exists, we should return-1
. If there are multiple pivot indexes, you should return the left-most pivot index.
Example 1:Input: nums = [1, 7, 3, 6, 5, 6] Output: 3 Explanation: The sum of the numbers to the left of index 3 (nums[3] = 6) is equalto the sum of numbers to the right of index 3. Also, 3 is the first index where this occurs.
Example 2:
Input: nums = [1, 2, 3] Output: -1 Explanation: There is no index that satisfies the conditions in the problem statement.
Note:
The length of nums will be in the range[0, 10000]
.
Each elementnums[i]
will be an integer in the range[-1000, 1000]
.
解釋:
找到陣列nums
中的pivot
的位置,使得其左邊的元素的總和等於其右邊的元素的總和,如果不存在則返回-1
暴力求解麼? 不!
如果已經知道一個數組的總和,知道了一個數字左邊的和,那麼不需要再求右邊的和了,可以直接計算
left+=nums[i-1]
,如果重複求和的話容易超時。right=full_sum-left-nums[i]
,不需要再對右邊求和了,不然會超時。python程式碼:
class Solution(object):
def pivotIndex(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
full_sum=sum(nums)
left=0
right=0
len_nums=len(nums)
for i in xrange(len_nums):
if i>0:
left+=nums[i-1]
right=full_sum-left-nums[i]
if left==right:
return i
return -1
c++程式碼:
class Solution {
public:
int pivotIndex(vector<int>& nums) {
int left_sum=0;
int right_sum=0;
int n=nums.size();
int full_sum=accumulate(nums.begin(),nums.end(),0);
for (int i=0;i<n;i++)
{
if (i>0)
left_sum+=nums[i-1];
right_sum=full_sum-left_sum-nums[i];
if (left_sum==right_sum)
return i;
}
return -1;
}
};
總結:
儘量不要每次都暴力計算,要充分利用歷史求和結果。