马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
媒介
颠末前期的底子训练以及部分实战练习,粗略把握了各种题型的解题思绪。现阶段开始专项练习。
描述
给你一个整数数组 arr 。请你返回和为 奇数 的子数组数目。
由于答案可能会很大,请你将结果对 10^9 + 7 取余后返回。
示例 1:
- <strong>输入:</strong>arr = [1,3,5]
- <strong>输出:</strong>4
- <strong>解释:</strong>所有的子数组为 [[1],[1,3],[1,3,5],[3],[3,5],[5]] 。
- 所有子数组的和为 [1,4,9,3,8,5].
- 奇数和包括 [1,9,3,5] ,所以答案为 4 。
复制代码 示例 2 :
- <strong>输入:</strong>arr = [2,4,6]
- <strong>输出:</strong>0
- <strong>解释:</strong>所有子数组为 [[2],[2,4],[2,4,6],[4],[4,6],[6]] 。
- 所有子数组和为 [2,6,12,4,10,6] 。
- 所有子数组和都是偶数,所以答案为 0 。
复制代码 示例 3:
- <strong>输入:</strong>arr = [1,2,3,4,5,6,7]
- <strong>输出:</strong>16
复制代码 示例 4:
- <strong>输入:</strong>arr = [100,100,99,99]
- <strong>输出:</strong>4
复制代码 示例 5:
- <strong>输入:</strong>arr = [7]
- <strong>输出:</strong>1
复制代码
提示:
- 1 <= arr.length <= 10^5
- 1 <= arr <= 100
实现原理与步骤
1.累加和为偶数,减去前序累加和为奇数的情况,剩余的为奇数。在盘算个数情况下便是前序的奇数个数。
2.累加和为奇数,减去前序累加和为偶数的情况,剩余的为偶数。在盘算个数情况下便是前序的偶数个数。
3.初始化odd为0,even为1.1代表[]空偶值情况。
4.之前思量此方法是否会存在重复情况,由于累加和持续随数字位置递增,剩余的尾数不断在更新则不会出现重复情况。
实现代码
- class Solution {
- private static final int MODULO = 1000000007;
- public int numOfSubarrays(int[] arr) {
- int odd = 0, even = 1;
- int res = 0;
- int sum = 0;
- int length = arr.length;
- for (int i = 0; i < length; i++) {
- sum += arr[i];
- res = (res + (sum % 2 == 0 ? odd : even)) % MODULO;
- if (sum % 2 == 0) {
- even++;
- } else {
- odd++;
- }
- }
- return res;
- }
- }
复制代码 1.QA:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |