Leetcode 523
来源:互联网 发布:js实现九九乘法表 编辑:程序博客网 时间:2024/05/20 18:55
题意
给一个由非负正数组成的数组和一个数k,要求在数组中找一段长度
思路
算法1
维护数组的前缀和
注意
算法2
如果要求和刚好为k的话,我们对于当前和unordered_map
既然是k的整数倍,我们可以利用%的性质:
所以,我们不维护前缀和而是前缀和%k之后的值x,并且用map保存每个x出现的最早位置,当再次出现x的时候,并且长度大于1,那么就是我们的结果。
代码
algorithm 1
class Solution {public: bool checkSubarraySum(vector<int>& nums, int k) { vector<int> sum(nums.size(), 0); if (nums.size()) { for (int i = 0; i < nums.size(); i++) sum[i] = (i ? sum[i - 1] : 0) + nums[i]; for (int i = 0; i < nums.size(); i++) { if (k == 0) { if (i && sum[i] == 0) return true; } else { if (sum[i] % k == 0 && i) return true; } for (int j = 0; j < i - 1; j++) { int x = sum[i] - sum[j]; if (k == 0) { if (x == 0) return true; } else { if (x % k == 0) return true; } } } } return false; }};
algorithm 2
class Solution {public: bool checkSubarraySum(vector<int>& nums, int k) { unordered_map<int, int> pos; if (nums.size()) { int sum = 0; pos[0] = -1; for (int i = 0; i < nums.size(); i++) { sum += nums[i]; if (k) sum %= k; if (pos.count(sum)) { int x = pos[sum]; if (i - x > 1) return true; } else { pos[sum] = i; } } } return false; }};
0 0
- Leetcode 523
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- DatePickerDialog用法及只显示年月隐藏日
- PAT B1019. 数字黑洞 (20)
- java实现网上在线支付--13java在线支付所有源码
- hadoop hbase 搭建
- Android使用cavans绘制饼图
- Leetcode 523
- [Java蠢萌新]Java初入贰-以月烙骨
- JS判断浏览器版本(已解决IE11版本为Mozilla问题)
- 献给前端求职路上的你们(下)
- leetCode
- HTML5 Canvas中绘制椭圆的5种方法
- 《深入理解Spark-核心思想与源码分析》读书笔记(2)
- iOS 3DTouch 开发
- wechat4j.properties配置文件详解。