算法训练:Continuous Subarray Sum

题目链接:https://leetcode.com/problems/continuous-subarray-sum/#/description


题目描述:

      给定一个包含非负整数的数组和一个整数K,问是否该数组中存在一个长度至少为2的子数组其和为K的整数倍   

解题思路:

     (1) 如果k=0,遍历数组,如果遇到有两个相邻的0,即可返回true,否则false。

      (2) 如果k!=0,遍历数组,用一个数组记录从i节点到j节点的和,如果满足条件,说明存在,返回true,

           否则从i+1开始再次遍历,知道找到或者遍历结束。

    bool checkSubarraySum(vector& nums, int k) {
        if (nums.size() < 2) return false;
        if (k == 0) { //如果能找到连续两个0,即可返回true
            for (int i = 0; i < nums.size() - 1; i++) {
                if (nums[i] == 0 && nums[i + 1] == 0)
                return true; 
            } 
            return false;
        } 
        for (int i = 0; i < nums.size(); ++i) {//从下标0开始遍历数组
            int sum = nums[i];//记录当前节点的和
            for (int j = i + 1; j < nums.size(); ++j) {
                sum += nums[j];
                if (sum%k==0) return true;
            }
        }
        return false; 
    }

运行结果:

Your Input
[2,2,9,6,7] 9
Your answer
false
Expected answer
false











你可能感兴趣的:(LeetCode)