Leetcode 930:和相同的二元子数组
1、在由若干 0
和 1
组成的数组 A
中,有多少个和为 S
的非空子数组。
输入:A = [1,0,1,0,1], S = 2
输出:4
解释:
如下面所示,有 4 个满足题目要求的子数组:
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
[1,0,1,0,1]
这个问题和之前的Leetcode 560:和为K的数组(最详细的解法!!!)非常类似。
可以通过Prefix sum前缀和来求解。假设我们令P[i] = A[0] + A[1] + ... + A[i-1]和P[j] = A[0] + A[1] + ... + A[j-1],那么P[j] - P[i] = A[i] + A[i+1] + ... + A[j-1]。如果P[j] - P[i] == S的话,那么[i,j]就是我们需要的区间。所以我们对于每个j,我们只要计算有多少个i使得P[j] - P[i] == S,这样我们就得到了以P[j]作为右区间并且和为S的区间数。对于A中的每个元素都做同样的处理,最有将所有的结果相加即可。
具体实现上,我们通过hash_map记录P[j]。初始化的时候要注意一个细节,对于dict[0]=1。为什么?因为当P[j]==S时,P[i]=0并且此时我们的result=1。
class Solution:def numSubarraysWithSum(self, A, S):""":type A: List[int]:type S: int:rtype: int"""result, cur_sum = 0, 0sum_dict = {0:1}for num in A:cur_sum += numif cur_sum - S in sum_dict:result += sum_dict[cur_sum - S]if cur_sum in sum_dict:sum_dict[cur_sum] += 1else:sum_dict[cur_sum] = 1return result
from:https://blog.csdn.net/qq_17550379/article/details/83547444
2、给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
1、暴力搜索:
class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str""" maxlen=0 for i in range(len(s)):temp=''for j in range(i+1,len(s)):temp+=s[j]if(temp==temp[::-1]):if len(temp)>maxlen:maxlen=len(temp)tem=tempreturn tem
2、从最长字符串开始判别,这里的每一次循环其实是定义了不同的字符串长度
class Solution(object):def longestPalindrome(self, s):""":type s: str:rtype: str"""n = len(s)for i in range(n):start = 0end = n - iwhile end <= n:sub_string = s[start:end]if sub_string == sub_string[::-1]:return sub_stringstart += 1end += 1
Leetcode 930:和相同的二元子数组相关推荐
- LeetCode 930. 和相同的二元子数组(哈希+前缀和)
文章目录 1. 题目 2. 解题 1. 题目 在由若干 0 和 1 组成的数组 A 中,有多少个和为 S 的非空子数组. 示例: 输入:A = [1,0,1,0,1], S = 2 输出:4 解释: ...
- leetcode系列-209.长度最小的子数组
leetcode系列–第209题.长度最小的子数组 题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target .找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [num ...
- LeetCode 713 乘积小于K的子数组
写在前面 一道很艺术的编程题~做学习记录 题目描述 给定一个正整数数组 nums和整数 k . 请找出该数组内乘积小于 k 的连续的子数组的个数. 示例 示例1: 输入: nums = [10,5,2 ...
- LeetCode题解(0930):和相同的二元子数组(Python)
题目:原题链接(中等) 标签:哈希表.双指针 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 304ms (81.07%) A ...
- leetcode算法题--最长湍流子数组
原题链接:https://leetcode-cn.com/problems/longest-turbulent-subarray/ 相关问题:摆动序列 使用双dp保存状态. up[i]表示如果在i点是 ...
- LeetCode 713. 乘积小于 K 的子数组
713. 乘积小于 K 的子数组 [双指针]s表示前j到i的数字的乘积,当发现乘积大于等于k的时候,就把j向右移动,并且把s除掉个nums[j],这样得到的就是以i结尾的符合要求的数组的最大长度,比这 ...
- leetcode算法题--最长公共子数组
原题链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/ 相似题目:最长公共子序列 只不过这里必须是连续的, ...
- Leetcode 930. 和相同的二元子数组 题解
题目链接:https://leetcode-cn.com/problems/binary-subarrays-with-sum/ 开心滑动窗口,特判可有可无但是对于神奇样例会快一点.记得双指针的界限要 ...
- ⭐算法入门⭐《双指针》中等04 —— LeetCode 713. 乘积小于K的子数组
最新文章
- 为您的系统指定一个默认的软件仓库(YUM), 命令行配置自动yum源
- Apollo分布式配置中心入门
- 能量项链(NOIP 2006 提高组)
- 读书笔记:软件人才-管理的艺术
- VS2008系统开发背景图片的添加及注意事项
- leetcode No.15-16 三数之和相关问题
- 2021年前端还好找工作吗?
- 解析Integer比较
- 如何加强站内搜索功能
- pythonclass的使用详情_python 类class基础简明笔记
- 一张图看尽 Linux 内核运行原理
- 二分查找与 bisect 模块
- Git之Github使用(一):Push代码到Github
- ApacheCN 翻译/校对/笔记整理活动进度公告 2019.10.18
- Fedformer:Frequency Enhanced DecomposedTransformer for long-term series forecasting[还在学习中···]
- Rhino7.4软件安装教程
- mysql删除密码代码_mysql 用户新建、受权、删除。密码修改
- 计算机一直重启无法进入系统怎么办,电脑无限蓝屏重启 电脑一直不断的重启怎么办...
- 系统设计基础 负载均衡
- 抽象类和接口的相同点与不同点