简单 - 3396. 使数组元素互不相同所需的最少操作次数

62 阅读1分钟

Problem: 3396. 使数组元素互不相同所需的最少操作次数

思路

哈希表 倒序

解题过程

  • 要求数组中不能存在相同的元素,但是每次只能从开头移除
  • 1、简单模拟:正序遍历,记录出现过的元素,直到发现一个重复元素,从开头删除,一直删到这个重复元素,此过程中更新哈希表,重复上面步骤,直到结束。
  • 当最后一个重复数完成时,得出结果,关键是最后一个重复户数,这个重复数前所有数都应该被删除。
  • 2、优化--倒序:从后向前遍历,记录出现过元素,直到找到一个重复数。这个重复数就是最后一个,一直删到这里

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

Code

var minimumOperations = function(nums) {

    const arr = new Array(101).fill(0)

    for(let i = nums.length-1; i > -1; i--) {

        if(arr[nums[i]]) {

            return Math.ceil((i+1) / 3)

        }

        arr[nums[i]] = 1

    }

    return 0

};