Open liuyingbin19222 opened 4 years ago
给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。
示例 1:
输入: [23,2,4,6,7], k = 6 输出: True 解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。
note : 这道题很狗的一点是k可以取值为0,那么就出现了除以0的情况,我的代码不考虑k=0的情况; 该段代码的关键是使用哈希表,首先使用下标i来遍历求和,使用sum来记录,在使用另一个下标j,初始值是i,对sum取余,如果对i的sum取余k等于对j的sum取余k,那么i和j之间的数就是我们所求的连续数组,返回true;
class Solution { public: bool checkSubarraySum(vector<int>& nums, int k) { //使用哈希表; map<int, int > mymap; int sum = 0 ; mymap.insert(pair<int,int>(0,-1)); for(int i = 0 ;i < nums.size();i++){ sum += nums[i]; if(k != 0){ sum = sum % k; } if( ( i - mymap.find(sum)->second ) > 1){ return true; } else { mymap.insert(pair<int,int>(sum , i)); } } return false; } };
给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。
示例 1:
输入: [23,2,4,6,7], k = 6 输出: True 解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。
note : 这道题很狗的一点是k可以取值为0,那么就出现了除以0的情况,我的代码不考虑k=0的情况; 该段代码的关键是使用哈希表,首先使用下标i来遍历求和,使用sum来记录,在使用另一个下标j,初始值是i,对sum取余,如果对i的sum取余k等于对j的sum取余k,那么i和j之间的数就是我们所求的连续数组,返回true;