版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2026年實戰(zhàn)編程寶典:算法面試現(xiàn)場寫代碼指南一、數(shù)組與字符串(共5題,每題8分)1.題目:給定一個整數(shù)數(shù)組`nums`和一個目標(biāo)值`target`,請找出數(shù)組中和為目標(biāo)值的三元組數(shù)量。示例:輸入:`nums=[1,2,3,4,5]`,`target=9`輸出:`3`(三元組為(1,3,5),(2,3,4),(1,4,4))2.題目:請實現(xiàn)一個函數(shù)`replaceSpaces`,將字符串中的所有空格替換為`%20`。示例:輸入:`s="Wearehappy."`輸出:`"We%20are%20happy."`3.題目:給定一個字符串`s`,請判斷其是否為有效的括號字符串(只包含`()`、`[]`、`{}`,且括號正確匹配)。示例:輸入:`s="{[]()}"`輸出:`true`4.題目:請實現(xiàn)一個函數(shù)`longestSubstring`,返回字符串中不包含重復(fù)字符的最長子串長度。示例:輸入:`s="abcabcbb"`輸出:`3`(最長子串為"abc")5.題目:給定一個整數(shù)數(shù)組`nums`,請返回數(shù)組中乘積最大的三個數(shù)的乘積。示例:輸入:`nums=[1,2,3,4]`輸出:`24`(最大乘積為342)二、鏈表(共4題,每題10分)1.題目:請實現(xiàn)一個函數(shù)`reverseList`,反轉(zhuǎn)一個單鏈表。示例:輸入:`1->2->3->4`輸出:`4->3->2->1`2.題目:給定兩個單鏈表`l1`和`l2`,請合并它們?yōu)橐粋€新的單鏈表,合并后的鏈表按升序排列。示例:輸入:`l1=1->4->5`,`l2=1->3->4`輸出:`1->1->3->4->4->5`3.題目:請判斷一個鏈表是否存在環(huán),并返回環(huán)的入口節(jié)點。示例:輸入:`1->2->3->4->2`(存在環(huán),環(huán)從節(jié)點2開始)輸出:`2`4.題目:給定一個單鏈表`head`,請刪除鏈表中的節(jié)點`val`,假設(shè)鏈表中所有值唯一。示例:輸入:`head=1->2->3->4`,`val=3`輸出:`1->2->4`三、樹與二叉搜索樹(共4題,每題10分)1.題目:請實現(xiàn)一個函數(shù)`inorderTraversal`,非遞歸遍歷二叉樹的中序遍歷。示例:輸入:`root=[1,null,2,3]`(二叉樹結(jié)構(gòu)為1->null->2->3)輸出:`[1,3,2]`2.題目:給定一個二叉搜索樹`root`,請查找其中值最接近`target`的節(jié)點,并返回其值。示例:輸入:`root=[4,2,5,1,3]`,`target=3.714286`輸出:`4`3.題目:請實現(xiàn)一個函數(shù)`insertIntoBST`,將一個值插入到二叉搜索樹中,并返回插入后的樹根。示例:輸入:`root=[4,2,7,1,3]`,`val=5`輸出:`[4,2,7,1,3,null,null,null,null,null,5]`4.題目:給定一個二叉樹`root`,請判斷其是否為平衡二叉樹(左右子樹高度差不超過1)。示例:輸入:`root=[3,9,20,null,null,15,7]`輸出:`true`四、動態(tài)規(guī)劃(共4題,每題12分)1.題目:給定一個數(shù)組`nums`,請返回其中最長的上升子序列的長度。示例:輸入:`nums=[10,9,2,5,3,7,101,18]`輸出:`4`(最長上升子序列為[2,3,7,101])2.題目:給定一個整數(shù)`n`,請計算`n`的不同子集的數(shù)量。示例:輸入:`n=5`輸出:`32`3.題目:給定一個字符串`s`,請返回其中不同字母排列組合的數(shù)量。示例:輸入:`s="abc"`輸出:`6`(排列組合為"abc","acb","bac","bca","cab","cba")4.題目:給定一個整數(shù)`k`和一個數(shù)組`prices`,請計算最多進(jìn)行`k`次交易(每次交易必須買入再賣出)的最大利潤。示例:輸入:`prices=[1,2,4,5,2,9]`,`k=2`輸出:`13`(第一次交易買入1賣出5,第二次交易買入2賣出9)五、堆與優(yōu)先隊列(共3題,每題10分)1.題目:請實現(xiàn)一個函數(shù)`topKFrequent`,返回數(shù)組中出現(xiàn)頻率最高的`k`個元素。示例:輸入:`nums=[1,1,1,2,2,3]`,`k=2`輸出:`[1,2]`2.題目:請實現(xiàn)一個函數(shù)`mergeKLists`,合并`k`個排序鏈表,返回合并后的頭節(jié)點。示例:輸入:`lists=[[1,4,5],[1,3,4],[2,6]]`輸出:`1->1->2->3->4->4->5->6`3.題目:給定一個整數(shù)數(shù)組`nums`,請返回其中第`k`大的元素。示例:輸入:`nums=[3,2,1,5,6,4]`,`k=2`輸出:`5`六、圖與廣度優(yōu)先搜索(共3題,每題12分)1.題目:給定一個無向圖`graph`(鄰接表形式),請判斷其是否為二分圖(可以用兩種顏色染色,相鄰節(jié)點顏色不同)。示例:輸入:`graph=[[1,3],[0,2],[1,3],[0,2]]`輸出:`true`2.題目:給定一個`mxn`的網(wǎng)格`grid`,請返回從左上角到右下角的最短路徑長度(只能向下或向右移動)。示例:輸入:`grid=[[0,0,0],[0,1,0],[0,0,0]]`輸出:`2`3.題目:給定一個無向圖`graph`(鄰接表形式),請返回所有節(jié)點的最短路徑長度(從節(jié)點0開始)。示例:輸入:`graph=[[1,2],[0,3],[0,3],[1,2]]`輸出:`[0,1,1,2]`答案與解析一、數(shù)組與字符串1.答案:pythondefthreeSum(nums,target):nums.sort()n=len(nums)count=0foriinrange(n):left,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:count+=1left+=1right-=1eliftotal<target:left+=1else:right-=1returncount解析:先排序,然后固定一個數(shù),用雙指針遍歷剩下的兩個數(shù),如果和等于目標(biāo)值則計數(shù),并移動指針避免重復(fù)。2.答案:pythondefreplaceSpaces(s):returns.replace('','%20')解析:直接使用字符串的`replace`方法將空格替換為`%20`。3.答案:pythondefisValid(s):stack=[]mapping={'(':')','[':']','{':'}'}forcharins:ifcharinmapping:stack.append(char)else:ifnotstackormapping[stack.pop()]!=char:returnFalsereturnnotstack解析:用棧存儲左括號,遇到右括號時檢查是否匹配,若不匹配則返回`false`。4.答案:pythondeflongestSubstring(s):char_set=set()left=0max_len=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_len解析:滑動窗口,左指針右移時刪除重復(fù)字符,右指針右移時添加字符,更新最大長度。5.答案:pythondefmaximumProduct(nums):nums.sort()n=len(nums)returnmax(nums[0]nums[1]nums[-1],nums[-1]nums[-2]nums[-3])解析:最大乘積可能來自前兩個最小數(shù)和最大數(shù),或后三個最大數(shù),取兩者最大值。二、鏈表1.答案:pythondefreverseList(head):prev=Nonecurrent=headwhilecurrent:next_node=current.nextcurrent.next=prevprev=currentcurrent=next_nodereturnprev解析:迭代反轉(zhuǎn)鏈表,依次將節(jié)點指向前一個節(jié)點。2.答案:pythondefmergeTwoLists(l1,l2):dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextcurrent.next=l1orl2returndummy.next解析:合并兩個有序鏈表,依次比較節(jié)點值,將較小節(jié)點連接到結(jié)果鏈表。3.答案:pythondefdetectCycle(head):slow,fast=head,headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:slow=headwhileslow!=fast:slow=slow.nextfast=fast.nextreturnslowreturnNone解析:快慢指針判斷環(huán),若相遇則找到環(huán)的入口。4.答案:pythondefdeleteNode(head,val):dummy=ListNode(0)dummy.next=headcurrent=dummywhilecurrent.nextandcurrent.next.val!=val:current=current.nextifcurrent.next:current.next=current.next.nextreturndummy.next解析:用虛擬頭節(jié)點處理頭節(jié)點刪除的情況,然后查找并刪除指定節(jié)點。三、樹與二叉搜索樹1.答案:pythondefinorderTraversal(root):stack,res=[],[]current=rootwhilecurrentorstack:whilecurrent:stack.append(current)current=current.leftcurrent=stack.pop()res.append(current.val)current=current.rightreturnres解析:非遞歸中序遍歷,用棧記錄節(jié)點,先遍歷左子樹,再訪問節(jié)點,最后遍歷右子樹。2.答案:pythondefclosestValue(root,target):closest=root.valcurrent=rootwhilecurrent:ifabs(current.val-target)<abs(closest-target):closest=current.valiftarget<current.val:current=current.lefteliftarget>current.val:current=current.rightelse:breakreturnclosest解析:在BST中,根據(jù)目標(biāo)值與節(jié)點值的比較方向選擇子樹,同時更新最接近值。3.答案:pythondefinsertIntoBST(root,val):ifnotroot:returnTreeNode(val)ifval<root.val:root.left=insertIntoBST(root.left,val)else:root.right=insertIntoBST(root.right,val)returnroot解析:遞歸插入,根據(jù)值與當(dāng)前節(jié)點比較方向選擇子樹,直到找到空位置插入。4.答案:pythondefisBalanced(root):defcheck(node):ifnotnode:return0,Trueleft_height,left_balanced=check(node.left)right_height,right_balanced=check(node.right)returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)<=1returncheck(root)[1]解析:后序遍歷檢查每個節(jié)點的高度,同時判斷左右子樹是否平衡。四、動態(tài)規(guī)劃1.答案:pythondeflengthOfLIS(nums):dp=[1]len(nums)foriinrange(1,len(nums)):forjinrange(i):ifnums[i]>nums[j]:dp[i]=max(dp[i],dp[j]+1)returnmax(dp)解析:DP數(shù)組記錄以每個位置結(jié)尾的最長上升子序列長度,遍歷更新。2.答案:pythondefsubsetsCount(n):return1<<n#2^n解析:每個節(jié)點有選或不選兩種選擇,總子集數(shù)量為2^n。3.答案:pythondefpermutationCount(s):frommathimportfactorialcounter={}forcharins:counter[char]=counter.get(char,0)+1result=factorial(len(s))forvincounter.values():result//=factorial(v)returnresult解析:用排列組合公式計算,考慮重復(fù)字母的排列數(shù)。4.答案:pythondefmaxProfit(prices,k):ifnotpricesork==0:return0dp=[[0](k+1)for_inrange(2)]for_inrange(k):dp[1][_]=-prices[0]foriinrange(1,len(prices)):dp[i%2][0]=0forjinrange(1,k+1):dp[i%2][j]=max(dp[(i-1)%2][j],dp[(i-1)%2][j-1]+prices[i])returndp[(len(prices)-1)%2][k]解析:狀態(tài)轉(zhuǎn)移方程,用滾動數(shù)組優(yōu)化空間,記錄第i天第j次交易的最大利潤。五、堆與優(yōu)先隊列1.答案:pythondeftopKFrequent(nums,k):fromcollectionsimportCountercount=Counter(nums)heap=[]fornum,freqincount.items():heapq.heappush(heap,(-freq,num))iflen(heap)>k:heapq.heappop(heap)return[numfor_,numinheap]解析:用最小堆維護(hù)前k個高頻元素,堆大小限制為k。2.答案:pythondefmergeKLists(lists):min_heap=[]fori,headinenumerate(lists):ifhead:heapq.heappush(min_heap,(head.val,i,head))dummy=ListNode(0)current=dummywhilemin_heap:_,i,node=heapq.heappop(min_heap)current.next=nodecurrent=current.nextifnode.next:heapq.heappush(min_heap,(node.next.val,i,node.next))returndummy.next解析:用最小堆維護(hù)k個鏈表頭部,每次彈出最小節(jié)點并推進(jìn)下一個節(jié)點。3.答案:pythondeffindKthLargest(nums,k):importheapqreturnheapq.nlargest(k,nums)[-1]解析:用`nlargest`獲取前k大元素,取最后一個即為第k大。六、圖與廣度優(yōu)先搜索1.答案:pythondefisBipartite(graph):color={}fornodeinrange(len(graph)):ifnodenotincolor:color[node]=0queue=[node]whilequeue:current=queue.pop(0)forneighboringraph[current]:ifneighborincolor:ifcolor[neighbor]==color[current]:returnFalseelse:color[neighbor]=1-color[current]queue.append(neighbor)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鵝口瘡的日常護(hù)理實踐
- 城管協(xié)管考試題及答案
- 自考審計準(zhǔn)則試題及答案
- 乘警執(zhí)法規(guī)定解讀
- 2025-2026人教版一年級語文上期末卷
- 2025-2026一年級體育上學(xué)期試卷
- 衛(wèi)生院工程建設(shè)制度
- 衛(wèi)生學(xué)校誰管理制度
- 家屬區(qū)衛(wèi)生責(zé)任制度
- 劃分衛(wèi)生責(zé)任區(qū)制度
- 北京市順義區(qū)2025-2026學(xué)年八年級上學(xué)期期末考試英語試題(原卷版+解析版)
- 中學(xué)生冬季防溺水主題安全教育宣傳活動
- 2026年藥廠安全生產(chǎn)知識培訓(xùn)試題(達(dá)標(biāo)題)
- 初中九年級上一元二次方程計算練習(xí)題及答案詳解B2
- 冷庫防護(hù)制度規(guī)范
- 廣東省廣州市番禺區(qū)2026屆高一數(shù)學(xué)第一學(xué)期期末聯(lián)考試題含解析
- 2026年廣東省佛山市高三語文聯(lián)合診斷性考試作文題及3篇范文:可以“重讀”甚至“重構(gòu)”這些過往
- 2025年汽車駕駛員技師考試試題及答案含答案
- 觀看煤礦警示教育片寫心得體會
- 2025年國際中文教師證書考試真題附答案
- 濕地保護(hù)法宣傳解讀課件
評論
0/150
提交評論