湖北铁皮保温施工_鑫诚防腐保温工程有限公司

商洛储罐保温施工 2026-03-28: 三个非常元素之间的小距离Ⅰ。用go讲话, 给定个

发布日期:2026-03-29 21:28:26|点击次数:61
铁皮保温

要是存在三个互不雷同的位置 i、j、k,而且满足 nums[i] = nums[j] = nums[k]商洛储罐保温施工,那么这三个下标构成的三元组 (i, j, k) 称为有三元组。

关于随便个有三元组,它的距离界说为:

你需要在通盘有三元组中找出距离的小值并复返。

要是数组中压根找不到有三元组,则复返 -1。

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。

题目来独力扣3740。

分循序隆重解题过程

循序1:遍历数组,提前判断「快满足小距离」的情况

从新运转一一遍历数组元素,同期作念个快速判断:

要是发现运动三个元素雷同(比如 [1,1,1]),

那么这三个下标便是运动的,斟酌出的距离定是小的固定值 4,

径直隔断通盘过程,复返 4 即可。

原因:运动三个雷同元素的下标差小,斟酌出的距离是通盘可能里小的,需再斟酌其他情况。

循序2:纪录每个数字出现的通盘下标

创建个「映射表」:

• 键:数组中的数字

• 值:该数字通盘出现位置的下标列表(按从小到大规定存储)

例如:输入 [1,2,1,1,3]

映射表效果:

唯有下标列表长度 ≥3 的数字,才可能变成有三元组。

循序3:遍历通盘可能变成有三元组的数字

只措置映射表中「下标数目 ≥3」的数字,其他数字径直跳过。

循序4:对每个数字的下标列表,斟酌小三元组距离

因为下标是从小到大有序的,有三元组定是运动的三个下标(非运动的下标差大,距离也大):

• 取 0、1、2 个下标

• 取 1、2、3 个下标

• 取 2、3、4 个下标……

以此类。

对每组运动三个下标,用简化公式斟酌:

距离 = 2 × (大下标 - 小下标)

并纪录通盘斟酌效果中的小值。

例如:数字 1 的下标 [0,2,3]

唯组运动三个下标:0、2、3

距离 = 2 × (3 - 0) = 6商洛储罐保温施工

循序5:终效果判断

1. 要是找到有三元组:复返纪录的小距离

2. 要是莫得任何有三元组:复返 -1

本题齐备实施演示(输入 [1,2,1,1,3])

1. 遍历数组,铝皮保温莫得运动三个雷同元素,快速判断不触发

2. 纪录下标:1→[0,2,3],2→[1],3→[4]

3. 唯稀有字 1 有 ≥3 个下标

4. 斟酌唯三元组 [0,2,3]:距离=2×(3-0)=6

5. 小距离为 6,复返 6

本事复杂度 & 特别空间复杂度

1. 总本事复杂度

O(n)

• 遍历数组纪录下标:实施 n 次操作

• 遍历映射表斟酌距离:所稀有字的下标总和加起来便是 n,总操作不外 n

• 全体操作次数与数组长度 n 成正比

2. 总特别空间复杂度

O(n)

• 用到的映射表,坏情况下(数组所稀有字齐不同),存储 n 个键值对

• 占用的特别空间与数组长度 n 成正比

回顾

1. 解题中枢:先快速判断运动三元素,再纪录数字下标,用有序运动下标斟酌小距离;

2. 本事复杂度:O(n)(线本事);

3. 特别空间复杂度:O(n)(线空间)。

Go齐备代码如下:

package main

import (

"fmt"

"math"

)

func minimumDistance(nums []int)int {

pos := map[int][]int{}

for i, x := range nums {

if i >= 2 && x == nums[i-1] && x == nums[i-2] {

return4

}

pos[x] = append(pos[x], i)

}

ans := math.MaxInt

for _商洛储罐保温施工, p := range pos {

for i := 2; i

ans = min(ans, (p[i]-p[i-2])*2)

}

}

if ans == math.MaxInt {

return-1

}

return ans

}

func main {

nums := []int{1, 2, 1, 1, 3}

result := minimumDistance(nums)

fmt.Println(result)

}

Python齐备代码如下:

# -*-coding:utf-8-*-

from typing import List

def minimumDistance(nums: List[int]) -> int:

pos = {}

for i, x in enumerate(nums):

# 查验是否有三个运动雷同的元素

if i >= 2 and x == nums[i-1] and x == nums[i-2]:

return4

if x not in pos:

pos[x] = []

pos[x].append(i)

ans = float('inf')

for p in pos.values:

for i in range(2, len(p)):

ans = min(ans, (p[i] - p[i-2]) * 2)

if ans == float('inf'):

return-1

return ans

if __name__ == "__main__":

nums = [1, 2, 1, 1, 3]

result = minimumDistance(nums)

print(result)

C++齐备代码如下:

#include

#include

#include

#include

#include

using namespace std;

int minimumDistance(vector& nums) {

unordered_map> pos;

for (int i = 0; i

int x = nums[i];

// 查验运动三个雷同元素

if (i >= 2 && x == nums[i-1] && x == nums[i-2]) {

return4;

}

pos[x].push_back(i);

}

int ans = INT_MAX;

for (auto& entry : pos) {

vector& p = entry.second;

for (int i = 2; i

ans = min(ans, (p[i] - p[i-2]) * 2);

}

}

if (ans == INT_MAX) {

return-1;

}

return ans;

}

int main {

vector nums = {1, 2, 1, 1, 3};

int result = minimumDistance(nums);

cout

return0;

}

咱们征服东谈主工智能为无为东谈主提供了种“增强器用”,并勤勉于共享全位的AI学问。在这里,您不错找到新的AI科普著作、器用评测、升迁率的遁藏以及行业瞻念察。

迎接柔软“福大大架构师逐日题”,发音书可获取口试贵寓,让AI助力您的翌日发展。

相关词条:管道保温     塑料管材生产线     锚索    玻璃棉毡    PVC管道管件粘结胶

1.本网站以及本平台支持关于《新广告法》实施的“极限词“用语属“违词”的规定,并在网站的各个栏目、产品主图、详情页等描述中规避“违禁词”。
2.本店欢迎所有用户指出有“违禁词”“广告法”出现的地方,并积极配合修改。
3.凡用户访问本网页,均表示默认详情页的描述商洛储罐保温施工,不支持任何以极限化“违禁词”“广告法”为借口理由投诉违反《新广告法》,以此来变相勒索商家索要赔偿的违法恶意行为。

Powered by 湖北铁皮保温施工_鑫诚防腐保温工程有限公司 RSS地图 HTML地图

Copyright Powered by365建站 © 2025-2034