IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leetcode-序列和为K的数量-对前缀和和哈希代码的分析 -> 正文阅读

[数据结构与算法]leetcode-序列和为K的数量-对前缀和和哈希代码的分析

本题与主站 560?题相同:?https://leetcode.cn/problems/subarray-sum-equals-k/ 代码不是自己code出来的,对大佬写的算法的总结:

class Solution:
    def subarraySum(self, nums: List[int], k: int) -> int:
        d = defaultdict(int, {0: 1})
        ans, sum = 0, 0
        for num in nums:
            sum += num
            ans += d[sum - k]
            d[sum] += 1
        return ans

其实本题的思路就是,当循环遍历到 n u m s [ i ] nums[i] nums[i]的时候。查看前面是否存在和为 k ? n u m s [ i ] k-nums[i] k?nums[i]的前缀,我们可以称之为 n u m s [ j ] , j ∈ { 1 , 2 , . . . , i } nums[j], j \in \{1,2,...,i\} nums[j],j{1,2,...,i}
如果可以找到 ∑ x = j i n u m s [ x ] + n u m s [ i ] = k \sum_{x=j}^{i}nums[x] + nums[i] = k x=ji?nums[x]+nums[i]=k就代表索引 j j j i i i之和满足k这个要求。

s u m [ i ] sum[i] sum[i]表示前i项的和,通过变形,可以推出, s u m [ i ] = s u m [ i ? 1 ] + n u m s [ i ] sum[i] = sum[i-1] + nums[i] sum[i]=sum[i?1]+nums[i]
s u m [ i ] ? k = s u m [ i ? 1 ] + n u m s [ i ] ? k sum[i] - k = sum[i-1] + nums[i] -k sum[i]?k=sum[i?1]+nums[i]?k
初始化一个哈希表,记录所有前 i i i项的和的字典,形如:hashmap = {0:1, ∑ i = 0 1 n u m [ i ] \sum_{i=0}^1num[i] i=01?num[i]:?, ∑ i = 0 2 n u m [ i ] \sum_{i=0}^2num[i] i=02?num[i]:?,…, ∑ i = 0 i ? 1 n u m [ i ] \sum_{i=0}^{i-1}num[i] i=0i?1?num[i]:?}。

那么如果字典中存在值为: s u m [ i ? 1 ] + n u m s [ i ] ? k sum[i-1] + nums[i] - k sum[i?1]+nums[i]?k的键,使得键 ∑ i = 0 ? n u m s [ i ] \sum_{i=0}^?nums[i] i=0??nums[i] = s u m [ i ? 1 ] + n u m s [ i ] ? k sum[i-1] + nums[i] - k sum[i?1]+nums[i]?k。通过移项,就是 k = s u m [ i ? 1 ] + n u m s [ i ] ? ∑ i = 0 ? n u m s [ i ] k = sum[i-1] + nums[i] -\sum_{i=0}^{?}nums[i] k=sum[i?1]+nums[i]?i=0??nums[i],意义上,就是在 ∑ i = ? i n u m s [ i ] = k \sum_{i=?}^{i}nums[i] = k i=?i?nums[i]=k确实是连续子空间。
哈希表中,键为前n项的和,值为对应的前n项的和出现的次数。
只要满足条件,就在哈希表中取值,累加到result中。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:45:58  更:2022-07-21 21:46:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:38:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码