【LeetCode】算术三元组的数目 Java 题解
题目描述
给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件,则三元组 (i, j, k) 就是一个 算术三元组 :
i < j < k ,nums[j] - nums[i] == diff 且 nums[k] - nums[j] == diff 返回不同 算术三元组 的数目。
复制代码
解题思路
今天的算法题目是数组题目,题目自定义了一组算术三元组计算规则,我们需要计算出不同的算术三元组数目。
算术三元组的计算规则是定义好的,我们首先可以使用模拟的算法解决,时间复杂度是 O(n * n * n), 这种解法可以优化的每一层计算的个数,可以提升部分计算效率。
再次分析题目和代码,题目给出的数据是严格递增的数据,且 diff 是正整数,因此,我们可以直接枚举 j 的取值,然后分别查询 nums[j] - diff 和 nums[j] + diff 是否在数组中即可。这样思维转化之后,就和两数之和相似,我们可以使用 HashSet 集合记录出现的所有数值,使用 contains 方法判断 nums[j] - diff 和 nums[j] + diff 是否存在。如果都存在,就是一个答案。具体实现代码如下,供参考。
代码
模拟解法
复制代码
HashSet 解法
复制代码
总结
朴素算法的时间复杂度是 O(n * n * n),空间复杂度是 O(1)
HashSet 算法的时间复杂度是 O(n),空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/622e0c3a4cc87ee891b824e6f】。文章转载请联系作者。
评论