LeetCode 179. 最大数 C语言实现

给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。

示例 1 :

输入:nums = [1,1,1], k = 2
输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。
说明 :

数组的长度为 [1, 20,000]。
数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。

基本思想:因为是连续的数组,那么我们就求累加和来求解,即将第N个值和前N-1个值xian相加,得到一个长度与传入chan长度相同的数组Sum,那么Sum[i]-Sum[j]表示连续数组i到j之间的累加和,则得到如下的实现:

int subarraySum(int* nums, int numsSize, int k) {

    int res = 0, n = numsSize;
    int* sums = (int *)malloc(sizeof(int)*numsSize);
    sums[0] = nums[0];
    for (int i = 1; i < n; ++i) {
        sums[i] = sums[i - 1] + nums[i];
    }
    for (int i = 0; i < n; ++i) {
        if (sums[i] == k) ++res;
        for (int j = i - 1; j >= 0; --j) {
            if (sums[i] - sums[j] == k)
                ++res;
        }
    }
    return res;
}

你可能感兴趣的:(Leetcode,数据结构)