[力扣c语言实现]523. 连续的子数组和

523. 连续的子数组和

1. 题目描述

给定一个包含 非负数 的数组和一个目标 整数 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。

说明:

数组的长度不会超过 10,000 。
你可以认为所有数字总和在 32 位有符号整数范围内。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/continuous-subarray-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2.代码如下

bool dfs(int start,int end,int total,int k,int *nums,int *dep)
{
    
    
    if ((total + nums[start]) % k ==0)
    {
    
    
        if (start > 0 && *dep > 0)
        {
    
    
            return true;
        }
    }
    else 
    {
    
    
        if (start +1 >= end)
        {
    
    
            return false;
        }

        total += nums[start];
        *dep += 1;
        return dfs(start+1,end,total,k,nums,dep);
    }

    return false;
}

bool checkSubarraySum(int* nums, int numsSize, int k){
    
    
    
     k = abs(k);

    if (numsSize <= 1)
    {
    
    
        return false;
    }

    if (k == 1)
    {
    
    
        return true;
    }

    for (int i = 0;i < numsSize;i++)
    {
    
    
        if (i < numsSize -1)
        {
    
    
            if (nums[i] == 0 && nums[i+1] == 0)
            {
    
    
                return true; 
            }
        }
    }

    if (k == 0)
    {
    
    
        for (int i = 0;i < numsSize;i++)
        {
    
    
            if (i < numsSize -1)
            {
    
    
                if (nums[i] == 0 && nums[i+1] == 0)
                {
    
    
                    return true; 
                }
            }
        }

        return false;
    }

    int tmp = 0;
    for (int i = 0; i < numsSize;i++)
    {
    
    
        tmp += nums[i];
    }

    if (tmp < k)
    {
    
    
        return false;
    }

    int dep = 0;

    for (int i = 0 ; i < numsSize;i++)
    {
    
        
        dep = 0;
        if (true == dfs(i,numsSize,0,k,nums,&dep))
        {
    
    
            return true;
        }
    }

    return false;
}

猜你喜欢

转载自blog.csdn.net/dengwodaer/article/details/108299353