iT邦幫忙

0

leetcode 365天 #Day106

  • 分享至 

  • xImage
  •  

從今年大概八月中開始,為了磨利自己的技術避免過於安逸就開始了刷題的生活,其中有經歷了鐵人的自我挑戰賽,但由於只有30天,當初就只有寫30天。
為什麼到了今天又突然要繼續呢?大概是因為無聊吧+紀錄寫過的題目。
基本上每天大概會寫四道題目兩題medium + 兩題easy,不好意思再度打擾各位啦~
除此之外,我也會開直播固定錄影紀錄,若有同好歡迎一同加入,要不然真的有點無聊XD
有任何指教或覺得我寫得不好的地方可以提出來唷,我認為練習的過程是需要批評的,特別是程式碼的部分

以下再次附上為什麼我會這樣做的原因吧。


學而不思則罔,思而不學則殆。

我曾經是一位軟體工程師,但由於受不了工作環境的煩悶,因此最終脫離了那個地方並邁入了教育的行業。

在這條路上遇到形形色色的學生,有極為附有天賦的學生,也有資質較為愚鈍的,但無論遇到的是誰對我而言所教授的東西並不會差異太大,這導致了一個現象----我的程式能力沒有絲毫進步,甚至退步了。這在現在的社會可不是好現象,不進步跟慢性死亡差不多。

因此,我想對自己開幾帖藥方:

  1. 建置Side Project:設置一個沒有做過但自己有興趣的專案,無論是對學生的談資,或者是在這過程中學習新知識,更甚者當成未來在求職用的東西都可以。
  2. 找課程學習並考取證照:個人對資安相關類的東西也負有興趣,除此之外這似乎也是全球各地都缺少的人才,無論如何都可以有活路走,而且也有相關的證照考試可以證明自己有學會其中的知識,但都有一定的時效性。
  3. 刷題目:透過題目去進行練習,回憶過往所學過或者所做過的東西,以及思考有沒有更快速的解題方法。
    後來這三帖藥方我選擇了第三種,為什麼呢?

我想主要還是我現在所面對的教學環境吧,一方面學生會想要練習一些與競程相關的題目,另一方面寫題目確實是一個可以知道自己基本功的方式之一。因此我選擇了leetcode當成我的起點,個人認為裡面的題目與競程的題目相比較為樸實無華,比較不會有花樣在,練習完這些題目後再去刷其他題目或許會比較適合。

當然身為一個教學者,部會單單只是練習題目還必須講解,因此接下來的幾天挑戰,除了寫上自己的練習題目以外,還會加上自己的見解與說明,盡可能讓大家明白裡面的內容。


  1. Print Immutable Linked List in Reverse (medium)
    https://leetcode.com/problems/print-immutable-linked-list-in-reverse/
    Submission: https://leetcode.com/submissions/detail/851278594/

題目提供了一個封閉的class,其資料格式與linkedlist相同,不過他只提供兩種API可以做使用,一個是printValue(),可以輸出目前node點的value值;一個是getNext(),可以到下一個node點。
最後要反著輸出該linkedlist。

# """
# This is the ImmutableListNode's API interface.
# You should not implement it, or speculate about its implementation.
# """
# class ImmutableListNode:
#     def printValue(self) -> None: # print the value of this node.
#     def getNext(self) -> 'ImmutableListNode': # return the next node.

class Solution:
    def printLinkedListInReverse(self, head: 'ImmutableListNode') -> None:
        numList = []
        while head:
            numList.insert(0,head)
            head = head.getNext()
        while numList:
            numList.pop(0).printValue()
    
    #參考別人的利用遞迴解
    def printLinkedListInReverse(self, head: 'ImmutableListNode') -> None:
        if (head.getNext() != None):
            self.printLinkedListInReverse(head.getNext())
        head.printValue()

  1. Number of Arithmetic Triplets (easy)
    https://leetcode.com/problems/number-of-arithmetic-triplets/
    Submission:https://leetcode.com/submissions/detail/851269535/
    他會提供三個索引值 i < j < k,以及一整數diff。找出nums串列裡面是否存在 nums[i] + diff == nums[j],nums[j]+diff == 3。
class Solution:
    #要找出有多少種 i ,j ,k可以達成 nums[j] - nums[i] == nums[k] - nums[j] == diff
    #長度200以內,基本上就是多重迴圈解,誒不是阿,單層就可以解
    #嚴格遞增的話不會有重複的數字
    
    #寫到一半想到不用這麼麻煩
    # def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
    #     numsDic = {}
    #     for i in range(nums):
    #         numsDic[nums[i]] = i
    #         if nums[i] + diff in numsDic and nums[i] + diff*2 in Dic:
    def arithmeticTriplets(self, nums: List[int], diff: int) -> int:
        ans = 0
        for i in nums:
            if i + diff in nums and i + 2*diff in nums:
                ans+=1
        return ans
                

  1. Merge Similar Items (easy)
    https://leetcode.com/problems/merge-similar-items/
    Submission:https://leetcode.com/submissions/detail/851263281/
    給予兩串列items1 and items2,items[i] = [value,weight],把value當key統計出所有value的weight為多少。
class Solution:
    def mergeSimilarItems(self, items1: List[List[int]], items2: List[List[int]]) -> List[List[int]]:
        recD = defaultdict(int)
        for i in items1:
            recD[i[0]] += i[1]
        for i in items2:
            recD[i[0]] += i[1]
        ans = sorted(recD.items())
        return ans

  1. Find Players With Zero or One Losses
    https://leetcode.com/problems/find-players-with-zero-or-one-losses/
    Submission:https://leetcode.com/submissions/detail/851256621/
    給一個串列matches,裡面含有多個串列,matches[i][0]代表贏的玩家,matches[i][1]代表輸的玩家,要統計出沒有輸過的玩家以及輸一場的玩家。
class Solution:
    #回傳一個串列,裡面包含兩個串列
    #第一個是全贏的
    #第二個是只輸一場的
    def findWinners(self, matches: List[List[int]]) -> List[List[int]]:
        recD = defaultdict(int)
        for i in matches:
            recD[i[0]] += 0
            recD[i[1]] += 1
        ans = [[],[]]
        for i,v in recD.items():
            if v == 1:
                ans[1].append(i)
            elif v == 0:
                ans[0].append(i)
        ans[1].sort()
        ans[0].sort()
        return ans

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言