栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

[算法] 剑指offer2 golang 面试题10:和为k的子数组

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[算法] 剑指offer2 golang 面试题10:和为k的子数组

[算法] 剑指offer2 golang 面试题10:和为k的子数组 题目1: 思路1: 暴力

时间复杂度 O(n2)

代码
func subarraySum(nums []int, k int) int {
    //start: 13:51, 13:57 
    //思路1: 暴力,因为元素中有可能是负数
    //固定一个数字i,记录后面存在的可能性
    
    //参数校验
    if len(nums) == 0 {
        return 0
    }

    //暴力
    count := 0
    for i := 0; i < len(nums); i++{
        sum := 0
        for j := i; j < len(nums); j++{
            sum += nums[j]
            if sum == k {
                count ++
            }
        }  
    }
    return count 
}
测试1

思路2: 前缀和 + hashmap

因为有负数存在, 所以滑动窗口是不能用的

代码
func subarraySum(nums []int, k int) int {
    //start: 13:51, 13:57 
    //思路2: 前缀和 + hashmap
    //

    //参数校验
    if len(nums) == 0 {
        return 0
    }

    //前缀和和+ hashmap
    sumToCount := make(map[int]int)
    sum,resCount := 0,0
    sumToCount[0] = 1
    for i := 0; i < len(nums); i ++{
        sum += nums[i]
        //存在 sum - sumOld = k,累加到结果中
        resCount += sumToCount[sum - k]
        sumToCount[sum] += 1
    }
    return resCount 
}
测试

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号