iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
自我挑戰組

leetcode 30天 不中斷解題挑戰系列 第 17

Day17 leetcode隨機挑題(Biweekly Contest 88)

  • 分享至 

  • xImage
  •  

首先是 2423. Remove Letter To Equalize Frequency(easy)
https://leetcode.com/problems/remove-letter-to-equalize-frequency/

給一個字串s,挑選一個字元刪除,剩下的字母個數必須相同。

老實說這題,我一直在思考有沒有更好的辦法。
最後還是靠暴力法

  1. 統計出所有字母個數
  2. 每一個都刪除一次看看,只要有符合就是True,到最後沒符合就是False

在寫Contest寫這題寫太久,導致後面寫的東西品質不是很好,果燃道行還不夠。

class Solution:
    def equalFrequency(self, word: str) -> bool:
        #得先知道個數
        wordC = Counter(word)
        #每個東西的個數都知道了
        print(wordC)
        temp = wordC.copy()
        for i in wordC:
            temp[i] -= 1
            if temp[i] == 0:
                del temp[i]
            if len(set(temp.values())) == 1:
                return 1
            if i not in temp:
                temp[i] = 0
            temp[i] += 1
        return 0
        

接著是 2424. Longest Uploaded Prefix (medium)

https://leetcode.com/problems/longest-uploaded-prefix/

寫出所有function應該有的寫法,老實說寫過一次,遇到類似的問題應該都能夠回答出來。

這題解釋頗麻煩,就用google翻譯

你會得到一個n影片流,每個影片都由一個不同的數字1表示n,你需要“上傳”到服務器。您需要實現一個數據結構,在上傳過程中的各個點計算最長上傳前綴的長度。
如果到(含)範圍內的所有視頻都已上傳到服務器,我們認為i是上傳前綴。最長上傳前綴是滿足此定義的最大值。

LUPrefix

LUPrefix(int n)為n影片流初始化對象。
void upload(int video)上傳video到服務器。
int longest()返回上面定義的最長上傳前綴的長度。

class LUPrefix:
    #我不想說話...........
    #被卡過一次就知道的題目
    save = []
    ans = 0
    
    def __init__(self, n: int):
        self.save = [0]*(n+1)


    def upload(self, video: int) -> None:
        self.save[video-1] = 1
        while self.save[self.ans] != 0:
            self.ans += 1
            
    def longest(self) -> int:
        return self.ans
     
# Your LUPrefix object will be instantiated and called as such:
# obj = LUPrefix(n)
# obj.upload(video)
# param_2 = obj.longest()

再來是 2425. Bitwise XOR of All Pairings (medium)
給予兩個整數串列num1、num2,把num1的每個數字跟num2的每個數字用xor計算一遍,得到一串列resultList。
再把resultList的每個數字用xor計算一遍,結束。

這題給懂得xor的人來算根本秒殺題,簡單來說因為要把所有的數字都xor,也就是num1的數字會被xor num2長度的次數,num2的數字會被xor num1長度的次數,最後再xor一起即可。

class Solution:
    def xorAllNums(self, nums1: List[int], nums2: List[int]) -> int:
        n1L = len(nums1)
        n2L = len(nums2)
        
        ans = 0
        for i in nums1:
            ans ^= i if n2L % 2 else 0
        for i in nums2:
            ans ^= i if n1L % 2 else 0
        return ans

(第四題沒寫出來QQ)
以上為本次的練習,感謝觀看


上一篇
Day16 leetcode隨機選題 (Dynamic Programing、Sliding Window)
下一篇
Day18 leetcode Weekly Contest 313
系列文
leetcode 30天 不中斷解題挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言