數(shù)據(jù)型網(wǎng)站 建設(shè)方案河北保定最新通知
鶴壁市浩天電氣有限公司
2026/01/24 14:09:47
數(shù)據(jù)型網(wǎng)站 建設(shè)方案,河北保定最新通知,wordpress 評(píng)論樣式,東莞營(yíng)銷(xiāo)網(wǎng)站建Day48_1211專(zhuān)注時(shí)間#xff1a;6H33min#xff0c;破紀(jì)錄了#xff0c;非常好每日任務(wù)#xff1a;1h二刷2道力扣hot100(如果是hard#xff0c;只做一道就好#xff0c;完成情況及時(shí)長(zhǎng)#xff1a;1.5)#xff1b;【學(xué)習(xí)資源#xff1a;PyTorch官方文檔#xff1a;http…Day48_1211專(zhuān)注時(shí)間6H33min破紀(jì)錄了非常好每日任務(wù)1h二刷2道力扣hot100(如果是hard只做一道就好完成情況及時(shí)長(zhǎng)1.5)【學(xué)習(xí)資源PyTorch官方文檔https://docs.pytorch.ac.cn/tutorials/beginner/basics/intro.html】1.5hPyTorch工程實(shí)操(完成情況及時(shí)長(zhǎng)40)1h周志華機(jī)器學(xué)習(xí)(完成情況及時(shí)長(zhǎng)0)【按照Claude的路線】1h手撕機(jī)器學(xué)習(xí)算法完成情況及時(shí)長(zhǎng)計(jì)算機(jī)網(wǎng)絡(luò)45分鐘完成情況及時(shí)長(zhǎng)學(xué)完機(jī)器學(xué)習(xí)然后是深度學(xué)習(xí)、搜廣推經(jīng)典模型也有很多要手撕的見(jiàn)Claude生成的。學(xué)完P(guān)yTorch之后是Transformer與大模型架構(gòu)見(jiàn)Gemini3pro生成的階段2。學(xué)快一點(diǎn)學(xué)完還要做搜廣推的實(shí)戰(zhàn)項(xiàng)目。準(zhǔn)備一個(gè)GitHub Repo把所有手撕過(guò)的算法整理進(jìn)去這會(huì)是最好的復(fù)習(xí)資料。必須熟記的API、最簡(jiǎn)潔的GPT實(shí)現(xiàn)、帶注釋的Transformer實(shí)現(xiàn)、推薦系統(tǒng)模型庫(kù)包含主流模型實(shí)現(xiàn)還有“Lets build GPT”系列學(xué)習(xí)視頻見(jiàn)Claude的第20頁(yè)。學(xué)習(xí)內(nèi)容 如上總結(jié)與心得算法題花太多時(shí)間了沒(méi)事已經(jīng)克服了成功做完完美吸收知識(shí)點(diǎn)繼續(xù)加油《138.隨機(jī)鏈表的復(fù)制》這個(gè)解法要注意恢復(fù)鏈表的語(yǔ)法邏輯見(jiàn)第三個(gè)while # Definition for a Node. class Node: def __init__(self, x, nextNone, randomNone): self.val int(x) self.next next self.random random class Solution(object): def copyRandomList(self, head): :type head: Node :rtype: Node #S3: 先創(chuàng)建A-copyA-B-copyB-null #然后再斷開(kāi)。這樣copy next就接上了但是random該怎么復(fù)制呢根據(jù)斷開(kāi)之前的數(shù)據(jù)結(jié)構(gòu)特性copy的random cur.random.next。那這樣是不是要遍歷三趟還真是 if not head: return head p head while p: cp Node(p.val) tmp p.next p.next cp cp.next tmp p p.next.next p head while p: if p.random is None: p.next.random None else: p.next.random p.random.next p p.next.next copy_head head.next p head while p: cp p.next p.next cp.next p p.next if p: cp.next p.next return copy_head哈希真是巧妙map{node2copynode} # Definition for a Node. class Node: def __init__(self, x, nextNone, randomNone): self.val int(x) self.next next self.random random class Solution(object): def copyRandomList(self, head): :type head: Node :rtype: Node #之前的想法是錯(cuò)誤的應(yīng)當(dāng)是第一趟存哈希map僅復(fù)制VAL第二趟再去復(fù)制next和random因?yàn)榈谝惶艘呀?jīng)建立了映射第二趟復(fù)制next,random時(shí)候就不會(huì)出現(xiàn)找不到的情況。核心還是map {原節(jié)點(diǎn)復(fù)制節(jié)點(diǎn)} if not head: return head node2copy_map {} p head while p: node2copy_map[p] Node(p.val) p p.next p head #當(dāng)遇到兩種場(chǎng)景時(shí)代碼會(huì)報(bào)錯(cuò) #原節(jié)點(diǎn)是鏈表最后一個(gè)節(jié)點(diǎn) → p.next None → node2copy_map[p.next] 等價(jià)于 node2copy_map[None] #但 None 不在哈希表中 #原節(jié)點(diǎn)的 random None → node2copy_map[p.random] 等價(jià)于 node2copy_map[None]同樣觸發(fā) KeyError。 #而你寫(xiě)的 if node2copy_map[p.next] else None 是先訪問(wèn) key 再判斷此時(shí)已經(jīng)觸發(fā) KeyError判斷邏輯根本沒(méi)機(jī)會(huì)執(zhí)行。 #字典的 dict.get(key, default) 方法是「安全訪問(wèn)」 #若 key 存在返回對(duì)應(yīng)值 #若 key 不存在返回 default這里設(shè)為 None while p: node2copy_map[p].next node2copy_map[p.next] if p.next else None node2copy_map[p].random node2copy_map.get(p.random,None) p p.next return node2copy_map[head]遞歸要自己去寫(xiě)邊寫(xiě)變想空想是很難寫(xiě)的我現(xiàn)在第二天再寫(xiě)一遍試試 # Definition for a Node. class Node: def __init__(self, x, nextNone, randomNone): self.val int(x) self.next next self.random random class Solution(object): def __init__(self): self.Node2copy_node {} def copyRandomList(self, head): :type head: Node :rtype: Node #S1如果兩趟遍歷第一趟不管random第二趟處理。那么怎么根據(jù)原來(lái)節(jié)點(diǎn)的random 去找復(fù)制節(jié)點(diǎn)該指向哪個(gè)random? #還需要繼續(xù)去思考兩趟遍歷的做法:原鏈表跳到random然后按next走直至next None這樣就定位了random。 #S2順序遍歷如果發(fā)現(xiàn)該節(jié)點(diǎn)的random節(jié)點(diǎn)還未被復(fù)制則先復(fù)制;*對(duì)于其next也是這樣* #其實(shí)應(yīng)當(dāng)想到遞歸發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)的next,random不存在則遞歸地創(chuàng)建相應(yīng)的節(jié)點(diǎn) #為什么我沒(méi)做出來(lái)想到了哈希但是用錯(cuò)了數(shù)據(jù)結(jié)構(gòu)不能用set否則找不到指向關(guān)系。 #應(yīng)該用map{原鏈表Node-copy_Node} 而不是原鏈表之間的映射。因?yàn)槲覀冎幌胫涝湵淼哪硞€(gè)節(jié)點(diǎn)是否已經(jīng)被復(fù)制 #S3A-Acopy-B-Bcopy-C-Ccopy-null #依舊是感覺(jué)邏輯和語(yǔ)句復(fù)雜無(wú)從下手 #S2怎么遞歸 #終止條件空節(jié)點(diǎn) if not head: return None #邊界條件已經(jīng)復(fù)制過(guò) if head in self.Node2copy_node: return self.Node2copy_node[head] copy Node(head.val) self.Node2copy_node[head] copy copy.next self.copyRandomList(head.next) copy.random self.copyRandomList(head.random) #會(huì)一直往深處走去復(fù)制鏈表。那么最終return copy就實(shí)現(xiàn)了“返回復(fù)制鏈表的頭結(jié)點(diǎn)” return copy3個(gè)關(guān)于歸并排序的題目。3個(gè)題都是模版《912.排序數(shù)組》class Solution(object): def sortArray(self, nums): :type nums: List[int] :rtype: List[int] def merge_sort(arr): if len(arr)1: return arr mid len(arr)//2 left merge_sort(arr[:mid]) right merge_sort(arr[mid:]) return merge(left,right) def merge(left,right): res [] l r 0 while llen(left) and rlen(right): if left[l]right[r]: res.append(left[l]) l1 else: res.append(right[r]) r1 resleft[l:] resright[r:] return res return merge_sort(nums)《148.排序鏈表》# Definition for singly-linked list. # class ListNode(object): # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution(object): def sortList(self, head): :type head: Optional[ListNode] :rtype: Optional[ListNode] def merge_sort(head,tail): if not head: return head #這里一定要把head和tail斷開(kāi) 不然會(huì)死循環(huán)。 if head.next tail: head.next None return head #找到鏈表中點(diǎn)把這個(gè)模版積累下來(lái) slow fast head while fast!tail: slow slow.next fast fast.next if fast ! tail: fast fast.next #slow就是中點(diǎn) mid slow return merge(merge_sort(head,mid),merge_sort(mid,tail)) def merge(head1,head2): #合并兩個(gè)有序鏈表 dummyhead ListNode(0) res dummyhead p,q head1,head2 #一定要記得去移動(dòng)res指針 while p and q: # 保證歸并排序的穩(wěn)定性 if p.val q.val: res.next p p p.next else: res.next q q q.next res res.next if p: res.next p else: res.next q return dummyhead.next return merge_sort(head,None)# Definition for singly-linked list. # class ListNode(object): # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution(object): def sortList(self, head): :type head: Optional[ListNode] :rtype: Optional[ListNode] n[] phead if not p or not p.next: return p while p: n.append(p.val) pp.next n.sort() nhListNode(n[0]) pnh for i in range(len(n)-1): p.nextListNode(n[i1]) pp.next return nh