【LeetCode】连续的子数组和 Java 题解
题目描述
给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:
子数组大小至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。
如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。
复制代码
思路分析
这是一道中等难度的题目,含义容易理解,首先可以通过朴素解法求解。枚举所有的子数组,由于题目求解只需要子数组的和,自然而然想到了用前缀和提升效率。
前缀和是一种预计算,常见的实现代码如下:
复制代码
AC 代码
复制代码
总结
上述代码算法一的时间复杂度 O(n * n), 空间复杂度是 O (n)
上述代码算法二的时间复杂度 O(n * n), 空间复杂度是 O (n)
算法二是这个题目的最优解,这个解法来自于官方题解,采用了 hashmap, 前缀和, 同余数学思想合作解决。
这种题目是在实际考察中比较常见的,结合多个知识点,综合解决。勤加练习,可以掌握的更好!
坚持每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/71ea3c7ea7d6fa1e20776ff98】。文章转载请联系作者。
评论