leetcode 3740. 三个相等元素之间的最小距离 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 <= 100
  • 1 <= nums[i] <= n

分析:用一个 vector 记录每个数字出现的位置,当一个数次出现次数大于等于 3 时,计算最后三个出现位置的距离和即可。

cpp 复制代码
class Solution {
public:
    int minimumDistance(vector<int>& nums) {
        int n=nums.size(),ans=1000;
        vector<vector<int>>index(n+5);
        for(int i=0;i<n;++i)
        {
            index[nums[i]].push_back(i);
            if(index[nums[i]].size()>=3)
            {
                ans=min(ans,2*(index[nums[i]][index[nums[i]].size()-1]-index[nums[i]][index[nums[i]].size()-3]));
            }
        }
        return ans==1000?-1:ans;;
    }
};
相关推荐
优质酸酸乳4 小时前
力扣100题之21合并两个有序链表
算法·leetcode·链表
旖旎夜光4 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
yi0115 小时前
LeetCode 134 加油站:从 双循环暴力 演变到 贪心
linux·算法·leetcode
yi0116 小时前
DAY 14: LeetCode 394. 字符串解码|递归和栈到底怎么处理嵌套?
数据结构·笔记·python·算法·leetcode
P.D.Wei6 小时前
[Leetcode 1614] 括号的最大嵌套深度
算法·leetcode·职场和发展
blxr_7 小时前
力扣hot100寻找重复数https://leetcode.cn/problems/find-the-duplicate-number/
算法·leetcode·职场和发展
_不会dp不改名_8 小时前
leetcode_1614嵌套括号的最大深度
算法·leetcode·职场和发展
alphaTao10 小时前
LeetCode 每日一题 2026/9/21-2026/9/27
python·算法·leetcode
Persistent的粽子!1 天前
双指针算法:最大盛水容器
c++·算法·leetcode
All for pursuit.1 天前
【二叉树-10】114.二叉树展开为链表
数据结构·c++·算法·leetcode·链表