Re: [闲聊] 每日LeetCode

楼主: ZooseWu (N5)   2023-11-19 12:36:24
1887. Reduction Operations to Make the Array Elements Equal
给你一个阵列
你要把所有元素变成相等
你只能做一种操作,操作步骤如下:
1.找到最大的数的其中一个
2.找到比除了最大数以外的次大的数
3.将刚才找到的数变成次大的数
求把所有元素便相等需要操作的次数
Input: nums = [5,1,3]
Output: 3
[5,1,3]->[3,1,3]->[1,1,3]->[1,1,1]
Input: nums = [1,1,1]
Output: 0
Input: nums = [1,1,2,2,3]
Output: 4
[1,1,2,2,3]->[1,1,2,2,2]->[1,1,1,2,2]->[1,1,1,1,2]->[1,1,1,1,1]
Intuition:
计算出出现的个数之后,累加起来。
Approach:
以[1,2,3,4]举例
一开始我们先处里[3,4] -> [3,3]
然后是[2,3,3] -> [2,2,2]
接下来是[1,2,2,2] -> [1,1,1,1]
从规律可以得知比1大的都要加一遍
接下来是比2大的都要加一遍
以此类推
所以我们只要一直累加起来就是答案
TS Code:
function reductionOperations (nums: number[]): number {
const counts: number[] = new Array(50001).fill(0)
for (let i = 0; i < nums.length; i++) {
counts[nums[i]]++
}
let leftAmount = nums.length
let answer = 0
for (let i = 0; i < counts.length; i++) {
if (counts[i] === 0) continue
leftAmount -= counts[i]
answer += leftAmount
}
return answer
}
作者: oin1104 (是oin的说)   2023-11-19 12:49:00
赞赞

Links booklink

Contact Us: admin [ a t ] ucptt.com