2026年P(guān)ython程序員面試攻略及經(jīng)典算法題集_第1頁(yè)
2026年P(guān)ython程序員面試攻略及經(jīng)典算法題集_第2頁(yè)
2026年P(guān)ython程序員面試攻略及經(jīng)典算法題集_第3頁(yè)
2026年P(guān)ython程序員面試攻略及經(jīng)典算法題集_第4頁(yè)
2026年P(guān)ython程序員面試攻略及經(jīng)典算法題集_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2026年P(guān)ython程序員面試攻略及經(jīng)典算法題集一、編程基礎(chǔ)(共5題,每題6分)1.題目:請(qǐng)編寫(xiě)一個(gè)Python函數(shù),接受一個(gè)字符串作為輸入,返回該字符串中所有唯一字符的列表(不區(qū)分大小寫(xiě))。例如,輸入`"HelloWorld"`,輸出應(yīng)為`['H','e','l','o','W','r','d']`。2.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),檢查一個(gè)整數(shù)是否為完全平方數(shù)。例如,輸入`16`,返回`True`;輸入`14`,返回`False`。3.題目:請(qǐng)編寫(xiě)一個(gè)生成器函數(shù),接受一個(gè)正整數(shù)`n`,生成斐波那契數(shù)列的前`n`項(xiàng)。例如,輸入`5`,輸出應(yīng)為`0,1,1,2,3`。4.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),接受一個(gè)列表,返回一個(gè)新列表,其中包含原列表中所有奇數(shù)索引處的元素(索引從0開(kāi)始)。例如,輸入`[1,2,3,4,5,6]`,輸出應(yīng)為`[1,3,5]`。5.題目:請(qǐng)編寫(xiě)一個(gè)函數(shù),接受一個(gè)字符串,返回該字符串的所有子串(不包含空子串)的列表。例如,輸入`"abc"`,輸出應(yīng)為`['a','b','c','ab','bc','abc']`。二、數(shù)據(jù)結(jié)構(gòu)與算法(共8題,每題8分)1.題目:請(qǐng)實(shí)現(xiàn)一個(gè)`LRU緩存`(最近最少使用緩存)類,支持`get`和`put`操作。緩存容量為`capacity`,超出容量時(shí)需淘汰最久未使用的元素。例如:-初始化`LRUCache(2)`-`put(1,1)`→緩存是`{1=1}`-`put(2,2)`→緩存是`{1=1,2=2}`-`get(1)`→返回`1`-`put(3,3)`→去除鍵`2`,緩存是`{1=1,3=3}`-`get(2)`→返回`-1`(未找到)2.題目:請(qǐng)實(shí)現(xiàn)快速排序算法,對(duì)列表進(jìn)行升序排序。要求不使用內(nèi)置排序方法。3.題目:請(qǐng)編寫(xiě)一個(gè)函數(shù),判斷一個(gè)二叉樹(shù)是否對(duì)稱(即鏡像對(duì)稱)。例如:python定義二叉樹(shù)節(jié)點(diǎn)classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=right輸入:pythonroot=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(2)root.left.left=TreeNode(3)root.left.right=TreeNode(4)root.right.left=TreeNode(4)root.right.right=TreeNode(3)輸出:`True`4.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),找出數(shù)組中第三大的數(shù)。如果數(shù)組中少于三個(gè)數(shù),返回最大的數(shù)。例如:-輸入`[3,2,1,5,6,4]`,輸出`2`-輸入`[1,2]`,輸出`2`5.題目:請(qǐng)編寫(xiě)一個(gè)函數(shù),判斷一個(gè)鏈表是否有環(huán)。要求不使用額外空間。例如:python定義鏈表節(jié)點(diǎn)classListNode:def__init__(self,val=0,next=None):self.val=valself.next=next輸入:pythonhead=ListNode(3)head.next=ListNode(2)head.next.next=ListNode(0)head.next.next.next=ListNode(-4)head.next.next.next.next=head.next#創(chuàng)建環(huán)輸出:`True`6.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),將字符串轉(zhuǎn)換成整數(shù)(atoi)。忽略前導(dǎo)空格,處理正負(fù)號(hào),非數(shù)字字符停止解析。例如:-輸入`"-42"`,輸出`-42`-輸入`"4193withwords"`,輸出`4193`7.題目:請(qǐng)編寫(xiě)一個(gè)函數(shù),找出所有可能的括號(hào)組合(例如,`n=3`時(shí),輸出`["((()))","(()())","(())()","()(())","()()()"]`)。8.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),將一個(gè)非負(fù)整數(shù)`num`轉(zhuǎn)換成羅馬數(shù)字。例如:-輸入`3`,輸出`"III"`-輸入`58`,輸出`"LVIII"`三、系統(tǒng)設(shè)計(jì)(共3題,每題15分)1.題目:設(shè)計(jì)一個(gè)簡(jiǎn)單的消息隊(duì)列系統(tǒng),支持發(fā)布/訂閱模式和點(diǎn)對(duì)點(diǎn)模式。要求:-發(fā)布/訂閱模式:一個(gè)發(fā)布者發(fā)布消息,多個(gè)訂閱者接收消息。-點(diǎn)對(duì)點(diǎn)模式:一個(gè)生產(chǎn)者發(fā)送消息給一個(gè)消費(fèi)者。-支持消息持久化(簡(jiǎn)單實(shí)現(xiàn)即可,無(wú)需數(shù)據(jù)庫(kù))。2.題目:設(shè)計(jì)一個(gè)短鏈接生成服務(wù)。要求:-輸入一個(gè)長(zhǎng)鏈接,返回一個(gè)短鏈接(例如`/a1b2c3`)。-支持反向解析,輸入短鏈接返回原始長(zhǎng)鏈接。-需考慮唯一性和碰撞問(wèn)題。3.題目:設(shè)計(jì)一個(gè)簡(jiǎn)單的分布式鎖服務(wù)。要求:-支持多客戶端獲取鎖。-鎖具有超時(shí)機(jī)制。-支持鎖的釋放和續(xù)期。四、綜合應(yīng)用(共5題,每題10分)1.題目:請(qǐng)編寫(xiě)一個(gè)函數(shù),接受一個(gè)字符串列表,返回一個(gè)新列表,其中包含所有字符串的公共前綴。例如:-輸入`["flower","flow","flight"]`,輸出`"fl"`-輸入`["dog","racecar","car"]`,輸出`""`2.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),統(tǒng)計(jì)一個(gè)列表中每個(gè)元素的出現(xiàn)次數(shù),返回一個(gè)字典。例如:-輸入`[1,2,2,1,1,3]`,輸出`{1:3,2:2,3:1}`3.題目:請(qǐng)編寫(xiě)一個(gè)函數(shù),接受一個(gè)字符串,判斷是否是有效的括號(hào)組合(例如,`"()"`、`"()[]{}"`為有效,`"(]"`為無(wú)效)。要求使用棧實(shí)現(xiàn)。4.題目:請(qǐng)實(shí)現(xiàn)一個(gè)函數(shù),找出數(shù)組中重復(fù)次數(shù)超過(guò)`n/2`的元素。例如:-輸入`[3,2,3,1,3,3,5]`,輸出`3`5.題目:請(qǐng)編寫(xiě)一個(gè)函數(shù),將一個(gè)字符串轉(zhuǎn)換為整數(shù)(類似于`atoi`,但支持小數(shù)點(diǎn))。例如:-輸入`"3.14159"`,輸出`3.14159`-輸入`"-0.1e3"`,輸出`-100.0`答案與解析一、編程基礎(chǔ)1.答案:pythondefunique_chars(s):returnlist(set(s.lower())-set(''))解析:將字符串轉(zhuǎn)為小寫(xiě)并去重,排除空格。2.答案:pythondefis_perfect_square(n):ifn<0:returnFalseroot=int(n0.5)returnrootroot==n解析:計(jì)算平方根并判斷是否為整數(shù)。3.答案:pythondeffibonacci(n):a,b=0,1for_inrange(n):yieldaa,b=b,a+b解析:使用生成器實(shí)現(xiàn)斐波那契數(shù)列。4.答案:pythondefodd_index_elements(lst):returnlst[::2]解析:切片取奇數(shù)索引元素(從0開(kāi)始)。5.答案:pythondefall_substrings(s):substrings=[]foriinrange(len(s)):forjinrange(i+1,len(s)+1):substrings.append(s[i:j])returnsubstrings解析:雙重循環(huán)生成所有子串。二、數(shù)據(jù)結(jié)構(gòu)與算法1.答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:self.cache.pop(self.order.pop(0))self.cache[key]=valueself.order.append(key)解析:使用字典存儲(chǔ)鍵值對(duì),列表維護(hù)訪問(wèn)順序。2.答案:pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)解析:分治法實(shí)現(xiàn)快速排序。3.答案:pythondefis_symmetric(root):defis_mirror(t1,t2):ifnott1andnott2:returnTrueifnott1ornott2:returnFalsereturn(t1.val==t2.val)andis_mirror(t1.left,t2.right)andis_mirror(t1.right,t2.left)returnis_mirror(root,root)解析:遞歸判斷左右子樹(shù)是否鏡像對(duì)稱。4.答案:pythondefthird_largest(nums):first,second,third=float('-inf'),float('-inf'),float('-inf')fornuminnums:ifnum>first:first,second,third=num,first,secondeliffirst>num>second:second,third=num,secondelifsecond>num>third:third=numreturnthirdifthird!=float('-inf')elsefirst解析:遍歷數(shù)組,維護(hù)前三大的數(shù)。5.答案:pythondefhas_cycle(head):slow=fast=headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:returnTruereturnFalse解析:快慢指針判斷環(huán)。6.答案:pythondefmy_atoi(s):s=s.strip()ifnots:return0sign=1i=0ifs[0]=='-':sign=-1i=1elifs[0]=='+':i=1result=0whilei<len(s)ands[i].isdigit():digit=int(s[i])ifresult>(231-1)//10or(result==(231-1)//10anddigit>7):return-231ifsign==1else231-1result=result10+digiti+=1returnsignresult解析:處理符號(hào)、數(shù)字和溢出。7.答案:pythondefgenerate_parentheses(n):defbacktrack(s,left,right):iflen(s)==2n:res.append(s)returnifleft<n:backtrack(s+'(',left+1,right)ifright<left:backtrack(s+')',left,right+1)res=[]backtrack('',0,0)returnres解析:回溯法生成括號(hào)組合。8.答案:pythondefint_to_roman(num):val=[1000,900,500,400,100,90,50,40,10,9,5,4,1]syms=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]roman=''i=0whilenum>0:for_inrange(num//val[i]):roman+=syms[i]num-=val[i]i+=1returnroman解析:按羅馬數(shù)字符號(hào)從大到小匹配。三、系統(tǒng)設(shè)計(jì)1.答案:python發(fā)布/訂閱模式classPubSub:def__init__(self):self.subscribers={}defsubscribe(self,topic,callback):iftopicnotinself.subscribers:self.subscribers[topic]=[]self.subscribers[topic].append(callback)defpublish(self,topic,message):iftopicinself.subscribers:forcallbackinself.subscribers[topic]:callback(message)點(diǎn)對(duì)點(diǎn)模式classP2P:def__init__(self):self.conversations={}defsend(self,sender,receiver,message):if(sender,receiver)notinself.conversations:self.conversations[(sender,receiver)]=[]self.conversations[(sender,receiver)].append(message)defreceive(self,receiver):messages=[]for(sender,receiver),msg_listinself.conversations.items():ifreceiver==sender:messages.extend(msg_list)self.conversations[(sender,receiver)]=[]returnmessages解析:發(fā)布/訂閱使用字典存儲(chǔ)訂閱者;點(diǎn)對(duì)點(diǎn)使用雙向字典存儲(chǔ)對(duì)話。2.答案:pythonimporthashlibimportrandomclassShortLinkService:def__init__(self):self.base_url="/"self.alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"defencode(self,num):base=len(self.alphabet)encoded=""whilenum:encoded=self.alphabet[num%base]+encodednum//=basereturnencodeddefgenerate_short_link(self,long_url):hash_obj=hashlib.md5(long_url.encode())num=int(hash_obj.hexdigest(),16)short_code=self.encode(num)returnf"{self.base_url}{short_code}"defdecode_short_link(self,short_link):short_code=short_link.split('/')[-1]num=0forcharinshort_code:num=numlen(self.alphabet)+self.alphabet.index(char)hash_obj=hashlib.md5(str(num).encode())returnhash_obj.hexdigest()解析:使用MD5哈希長(zhǎng)鏈接,再編碼為短標(biāo)識(shí)符。3.答案:pythonimportthreadingimporttimeclassDistributedLock:def__init__(self):self.lock=threading.Lock()self.locked=Falseself.expiry=0defacquire(self,timeout=10):start_time=time.time()whileTrue:withself.lock:ifnotself.locked:self.locked=Trueself.expiry=start_time+timeoutreturnTrueiftime.time()>self.expiry:self.locked=Falsetime.sleep(0.1)iftime.time()-start_time>timeout:returnFalsedefrelease(self):withself.lock:self.locked=False解析:使用線程鎖實(shí)現(xiàn)分布式鎖,帶超時(shí)機(jī)制。四、綜合應(yīng)用1.答案:pythondeflongest_common_prefix(strs):ifnotstrs:return""prefix=strs[0]forsinstrs[1:]:whilenots.startswith(prefix):prefix=prefix[:-1]ifnotprefix:return""returnprefix解析:逐個(gè)比較字符串,縮短前綴直到匹配。2.答案:pythondefcount_elements(lst):returndict([(x,lst.count(x))forxinlst])解析:遍歷列表,統(tǒng)計(jì)每個(gè)元素

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論