穆罕默德·S·安瓦爾(Mohammad S. Anwar)每週都會發出“每週挑戰”,這是我們所有人為每週兩項任務提出解決方案的機會。我的解決方案先用Python編寫,然後轉換為Perl。這對我們所有人來說都是練習編碼的好方法。
挑戰,我的解決方案
給定一個整數數組 @ints,其中除一個元素外,每個元素都出現多次。
寫一個腳本來找出只出現一次的一個元素。
本週的兩個挑戰都涉及整數的頻率。 Python 有 Counter 函數(來自集合模組),可以自動將事物清單轉換為頻率字典。對於 Perl 解決方案,我手動執行此操作。
一旦我填入了 freq 字典,我就會使用列表理解來找到僅出現一次的所有整數。這存儲在變數once_only中。如果列表中有一個值,我將返回它。否則我會提出適當的錯誤訊息。
def unique_number(ints: list) -> int: freq = Counter(ints) only_once = [i for i in freq if freq[i] == 1] if len(only_once) == 1: return only_once[0] if len(only_once) == 0: raise ValueError('No values only appear once') raise ValueError('More than one value appears once')
$ ./ch-1.py 3 3 1 1 $ ./ch-1.py 3 2 4 2 4 3 $ ./ch-1.py 1 1 $ ./ch-1.py 4 3 1 1 1 4 3
給你一個正整數數組,@ints。
編寫一個腳本,如果對於範圍0
與上一個任務一樣,我建立了名為 freq 的字典(Perl 中的雜湊)來儲存每個整數的頻率。然後,我仔細檢查清單以檢查每個值是否符合條件。
def digit_count_value(ints: list) -> bool: freq = Counter(ints) for idx, value in enumerate(ints): if freq[idx] != value: return False return True
$ ./ch-2.py 1 2 1 0 true $ ./ch-2.py 0 3 0 false
以上是每週挑戰的詳細內容。更多資訊請關注PHP中文網其他相關文章!