Leetcode 2453. Destroy Sequential Targets | rust 實現

azoux發表於2024-09-11

題解

問題描述

給定一個整數陣列 nums 和一個整數 space,我們需要找到一個目標值,使得該目標值在 nums 中的出現次數最多。如果有多個目標值出現次數相同,則返回最小的目標值。

解題思路

  1. 雜湊表統計:使用雜湊表 map 來統計每個 seed % space 的出現次數,題幹中給出的等式等價為 nums[n] = nums[i] + c * space,在我們知道nums[n]的前提下,可以透過nums[n]對space取餘,來得到nums[i],c是常數,不考慮。這個過程相當於是對題乾等式的逆推。
  2. 遍歷陣列:再次遍歷 nums,根據雜湊表中的統計資訊來確定出現次數最多的目標值,注意這裡的key是 seed % space
  3. 更新結果:在遍歷過程中,維護一個 max 變數來記錄當前最大出現次數,並更新 result 為對應的目標值。

程式碼實現

/*
 * @lc app=leetcode id=2453 lang=rust
 *
 * [2453] Destroy Sequential Targets
 */

// @lc code=startuse std::collections::HashMap;
impl Solution {
    pub fn destroy_targets(nums: Vec<i32>, space: i32) -> i32 {
        use std::collections::HashMap;
    
        let mut map: HashMap<i32, i32> = HashMap::new();
        for &seed in &nums {
            let key = seed % space;
            *map.entry(key).or_insert(0) += 1;
        }
    
        let mut max = 0;
        let mut result = i32::MAX;
        for &seed in &nums {
            match map.get(&(seed % space)) {
                Some(&num) => {
                    if num > max {
                        result = seed;
                        max = num;
                    } else if num == max && seed < result {
                        result = seed;
                    }
                },
                None => {}
            }
        }
    
        return result;
    }
}
// @lc code=end

程式碼中使用了 Rust 的標準庫 HashMap 來實現雜湊表,確保了高效的查詢和插入操作。透過兩次遍歷,時間複雜度為 O(n),空間複雜度為 O(k),其中 n 是陣列長度,k 是不同的 seed % space 值的數量

相關文章