leetcode523.连续子数组和

题目大意

给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。

示例 1

输入:[23,2,4,6,7], k = 6
输出:True
解释:[2,4] 是一个大小为 2 的子数组,并且和为 6

示例 2

输入:[23,2,6,4,7], k = 6
输出:True
解释:[23,2,6,4,7]是大小为 5 的子数组,并且和为 42

解题思路

构造一个辅助数组记录前i项的累加和。遍历辅助数组就能够得到原数组中任意一段中的累加和,判断是否能被k整除即可。
注意:这个题里面的边界条件太多了,,,下面这个代码通不过,,,懒得去扣边界条件了

class Solution {
public:
    bool checkSubarraySum(vector<int>& nums, int k) {
    	if (nums.size() < 2)
    		return false;

    	int length = nums.size();
    	vector<int> subTotalNums(length + 1, 0);

    	for (int i = 0; i < length; ++i)
    		subTotalNums[i + 1] = subTotalNums[i] + nums[i];

    	for (int i = 1; i <= length; ++i){
    		for (int j = 0; j < i - 1; ++j){
    			if ((subTotalNums[i] - subTotalNums[j]) % k == 0)
    				return true;
    		}
    	}
    	return false;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_41092190/article/details/106849469
今日推荐