2026/4/18 4:18:05
网站建设
项目流程
个人网站只能用作博客,怎样创建一个微信公众号,wordpress跳转自适应,网站备案主体变更题目链接#xff1a;3740. 三个相等元素之间的最小距离 I#xff08;简单#xff09;
3741. 三个相等元素之间的最小距离 II#xff08;中等#xff09; 算法原理#xff1a; 解法一#xff1a;暴力枚举#xff08;3740可通过#xff0c;但3741题会超时#xff09; …题目链接3740. 三个相等元素之间的最小距离 I简单3741. 三个相等元素之间的最小距离 II中等算法原理解法一暴力枚举3740可通过但3741题会超时8ms击败17.49%时间复杂度O(N³)思路很简单三层for循环依次枚举三个数如果符合条件就逐步更新最小距离解法二哈希表优化127ms击败46.39%时间复杂度O(N)①将数值和下标捆绑在一起存进哈希表键为数值值为链表代表前面数值的下标集合方便找到每个值的下标②遍历哈希表因为数值数值本身所以只需要遍历每个数值的下标列表然后计算最小距离即可③如果这个数的下标集合3说明它是可以计算最小距离作为返回值的④计算距离的时候可以简单些判断ii1i2三个下标分别设为x、y、z去掉绝对值后距离(y-x)(z-y)(z-x)2(z-x)2(index[i2]-index[i])Java代码class Solution { //解法一暴力枚举 public int minimumDistance(int[] nums) { int nnums.length; if(n3) return -1; int ret0x3f3f3f3f; for(int i0;in;i){ for(int ji1;jn;j){ for(int kj1;kn;k){ if(nums[i]nums[j]nums[j]nums[k]) retMath.min(ret,Math.abs(i-j) Math.abs(j-k)Math.abs(k-i)); } } } return ret0x3f3f3f3f?-1:ret; } }class Solution { //解法二哈希表优化 public int minimumDistance(int[] nums) { int nnums.length; if(n3) return -1; int ret0x3f3f3f3f; //利用哈希表优化 HashMapInteger,ListInteger hashnew HashMap(); //统计每个数值的所有下标 for(int i0;in;i){ ListInteger indexhash.getOrDefault(nums[i],new ArrayList()); index.add(i); hash.put(nums[i],index); } //遍历每个数值的下标列表计算最小距离 for(Map.EntryInteger,ListInteger entry:hash.entrySet()){ ListInteger indexentry.getValue(); int lenindex.size(); if(len3){ for(int i0;ilen-3;i){ int distindex.get(i2)-index.get(i); //此处是去掉绝对值之后相加得到的简化2*(i2的位置-i的位置) if(2*distret) ret2*dist; } } } return ret0x3f3f3f3f?-1:ret; } }