【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
相关推荐
10岁的博客4 分钟前
容器化安装新玩法
算法
不会算法的小灰5 分钟前
HTML简单入门—— 基础标签与路径解析
前端·算法·html
flashlight_hi1 小时前
LeetCode 分类刷题:1901. 寻找峰值 II
python·算法·leetcode
深瞳智检2 小时前
YOLO算法原理详解系列 第007期-YOLOv7 算法原理详解
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪
郝学胜-神的一滴2 小时前
中秋特别篇:使用QtOpenGL和着色器绘制星空与满月
开发语言·c++·算法·软件工程·着色器·中秋
qiuiuiu4133 小时前
CPrimer Plus第十六章C预处理器和C库总结2-qsort函数
java·c语言·算法
JuneXcy4 小时前
C++知识点总结用于打算法
c++·算法·图论
zhuzhuxia⌓‿⌓5 小时前
线性表的顺序和链式存储
数据结构·c++·算法
未知陨落5 小时前
LeetCode:95.编辑距离
算法·leetcode