724. Find Pivot Index(python+cpp)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21275321/article/details/83537708

题目:

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 element nums[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;
    }
};

总结:
尽量不要每次都暴力计算,要充分利用历史求和结果。

猜你喜欢

转载自blog.csdn.net/qq_21275321/article/details/83537708