算法训练:Continuous Subarray Sum

来源:互联网 发布:长沙蓝狐网络 编辑:程序博客网 时间:2024/05/29 11:42

题目链接: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<int>& 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