3740.三个相等元素之间的最小距离 I:今日先暴力,"明日"再哈希
【LetMeFly】3740.三个相等元素之间的最小距离 I:今日先暴力,”明日”再哈希
力扣题目链接:https://leetcode.cn/problems/minimum-distance-between-three-equal-elements-i/
给你一个整数数组 nums。
如果满足 nums[i] == nums[j] == nums[k],且 (i, j, k) 是 3 个 不同 下标,那么三元组 (i, j, k) 被称为 有效三元组 。
有效三元组 的 距离 被定义为 abs(i - j) + abs(j - k) + abs(k - i),其中 abs(x) 表示 x 的 绝对值 。
返回一个整数,表示 有效三元组 的 最小 可能距离。如果不存在 有效三元组 ,返回 -1。
示例 1:
输入: nums = [1,2,1,1,3]
输出: 6
解释:
最小距离对应的有效三元组是 (0, 2, 3) 。
(0, 2, 3) 是一个有效三元组,因为 nums[0] == nums[2] == nums[3] == 1。它的距离为 abs(0 - 2) + abs(2 - 3) + abs(3 - 0) = 2 + 1 + 3 = 6。
示例 2:
输入: nums = [1,1,2,3,2,1,2]
输出: 8
解释:
最小距离对应的有效三元组是 (2, 4, 6) 。
(2, 4, 6) 是一个有效三元组,因为 nums[2] == nums[4] == nums[6] == 2。它的距离为 abs(2 - 4) + abs(4 - 6) + abs(6 - 2) = 2 + 2 + 4 = 8。
示例 3:
输入: nums = [1]
输出: -1
解释:
不存在有效三元组,因此答案为 -1。
提示:
1 <= n == nums.length <= 1001 <= nums[i] <= n
解题方法:暴力模拟
三层遍历,第一层使用$i$从$0$遍历到$n-1$,第二层使用$j$从$i+1$到$n-1$遍历,第三层使用$k$从$j+1$到$n-1$遍历。如果$nums[i]$、$nums[j]$、$nums[k]$都相等,则更新答案最小值。
Tips:由于遍历过程中$i$小于$j$小于$k$,所以有abs(i - j) + abs(j - k) + abs(k - i) = 2 * (k - i)。
- 时间复杂度$O(n^3)$,其中$n=len(nums)$
- 空间复杂度$O(1)$
AC代码
C++
1 | |
Python
1 | |
今天要是就使用哈希表了,明天就没得写了[Doge]。
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源