版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2026年程序員面試攻略:代碼實現(xiàn)與算法設(shè)計問題解析一、鏈表操作題(共3題,每題10分)1.題目:實現(xiàn)一個功能,判斷一個鏈表是否存在環(huán)。如果存在環(huán),返回環(huán)的入口節(jié)點;如果不存在環(huán),返回`null`。鏈表節(jié)點定義如下:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next2.題目:給定一個鏈表,反轉(zhuǎn)鏈表并返回反轉(zhuǎn)后的頭節(jié)點。例如,輸入`1->2->3->4->5`,輸出`5->4->3->2->1`。3.題目:合并兩個有序鏈表,合并后的鏈表依然有序。例如,輸入鏈表1:`1->2->4`,鏈表2:`1->3->4`,輸出`1->1->2->3->4->4`。二、動態(tài)規(guī)劃題(共2題,每題15分)1.題目:給定一個字符串,找出其中不含有重復(fù)字符的最長子串的長度。例如,輸入`s="abcabcbb"`,輸出`3`(因為無重復(fù)的最長子串是`abc`)。2.題目:給你一個包含`n`個整數(shù)的數(shù)組`nums`,判斷數(shù)組中是否存在三個元素`a,b,c`,使得`a+b+c=0`?請找出所有滿足條件且不重復(fù)的三元組。例如,輸入`nums=[-1,0,1,2]`,輸出`[-1,0,1]`和`[-1,2,1]`。三、樹與二叉搜索樹(共2題,每題15分)1.題目:實現(xiàn)二叉樹的深度優(yōu)先遍歷(前序、中序、后序),并分別用遞歸和迭代的方式實現(xiàn)。二叉樹節(jié)點定義如下:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=right2.題目:給定一個二叉搜索樹,找出其中所有滿足條件的節(jié)點,使得這些節(jié)點的值之和等于給定目標值`target`。例如,輸入二叉搜索樹和`target=22`,輸出滿足條件的節(jié)點值組合。四、數(shù)組與矩陣操作題(共3題,每題10分)1.題目:給定一個二維數(shù)組`matrix`,原地旋轉(zhuǎn)90度。例如,輸入`matrix=[[1,2,3],[4,5,6],[7,8,9]]`,輸出`[[7,4,1],[8,5,2],[9,6,3]]`。2.題目:給定一個包含`n`個整數(shù)的數(shù)組,返回所有可能的子集。例如,輸入`nums=[1,2,3]`,輸出`[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]`。3.題目:給定一個包含`n`個整數(shù)的數(shù)組,找出其中和最大且不連續(xù)的子序列的和。例如,輸入`nums=[1,2,[3,1],3,1]`,輸出`6`(子序列`[3,1],3`)。五、貪心算法題(共2題,每題15分)1.題目:給定一個整數(shù)數(shù)組`coins`,表示不同面值的硬幣,以及一個整數(shù)`amount`,計算可以湊出`amount`的硬幣組合數(shù)。假設(shè)每種面值的硬幣數(shù)量無限。例如,輸入`coins=[1,2,5]`,`amount=5`,輸出`4`(組合`5`,`2+2+1`,`2+1+1+1`,`1+1+1+1+1`)。2.題目:給定一個非負整數(shù)數(shù)組`height`,表示每個位置的水桶的高度,計算可以接住的水的總量。例如,輸入`height=[1,8,6,2,5,4,8,3,7]`,輸出`49`(接住的總量為`[1,8,6,2,5,4,8,3,7]`中的最小值和相鄰位置差值的累加)。六、字符串處理題(共3題,每題10分)1.題目:實現(xiàn)一個函數(shù),判斷一個字符串是否是有效的括號組合。例如,輸入`"()"`,輸出`True`;輸入`"()[]{}"`,輸出`True`;輸入`"(]"`,輸出`False`。2.題目:給定一個字符串`s`,找到其中最長的回文子串。例如,輸入`s="babad"`,輸出`"bab"`或`"aba"`。3.題目:給定兩個字符串`s1`和`s2`,判斷`s2`是否可以通過對`s1`進行刪除某些字符得到。例如,輸入`s1="abcde"`,`s2="ace"`,輸出`True`。答案與解析一、鏈表操作題1.判斷鏈表是否存在環(huán)并返回入口節(jié)點:答案:使用快慢指針法(Floyd'sTortoiseandHare)??熘羔樏看巫邇刹?,慢指針每次走一步,如果存在環(huán),快慢指針最終會相遇;相遇后,將慢指針移到頭節(jié)點,快慢指針再次每次走一步,相遇點即為環(huán)的入口節(jié)點。pythondefdetectCycle(head):ifnotheadornothead.next:returnNoneslow,fast=head,headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:slow=headwhileslow!=fast:slow=slow.nextfast=fast.nextreturnslowreturnNone2.反轉(zhuǎn)鏈表:答案:使用迭代法,遍歷鏈表并逐個反轉(zhuǎn)節(jié)點指向。pythondefreverseList(head):prev,curr=None,headwhilecurr:next_node=curr.nextcurr.next=prevprev=currcurr=next_nodereturnprev3.合并兩個有序鏈表:答案:使用偽頭節(jié)點,同時遍歷兩個鏈表,按順序合并。pythondefmergeTwoLists(l1,l2):dummy=ListNode(0)curr=dummywhilel1andl2:ifl1.val<l2.val:curr.next=l1l1=l1.nextelse:curr.next=l2l2=l2.nextcurr=curr.nextcurr.next=l1orl2returndummy.next二、動態(tài)規(guī)劃題1.最長無重復(fù)子串:答案:使用滑動窗口法,記錄字符上一次出現(xiàn)的位置,動態(tài)調(diào)整窗口范圍。pythondeflengthOfLongestSubstring(s):char_map={}left=0max_len=0forrightinrange(len(s)):ifs[right]inchar_map:left=max(left,char_map[s[right]]+1)char_map[s[right]]=rightmax_len=max(max_len,right-left+1)returnmax_len2.三數(shù)之和:答案:先排序,然后使用雙指針法。pythondefthreeSum(nums):nums.sort()result=[]foriinrange(len(nums)-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,len(nums)-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==0:result.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<0:left+=1else:right-=1returnresult三、樹與二叉搜索樹1.二叉樹遍歷:前序遍歷(遞歸):pythondefpreorderTraversal(root):ifnotroot:return[]return[root.val]+preorderTraversal(root.left)+preorderTraversal(root.right)中序遍歷(遞歸):pythondefinorderTraversal(root):ifnotroot:return[]returninorderTraversal(root.left)+[root.val]+inorderTraversal(root.right)后序遍歷(遞歸):pythondefpostorderTraversal(root):ifnotroot:return[]returnpostorderTraversal(root.left)+postorderTraversal(root.right)+[root.val]前序遍歷(迭代):pythondefpreorderTraversalIterative(root):ifnotroot:return[]stack,result=[root],[]whilestack:node=stack.pop()result.append(node.val)ifnode.right:stack.append(node.right)ifnode.left:stack.append(node.left)returnresult2.二叉搜索樹中和為target的節(jié)點:答案:使用深度優(yōu)先搜索(DFS)遍歷樹,記錄路徑和,如果路徑和等于`target`,則記錄該路徑。pythondefpathSum(root,target):defdfs(node,path,target):ifnotnode:returnpath.append(node.val)current_sum=sum(path)ifcurrent_sum==target:result.append(path.copy())dfs(node.left,path,target)dfs(node.right,path,target)path.pop()result=[]dfs(root,[],target)returnresult四、數(shù)組與矩陣操作題1.旋轉(zhuǎn)二維矩陣:答案:先按層反轉(zhuǎn),再反轉(zhuǎn)每層。pythondefrotate(matrix):n=len(matrix)foriinrange(n//2):forjinrange(i,n-i-1):temp=matrix[i][j]matrix[i][j]=matrix[n-j-1][i]matrix[n-j-1][i]=matrix[n-i-1][n-j-1]matrix[n-i-1][n-j-1]=matrix[j][n-i-1]matrix[j][n-i-1]=temp2.全子集:答案:使用回溯法,遍歷所有可能的子集。pythondefsubsets(nums):result=[]subset=[]defbacktrack(index):result.append(subset.copy())foriinrange(index,len(nums)):subset.append(nums[i])backtrack(i+1)subset.pop()backtrack(0)returnresult3.最大不連續(xù)子序列和:答案:動態(tài)規(guī)劃,`dp[i]`表示以`nums[i]`結(jié)尾的最大不連續(xù)子序列和。pythondefmaxNonContiguousSubarraySum(nums):ifnotnums:return0dp=[0]len(nums)dp[0]=nums[0]foriinrange(1,len(nums)):dp[i]=max(dp[i-1],nums[i]+(dp[i-2]ifi>=2else0))returndp[-1]五、貪心算法題1.硬幣組合數(shù):答案:排序后,從大到小貪心選擇硬幣。pythondefcoinChange(coins,amount):coins.sort(reverse=True)count=0forcoinincoins:ifamount==0:breaknum=amount//coincount+=numamount-=numcoinreturncountifamount==0else-12.接雨水:答案:使用雙指針法,分別從左和從右遍歷,記錄左右兩側(cè)的最高水位。pythondeftrap(height):ifnotheight:return0left,right=0,len(height)-1left_max,right_max=height[left],height[right]result=0whileleft<right:ifheight[left]<height[right]:left+=1left_max=max(left_max,height[left])result+=left_max-height[left]else:right-=1right_max=max(right_max,height[right])result+=right_max-height[right]returnresult六、字符串處理題1.有效括號:答案:使用棧,遍歷字符串,遇到左括號入棧,遇到右括號彈出并判斷是否匹配。pythondefisValid(s):stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinm
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全培訓(xùn)計劃方案課件
- 紅金大氣寬屏獎杯背景的“新征程再出發(fā)”年會盛典暨工作總結(jié)大會
- 人工智能專業(yè)英語
- 安全生產(chǎn)舉措集講解
- 國外名著類主題模板1
- 稅務(wù)安全檢查方案講解
- 文旅直播銷售話術(shù)
- 護理部干事在護理團隊建設(shè)中的作用
- 機器人調(diào)試安全培訓(xùn)課件
- 機器人課件培訓(xùn)內(nèi)容
- 2026年面向社會招聘太湖縣政務(wù)服務(wù)中心綜合窗口工作人員的備考題庫及完整答案詳解一套
- 2025年【教導(dǎo)處】年度工作總結(jié):向課堂深處走向質(zhì)量高處行【課件】
- 2025年人保車險理賠試題及答案
- DB15∕T 4031-2025 建設(shè)項目水資源論證表編制導(dǎo)則
- 2025年合肥市檔案館公開招聘政府購買服務(wù)崗位人員2名備考考試試題及答案解析
- 計量課題立項申報書范文
- (2025版)成人肺功能檢查技術(shù)進展及臨床應(yīng)用指南課件
- 自動化設(shè)備維護保養(yǎng)指導(dǎo)手冊
- 飲用水法律法規(guī)培訓(xùn)課件
- 物料供應(yīng)商遴選制度
- 伊利并購澳優(yōu)的財務(wù)績效分析
評論
0/150
提交評論