跳到主要内容

2808.使循环数组所有元素相等的最少秒数

链接:2808.使循环数组所有元素相等的最少秒数
难度:Medium
标签:数组、哈希表
简介:请你返回将数组 nums 中所有元素变成相等元素所需要的 最少 秒数。

题解 1 - python

  • 编辑时间:2024-01-30
  • 执行用时:300ms
  • 内存消耗:48.3MB
  • 编程语言:python
  • 解法介绍:记录下标,判断下标之间的最大距离。
class Solution:
def minimumSeconds(self, nums: List[int]) -> int:
n = len(nums)
map = defaultdict(list)
for i in range(n):
map[nums[i]].append(i)
ans = inf
for arr in map.values():
cur = ceil((arr[0] + n - 1 - arr[-1]) / 2)
for i in range(1, len(arr)):
cur = max(cur, ceil((arr[i] - arr[i - 1] - 1) / 2))
ans = min(ans, cur)
return ans

题解 2 - rust

  • 编辑时间:2024-01-30
  • 执行用时:53ms
  • 内存消耗:13.54MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn minimum_seconds(nums: Vec<i32>) -> i32 {
let n = nums.len();
let mut map: std::collections::HashMap<i32, Vec<usize>> = Default::default();
for i in 0..n {
map.entry(nums[i]).or_default().push(i);
}
map.into_iter()
.map(|(_, arr)| {
let mut cur = ((arr[0] + n - 1 - arr.last().unwrap()) as f64 / 2.0).ceil() as i32;
for i in 1..arr.len() {
cur = cur.max((((arr[i] - arr[i - 1] - 1) as f64) / 2.0).ceil() as i32);
}
cur
})
.min()
.unwrap()
}
}