当前位置: 首页 > news >正文

建站宝盒下载网创项目

建站宝盒下载,网创项目,比百度好用的搜索软件手机版,短视频app开发软件LeetCode 560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入:nums [1,2,3], k 3 …

LeetCode 560. 和为 K 的子数组

  

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

提示:

  • 1 <= nums.length <= 2 * 104
  • -1000 <= nums[i] <= 1000
  • -107 <= k <= 107

思路

  • 双层循环暴力求解
  • 前缀和,利用空间换时间的思想,参考 LeetCode 大佬题解


    思路类似于【LeetCode 1. 两数之和】。遍历 nums 数组,求每一项的前缀和,并统计对应nums[i]的出现次数,以键值对存入 map。

    边存边检查 map,如果 map 中存在 key 为「当前前缀和 - k」,说明这个之前出现的前缀和,满足「当前i所对应的前缀和 - 之前出现的前缀和 == k」。最后,将「当前前缀和 - k」出现的次数,累加到结果中即可。

    通俗的说,已知当前 i 所对应的前缀和为 prefixSum[i],我们想找出 prefixSum[i] 减去之前的某些连续子数组和之后的差值等于k的这么一些连续子数组,那么满足条件:当前 i 所对应的前缀和 prefixSum[i] - 之前出现的前缀和 x = k,那么这个 x = prefixSum[i] - k,接下来我们要判断这个 x 在之前是否出现过,因此将求得的每一项前缀和,以及对应的出现次数,以键值对形式存入 map中,以便后续判断。

注意:nums中可能存在负数,sum累加和可能更大也可能更小,因此,即使累加和等于k,也不能提前break退出

时间复杂度

  • 双层循环暴力求解:O(n^2)
  • 利用前缀和:O(n)

空间复杂度

  • 双层循环暴力求解:O(1)
  • 利用前缀和:O(n)
// 方法1 双层循环暴力求解
func subarraySum(nums []int, k int) int {res := 0for i := 0; i < len(nums); i++ {sum := 0for j := i; j < len(nums); j++ {sum += nums[j]if sum == k {res++// break // nums中可能存在负数,sum累加和可能更大也可能更小,不能提前break退出}}}return res
}// 方法2 前缀和(推荐)
// 参考:https://leetcode.cn/problems/subarray-sum-equals-k/solution/dai-ni-da-tong-qian-zhui-he-cong-zui-ben-fang-fa-y/
// 思路:类似于【1、两数之和】,遍历 nums 数组,求每一项的前缀和,统计对应的出现次数,以键值对存入 map。
// 边存边检查 map,如果 map 中存在 key 为「当前前缀和 - k」,说明这个之前出现的前缀和,满足「当前前缀和 - 该前缀和 == k」,它出现的次数,累加给 count
func subarraySum(nums []int, k int) int {m := map[int]int{0:1}sum, res := 0, 0for i := 0; i < len(nums); i++ {sum += nums[i]if cnt, ok := m[sum - k]; ok {res += cnt}m[sum] += 1}return res
}
http://www.yayakq.cn/news/479539/

相关文章:

  • seo整站优化推广好看网电影网站模板
  • 优秀的个人网站设计上海搭建工厂
  • 菏泽郓城住房和城乡建设局网站seo查询怎么查
  • 顺德网站制作案例平台网站开发职位工资
  • 房地产中介网站建设少儿编程哪家机构比较好
  • 阿里云域名注册好了怎么做网站海淀深圳网站建设公司价格
  • 门户网站优化报价县级以下不允许建设网站
  • 重庆网站推广 软件c 转网站开发
  • 网站建设有关书籍wordpress设置备案
  • 鹤山网站建设易搜互联argo wordpress主题
  • 网站开发的公司排名wordpress 设置主页
  • 网站制作预付款会计分录推荐游戏 火爆游戏
  • 网站开发视频百度云网站备案背景布
  • 用网站源码怎么做网站长沙有哪些网络平台公司
  • 雅虎网站收录提交入口界面设计网站推荐
  • 濮阳市城乡一体化示范区地图谷歌seo服务商
  • 网站板块设计有哪些网站制作案例价格
  • node做网站优势阿里云虚拟主机可以做几个网站吗
  • 备份整个网站wordpress设置不显示摘要
  • 泉州做网站seo的鄞州中学网站谁做的
  • 公司网站设计图片班级优化大师官网
  • 昆明网站建设推荐q479185700顶你中国核工业第五建设有限公司招聘信息
  • 网站规划名词解释宝塔window怎么做网站
  • 企业网站建设用标语温州网站建设有限公司
  • 网站建设系统设计报告建设银行个人
  • 洛阳网站开发培训最流行的做网站语言
  • 像乐视做硬件的视频网站做网站怎么排版
  • 0基础自学做网站设计传媒公司logo
  • 网站建设站郑州建设网站推广公司
  • 杭州pc手机网站建设做咖啡网站