数组:LeetCode724-寻找数组的中心索引

题目

给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。

示例 1:
输入:
nums = [1, 7, 3, 6, 5, 6]
输出: 3
解释:
索引3 (nums[3] = 6) 的左侧数之和(1 + 7 + 3 = 11),与右侧数之和(5 + 6 = 11)相等。
同时, 3 也是第一个符合要求的中心索引。

示例 2:
输入:
nums = [1, 2, 3]
输出: -1
解释:
数组中不存在满足此条件的中心索引。

说明:
nums 的长度范围为 [0, 10000]。
任何一个 nums[i] 将会是一个范围在 [-1000, 1000]的整数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-pivot-index

解法一(C++):

这个题乍一看确实不难,要解决也很简单,就是一个简单的动态数组Vector的考察。我的思路是:

  1. 先判断数组是否为空,若为空,直接返回 -1;
  2. 再把数组划分为LeftRight以及Index三个部分,初始时,Left=Right=Index=0;然后Right等于数组第二个到最后一个元素的和。
  3. 此时如果Left=Right,直接返回Index
  4. Index=1 ,进入一个循环,用Index索引遍历数组,其中Left每次要加上nums[Index-1],Right每次要减去nums[Index],再判断LeftRight是否相等。
  5. 如果遍历完数组还未找到中心索引则返回-1;
class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        if(nums.size()==0) return -1;
        long long left=0, right=0;
        for(int i=1; i<nums.size(); i++){
            right += nums[i];
        }
        int index = 0;
        if(left == right)
            return index;
        for(index=1; index<nums.size(); index++){
            left += nums[index-1];
            right -= nums[index];
            if(left == right)
                return index;
        }
        return -1;
    }
};

P.S. 在敲这份代码的时候,踩过一些坑:比如我之前判断语句里面放的是index=0; index<nums.size()-1;发现即使index=0,nums.size()=0的时候还是会进入到循环里面,0不应该<0-1? 后来查阅资料,nums.size()是unsigned类型,所以即使为0,-1之后也为正。

解法二(C++):

比解法一改进的一点就是,去掉了Right部分,把问题转换为:2*Left == Sum - nums[index] ?,代码如下:

class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        int sum=0, left=0;
        for(int i=0; i<nums.size(); i++)
            sum += nums[i];
        for(int index=0; index<nums.size(); index++){
            if(left*2 == sum-nums[index])   return index;
            left += nums[index];
        }
        return -1;
    }
};

解法二(Python):

class Solution(object):
    def pivotIndex(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        Sum = sum(nums)
        Left = 0
        for index in range(len(nums)):
            if Left*2 == Sum - nums[index]:
                return index
            Left += nums[index]
        return -1
发布了31 篇原创文章 · 获赞 22 · 访问量 6074
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览