文章

補一個之前的Daily題解:Leetcode 2598

聊聊10/16的Leetcode daily題目

10/16號的Daily Question剛好寫的不差就放上來,可以先看題目
這題想法重點是這句話

applying the mentioned operation any number of times

可以像是化學上如果遇到極小量反應的時候全部反應到左邊之後再向右反應
.
不具體?
換個說法來說像是先用無數次機會變成0~(value-1),一個循環裡面加一個value就可以檢查。
記錄成0~(value)的數量,一個循環用掉一個,最小的會先被用完,所以要找最小值,再來判斷總共用幾個

Leetcode 2598(Medium) AC
Time: 2ms beats 89.87%
Memory: 119.95MB beats 94.55%

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
    int findSmallestInteger(vector<int>& nums, int value) {
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        int* cnt = new int[value];
        for(int i = 0; i < value; i++){
            cnt[i] = 0; // 初始化
        }
        for(int i = 0; i < nums.size(); i++){
            cnt[((nums[i]%value)+value)%value]++; // 先變小,+value要處理負數
        }
        int m = cnt[0], p = 0;
        for(int i = 1; i < value; i++){
            if(cnt[i] < m){
                p = i;
                m = cnt[i];
            }
        }
        return m*value+p;
    }
};
本文章以 CC BY 4.0 授權