從今年大概八月中開始,為了磨利自己的技術避免過於安逸就開始了刷題的生活,其中有經歷了鐵人的自我挑戰賽,但由於只有30天,當初就只有寫30天。
為什麼到了今天又突然要繼續呢?大概是因為無聊吧+紀錄寫過的題目。
基本上每天大概會寫四道題目兩題medium + 兩題easy,不好意思再度打擾各位啦~
除此之外,我也會開直播固定錄影紀錄,若有同好歡迎一同加入,要不然真的有點無聊XD
有任何指教或覺得我寫得不好的地方可以提出來唷,我認為練習的過程是需要批評的,特別是程式碼的部分
以下再次附上為什麼我會這樣做的原因吧。
學而不思則罔,思而不學則殆。
我曾經是一位軟體工程師,但由於受不了工作環境的煩悶,因此最終脫離了那個地方並邁入了教育的行業。
在這條路上遇到形形色色的學生,有極為附有天賦的學生,也有資質較為愚鈍的,但無論遇到的是誰對我而言所教授的東西並不會差異太大,這導致了一個現象----我的程式能力沒有絲毫進步,甚至退步了。這在現在的社會可不是好現象,不進步跟慢性死亡差不多。
因此,我想對自己開幾帖藥方:
我想主要還是我現在所面對的教學環境吧,一方面學生會想要練習一些與競程相關的題目,另一方面寫題目確實是一個可以知道自己基本功的方式之一。因此我選擇了leetcode當成我的起點,個人認為裡面的題目與競程的題目相比較為樸實無華,比較不會有花樣在,練習完這些題目後再去刷其他題目或許會比較適合。
當然身為一個教學者,部會單單只是練習題目還必須講解,因此接下來的幾天挑戰,除了寫上自己的練習題目以外,還會加上自己的見解與說明,盡可能讓大家明白裡面的內容。
題目提供了一個封閉的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()
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
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
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