LeetCode C++ 1588. Sum of All Odd Length Subarrays【模拟】简单
发布日期:2021-07-01 02:51:49
浏览次数:2
分类:技术文章
本文共 1850 字,大约阅读时间需要 6 分钟。
Given an array of positive integers arr
, calculate the sum of all possible odd-length subarrays.
A subarray is a contiguous subsequence of the array.
Return the sum of all odd-length subarrays of arr
.
Example 1:
Input: arr = [1,4,2,5,3]Output: 58Explanation: The odd-length subarrays of arr and their sums are:[1] = 1[4] = 4[2] = 2[5] = 5[3] = 3[1,4,2] = 7[4,2,5] = 11[2,5,3] = 10[1,4,2,5,3] = 15If we add all these together we get 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58
Example 2:
Input: arr = [1,2]Output: 3Explanation: There are only 2 subarrays of odd length, [1] and [2]. Their sum is 3.
Example 3:
Input: arr = [10,11,12]Output: 66
Constraints:
1 <= arr.length <= 100
1 <= arr[i] <= 1000
题意:统计正整数数组中,所有长度为奇数的子数组的和。
思路1: O ( n 3 ) O(n^3) O(n3) 的算法,枚举每个子区间的左右端点,如果长度为奇数,则又用一次循环计算它的元素和。这里就不写出来了。
思路2: O ( n 2 ) O(n^2) O(n2) 的算法,用前缀和去掉上一个思路中的内部循环,第二重循环每次可以 += 2
。代码如下:
class Solution { public: int sumOddLengthSubarrays(vector & arr) { if (arr.size() <= 1) return arr[0]; int ans = 0; vector presum(arr.size() + 1); for (int i = 0; i < arr.size(); ++i) presum[i + 1] = presum[i] + arr[i]; for (int i = 0; i < arr.size(); ++i) { for (int j = i; j < arr.size(); j += 2) { int len = j - i + 1; if (len & 1) ans += presum[j + 1] - presum[i]; } } return ans; } };
思路3:其实完全可以不用前缀和,直接模拟就可以了。代码如下:
class Solution { public: int sumOddLengthSubarrays(vector & arr) { if (arr.size() <= 1) return arr[0]; int ans = 0; for (int i = 0; i < arr.size(); ++i) { int sum = 0; for (int j = i; j < arr.size(); ++j) { sum += arr[j]; if ((j - i + 1) & 1) ans += sum; } } return ans; } };
转载地址:https://memcpy0.blog.csdn.net/article/details/108710821 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月22日 05时05分27秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【接口自动化】
2019-05-01
推荐一位川大零基础转行 Python 的人生勇士
2019-05-01
Python解惑之:True与False
2019-05-01
你要的微信小程序终于来了
2019-05-01
有了这些 Chrome 插件,效率提升10倍(建议收藏)
2019-05-01
Python 开发者都会遇到的错误:UnboundLocalError
2019-05-01
只有1%的程序员搞懂过浮点数陷阱
2019-05-01
一名 Google 工程师的大数据处理经验
2019-05-01
命名难,难于上青天
2019-05-01
没钱没公司,怎么做一款付费产品
2019-05-01
代码整洁之道-编写 Pythonic 代码
2019-05-01
树莓派程序开机自启动
2019-05-01
连锁门店无线通信方案
2019-05-01
配置Lotus Domino集群视频详解
2019-05-01
Linux软件万花筒
2019-05-01
全球开源软件发展趋势分析
2019-05-01
Linux常用的安全工具
2019-05-01
python 多进程之进程池的操作
2019-05-01
flask整理之 flask程序中的debug模式
2019-05-01