【Leetcode-Hot100】和为k的子数组

题目

解答

这道题我使用暴力解法,不出意外的超时了:

python 复制代码
class Solution(object):
    def subarraySum(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        len_nums = len(nums)
        result, s_nums = 0, 0

        for left in range(len_nums):
            right = left
            while right >=0:
                s_nums += nums[right]
                if s_nums == k:
                    result += 1
                right -= 1

            s_nums = 0

        return result
        

但我发现官方给出的第一个解法中Java语言写的答案,和我用的暴力解法区别不大:

java 复制代码
public class Solution {
    public int subarraySum(int[] nums, int k) {
        int count = 0;
        for (int start = 0; start < nums.length; ++start) {
            int sum = 0;
            for (int end = start; end >= 0; --end) {
                sum += nums[end];
                if (sum == k) {
                    count++;
                }
            }
        }
        return count;
    }
}

因此,我很疑惑,为什么同样平方复杂度的代码,我使用python却不能通过,这点很值得探究一下。

目前找到的答案是:

  • Java是编译型语言,循环和数学运算速度极快,适合处理密集型计算。

  • Python是解释型语言,循环效率较低,尤其在大规模数据时更明显。

因此在相同测试用例下Java可能通过而Python超时。

有大佬有其他的答案吗?是不是使用python语言,如果测试样例在4数量级以上就需要避免使用平方复杂度的答案呢?

下面补充一下该题目的正确解法:

python 复制代码
class Solution(object):
    def subarraySum(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        len_nums = len(nums)
        result = 0
        map_nums = defaultdict(int)
        map_nums[0] = 1
        pre = 0
        
        for i in range(len_nums):
            pre += nums[i] 
            result += map_nums.get(pre-k, 0)
            # 先寻找 再更新
            map_nums[pre] += 1
        return result
相关推荐
Star在努力21 分钟前
15-C语言:第15~16天笔记
c语言·笔记·算法
CoovallyAIHub26 分钟前
工业质检新突破!YOLO-pdd多尺度PCB缺陷检测算法实现99%高精度
深度学习·算法·计算机视觉
gb421528727 分钟前
负载均衡算法中的加权随机算法
windows·算法·负载均衡
xdlka1 小时前
C++初学者4——标准数据类型
开发语言·c++·算法
go54631584651 小时前
大规模矩阵构建与高级算法应用
线性代数·算法·矩阵
向左转, 向右走ˉ2 小时前
为什么分类任务偏爱交叉熵?MSE 为何折戟?
人工智能·深度学习·算法·机器学习·分类·数据挖掘
霜绛3 小时前
机器学习笔记(四)——聚类算法KNN、Kmeans、Dbscan
笔记·算法·机器学习·kmeans·聚类
晨非辰4 小时前
#C语言——学习攻略:深挖指针路线(三)--数组与指针的结合、冒泡排序
c语言·开发语言·数据结构·学习·算法·排序算法·visual studio
zzywxc7874 小时前
编程算法在金融、医疗、教育、制造业等领域的落地案例
人工智能·算法·金融·自动化·copilot·ai编程
zzywxc7874 小时前
编程算法在金融、医疗、教育、制造业的落地应用。
人工智能·深度学习·算法·机器学习·金融·架构·开源