2808.使循环数组所有元素相等的最少秒数
链接:2808.使循环数组所有元素相等的最少秒数
难度:Medium
标签:数组、哈希表
简介:请你返回将数组 nums 中所有元素变成相等元素所需要的 最少 秒数。
题解 1 - 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()
    }
}
题解 2 - 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