日野弥生:勉強しよう

LeetCode 1991 - 找到数组的中间位置

发表于2024年12月05日

#数组 #前缀和

时隔多年,重开了新的开发人生。以做leetcode题目起步。没看到前缀和的字眼,直接按照自己的理解写了一份解答,需要一次遍历,数组头和尾需要做边界检查。

class Solution {
public:
    int pivotIndex(vector<int>& nums) {
        int sum_behind = 0, sum_after = 0;

        if(nums.empty())
            return -1;
        
        if(nums.size() == 1)
            return 0;

        for(auto iter: nums)
        {
            sum_after+= iter;
        }

        sum_after = sum_after - nums[0];
        for(int i =0;i<nums.size();i++)
        {
            if(sum_after == sum_behind)
                return i;
            
            int size = nums.size();
            if(i < size -1)
            {
                sum_behind +=nums[i];
                sum_after -= nums[i+1];
            }

        }

        return -1;
    }
};

看了评论后,发现可以通过简单的数学算法实现来规避一些边界检查。

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

看了官方题解答案,发现两个for循环其实可以并成一个,且运用了前缀和这种算法思想。

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/find-the-middle-index-in-array/

下一篇

LeetCode 35 - 搜索插入位置