首页 > 其他分享 >相同元素的间隔之和

相同元素的间隔之和

时间:2023-02-05 23:34:48浏览次数:41  
标签:map arr const 相同 res 间隔 元素 let sum

给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。

arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和 arr[j] 之间的间隔是 |i - j| 。

返回一个长度为 n 的数组 intervals ,其中 intervals[i] 是 arr[i] 和 arr 中每个相同元素(与 arr[i] 的值相同)的 间隔之和 。

注意:|x| 是 x 的绝对值。

/**
 * 以下三种方式时间复杂度不通过 题解没看懂
 */
const getDistances = (arr = [2, 1, 3, 1, 2, 3, 3]) => {
    arr.unshift(-1)
    const res = []
    const len = arr.length
    for (let i = 1; i < len; i++) {
        const v = arr[i]
        arr[i] = -1
        let index = 0
        let sum = 0
        while (index !== -1) {
            index = arr.indexOf(v, index + 1)
            if (index !== -1) {
                sum += Math.abs(i - index)
            }
        }
        res.push(sum)
        arr[i] = v
    }
    return res
};


const getDistances = (arr = [2, 1, 3, 1, 2, 3, 3]) => {
    const map = {}
    const len = arr.length
    const res = []
    arr.forEach((v, i) => {
        if (!map[v]) {
            map[v] = []
        }
        map[v].push(i)
    })
    for (let i = 0; i < len; i++) {
        const v = arr[i]
        let sum = 0
        for (let j = 0; j < map[v].length; j++) {
            if (i !== map[v][j]) {
                sum += Math.abs(i - map[v][j])
            }
        }
        res.push(sum)
    }
    return res
};

const getDistances = (arr = [2, 1, 3, 1, 2, 3, 3]) => {
    const map = {}
    const len = arr.length
    const res = []
    arr.forEach((v, i) => {
        if (!map[v]) {
            map[v] = []
        }
        map[v].push(i)
    })
    for (let i = 0; i < len; i++) {
        const v = arr[i]
        let sum = 0
        for (let j = 0; j < map[v].length; j++) {
            if (i !== map[v][j]) {
                sum += Math.abs(i - map[v][j])
            }
        }
        res.push(sum)
    }
    return res
};

  

标签:map,arr,const,相同,res,间隔,元素,let,sum
From: https://www.cnblogs.com/zhenjianyu/p/17094192.html

相关文章

  • JavaScript 中获取数组最后一个元素3种方法及性能
    当需要从JavaScript中的数组中获取最后一个元素时,有多种选择,本文将提供3种可用方法。1.数组length属性​​length​​属性返回数组中元素的数量。从数组的长度中减......
  • 多数元素
    给定一个大小为n的数组 nums,返回其中的多数元素。多数元素是指在数组中出现次数大于 ⌊n/2⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。......
  • selenium一旦切换焦点到别的窗口就会检测不到元素
    提问:selenium一旦切换焦点到别的窗口就会检测不到元素事情是这样,在用selenium做一些模拟点击的操作流程。XPATH元素都是正确的,能正常运行,也能检测到元素存在。但是运行的......
  • 算法刷题-移除元素、分数到小数、整数转罗马数字
    移除元素给你一个数组nums_和一个值val,你需要原地移除所有数值等于val_的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用O(1)额外空间并原......
  • 4.6链表使元素的追加和删除更容易
    在数组的各个元素中,除了数据的值之外,通过为其附带上下一个元素的索引,即可实现链表。数据的值和下一个元素的索引组合在一起,就构成了数组的一个元素。这样,数组元素相连就构......
  • HTML5 语义化元素
    本文我们要来介绍一个抽象的知识点-语义化。什么是语义化,浅显的来说就是使用合适的语法来实现相应的功能,这里说的合适并非是从性能、数据结构、算法等深度层面,而是从阅读和......
  • display:inline-block产生元素间空隙原理和解决方法
    写轮播图时偶遇一个排版问题,用inline-block会产生无法通过margin=0消除的空隙原理元素被当成行内元素排版的时候,元素之间的空白符(空格、回车换行等)都会被浏览器处......
  • 下一个更大元素II
    给定一个循环数组 nums ( nums[nums.length-1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的下一个更大元素。数字x 的下一个更大的元素是按数组遍历顺......
  • 下一个更大元素
    nums1 中数字 x 的下一个更大元素是指 x 在 nums2中对应位置右侧的第一个比 x 大的元素。给你两个没有重复元素的数组 nums1和 nums2,下标从0开始......
  • Python之字典删除元素(6种方式)
    文中代码smart_girl={"name":"yuanwai","age":25,"address":"Beijing"} 第一种方式:pop()方法注意:找不到对应的key,pop方法会抛出异常KeyErrorsmart_gi......