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
};