题目
给你一个整数数组 nums
,你需要确保数组中的元素 互不相同 。为此,你可以执行以下操作任意次:
- 从数组的开头移除 3 个元素。如果数组中元素少于 3 个,则移除所有剩余元素。
**注意:**空数组也视作为数组元素互不相同。返回使数组元素互不相同所需的 最少操作次数 。
实现
思路:倒序遍历,找到离下标 0 最远位置的重复元素的下标 k,k/3
- 例如 ,最远重复元素是 3,下标是 6
- 那么把下标 6 之前的元素全部移除需要 2 次
复杂度分析
- 时间复杂度:
- 空间复杂度:
/**
* @param {string} s
* @return {string}
*/
var minimumOperations = function (nums) {
const n = nums.length;
const s = new Set();
let k = -1;
for (let i = n - 1; i >= 0; i--) {
if (s.has(nums[i])) {
k = i + 1;
break;
}
s.add(nums[i]);
}
return Math.ceil(k / 3);
};