标签:++ 技术分享 表示 保存 lse .com 注意 int OLE
2018-10-03 01:12:42
问题描述:
问题求解:
本题本质上其实是一个preSum问题的变种,每次求preSum % k,并将之保存到map中,如果之后再次得到相同的余数,则表示这两者之间的和是k的整数倍。
需要注意的有两点:
1)map初始化的时候需要加入(0, -1)
2)如果k == 0,那么直接将sum加入到map中即可
public boolean checkSubarraySum(int[] nums, int k) { if (nums.length == 0) return false; Map<Integer, Integer> map = new HashMap<>(); map.put(0, -1); int sum = 0; for (int i = 0; i < nums.length; i++) { sum += nums[i]; if (k != 0) sum %= k; Integer tmp = map.get(sum); if (tmp != null && i - tmp >= 2) return true; if (tmp == null) map.put(sum, i); } return false; }
连续子数组和 Continuous Subarray Sum
标签:++ 技术分享 表示 保存 lse .com 注意 int OLE
原文地址:https://www.cnblogs.com/TIMHY/p/9739014.html