互聯(lián)網(wǎng)公司算法工程師面試問題及答案_第1頁
互聯(lián)網(wǎng)公司算法工程師面試問題及答案_第2頁
互聯(lián)網(wǎng)公司算法工程師面試問題及答案_第3頁
互聯(lián)網(wǎng)公司算法工程師面試問題及答案_第4頁
互聯(lián)網(wǎng)公司算法工程師面試問題及答案_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年互聯(lián)網(wǎng)公司算法工程師面試問題及答案一、編程基礎(chǔ)(共5題,每題10分,總分50分)1.題目:請實現(xiàn)一個函數(shù),輸入一個非負整數(shù)n,返回它的二進制表示中1的個數(shù)。例如,輸入5,返回2,因為5的二進制表示為101。答案:pythondefcount_bits(n):count=0whilen:count+=n&1n>>=1returncount解析:通過位運算,每次將n右移一位,并統(tǒng)計最低位的1的個數(shù),直到n為0。2.題目:請實現(xiàn)一個函數(shù),輸入一個字符串s,返回s的子串中不包含重復字符的最長子串的長度。例如,輸入"abcabcbb",返回3,因為"abc"是長度最長的無重復字符子串。答案:pythondeflength_of_longest_substring(s):char_set=set()left=0max_length=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_length=max(max_length,right-left+1)returnmax_length解析:使用滑動窗口技術(shù),左指針和右指針分別表示當前子串的左右邊界,通過維護一個集合記錄當前子串中的字符,當遇到重復字符時,移動左指針并更新最大長度。3.題目:請實現(xiàn)一個函數(shù),輸入一個鏈表的頭節(jié)點head,返回鏈表的中間節(jié)點。如果鏈表中有兩個中間節(jié)點,返回第二個中間節(jié)點。例如,輸入1->2->3->4->5,返回3;輸入1->2->3->4->5->6,返回4。答案:pythondefmiddle_node(head):slow=fast=headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextreturnslow解析:使用快慢指針法,快指針每次移動兩步,慢指針每次移動一步,當快指針到達鏈表末尾時,慢指針正好在中間位置。4.題目:請實現(xiàn)一個函數(shù),輸入一個正整數(shù)n,判斷它是否是偶數(shù)。如果是,返回True;否則,返回False。答案:pythondefis_even(n):returnn%2==0解析:通過取模運算判斷n是否能被2整除,如果能,則是偶數(shù);否則,是奇數(shù)。5.題目:請實現(xiàn)一個函數(shù),輸入一個字符串s,返回s的翻轉(zhuǎn)。例如,輸入"hello",返回"olleh"。答案:pythondefreverse_string(s):returns[::-1]解析:使用Python的切片操作,`s[::-1]`表示從后往前逐個字符取值,實現(xiàn)字符串翻轉(zhuǎn)。二、數(shù)據(jù)結(jié)構(gòu)與算法(共5題,每題10分,總分50分)1.題目:請實現(xiàn)一個函數(shù),輸入一個非空數(shù)組nums和一個目標值target,返回數(shù)組中和為target的三個數(shù)的組合。例如,輸入nums=[-1,0,1,2],target=0,返回[[-1,0,1]]。答案:pythondefthree_sum(nums,target):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==target:result.append([nums[i],nums[left],nums[right]])left+=1right-=1whileleft<rightandnums[left]==nums[left-1]:left+=1whileleft<rightandnums[right]==nums[right+1]:right-=1eliftotal<target:left+=1else:right-=1returnresult解析:先對數(shù)組排序,然后使用雙指針法,固定一個數(shù),另兩個數(shù)通過雙指針查找,確保不重復。2.題目:請實現(xiàn)一個函數(shù),輸入一個非空鏈表,返回鏈表的反轉(zhuǎn)。例如,輸入1->2->3->4->5,返回5->4->3->2->1。答案:pythondefreverse_linked_list(head):prev=Nonecurrent=headwhilecurrent:next_node=current.nextcurrent.next=prevprev=currentcurrent=next_nodereturnprev解析:使用迭代法反轉(zhuǎn)鏈表,維護三個指針:prev、current和next_node,逐個反轉(zhuǎn)節(jié)點。3.題目:請實現(xiàn)一個函數(shù),輸入一個非空數(shù)組nums,返回數(shù)組中的眾數(shù)。眾數(shù)是指在數(shù)組中出現(xiàn)次數(shù)最多的元素。例如,輸入[3,2,3],返回[3]。答案:pythondefmajority_element(nums):count=0candidate=Nonefornuminnums:ifcount==0:candidate=numcount+=(1ifnum==candidateelse-1)returncandidate解析:使用Boyer-Moore投票算法,維護一個候選者和計數(shù)器,遍歷數(shù)組時更新候選者和計數(shù)器。4.題目:請實現(xiàn)一個函數(shù),輸入一個字符串s,返回s的字典序排列。例如,輸入"cba",返回"abc"。答案:pythondefsorted_string(s):return''.join(sorted(s))解析:使用Python的內(nèi)置排序函數(shù),對字符串進行排序并拼接。5.題目:請實現(xiàn)一個函數(shù),輸入一個非空數(shù)組nums,返回數(shù)組中的最大子數(shù)組和。例如,輸入[-2,1,-3,4,-1,2,1,-5,4],返回6,因為子數(shù)組[4,-1,2,1]的和最大。答案:pythondefmax_subarray(nums):max_sum=current_sum=nums[0]fornuminnums[1:]:current_sum=max(num,current_sum+num)max_sum=max(max_sum,current_sum)returnmax_sum解析:使用Kadane算法,維護兩個變量:current_sum和max_sum,當前子數(shù)組和最大子數(shù)組和。三、系統(tǒng)設計(共5題,每題10分,總分50分)1.題目:請設計一個簡單的URL短鏈接系統(tǒng),要求能夠?qū)㈤LURL轉(zhuǎn)換為短URL,并能夠?qū)⒍蘒RL解析回長URL。答案:-數(shù)據(jù)結(jié)構(gòu):使用哈希表存儲長URL和短URL的映射關(guān)系。-算法:將長URL通過哈希函數(shù)生成短URL,短URL可以是隨機生成的字符串。-偽代碼:pythonclassURLShortener:def__init__(self):self.url_map={}self.base_url="http://short.url/"defshorten(self,long_url):short_key=self._generate_short_key()self.url_map[short_key]=long_urlreturnself.base_url+short_keydefrestore(self,short_url):short_key=short_url.split('/')[-1]returnself.url_map.get(short_key,None)def_generate_short_key(self):importuuidreturnstr(uuid.uuid4())解析:使用哈希表存儲長URL和短URL的映射關(guān)系,通過隨機生成的字符串作為短URL,確保唯一性。2.題目:請設計一個簡單的微博系統(tǒng),要求支持用戶發(fā)布微博、關(guān)注用戶、查看關(guān)注用戶的微博。答案:-數(shù)據(jù)結(jié)構(gòu):使用哈希表存儲用戶信息,使用圖結(jié)構(gòu)存儲關(guān)注關(guān)系。-算法:用戶發(fā)布微博時,將微博存入數(shù)據(jù)庫,并更新用戶的微博列表;關(guān)注用戶時,更新用戶和被關(guān)注用戶的關(guān)注關(guān)系;查看關(guān)注用戶的微博時,遍歷關(guān)注關(guān)系并獲取微博。-偽代碼:pythonclassWeiboSystem:def__init__(self):self.users={}self.followees={}defpost_weibo(self,user_id,content):ifuser_idnotinself.users:self.users[user_id]={'weibos':[]}self.users[user_id]['weibos'].append(content)deffollow(self,user_id,followee_id):ifuser_idnotinself.followees:self.followees[user_id]=set()self.followees[user_id].add(followee_id)defget_weibos(self,user_id):weibos=[]ifuser_idinself.followees:forfolloweeinself.followees[user_id]:iffolloweeinself.users:weibos.extend(self.users[followee]['weibos'])returnweibos解析:使用哈希表存儲用戶信息和微博,使用圖結(jié)構(gòu)存儲關(guān)注關(guān)系,通過遍歷關(guān)注關(guān)系獲取關(guān)注用戶的微博。3.題目:請設計一個簡單的新聞推薦系統(tǒng),要求根據(jù)用戶的歷史行為推薦新聞。答案:-數(shù)據(jù)結(jié)構(gòu):使用哈希表存儲用戶行為數(shù)據(jù),使用協(xié)同過濾算法進行推薦。-算法:收集用戶的歷史行為數(shù)據(jù),如點擊、閱讀等,使用協(xié)同過濾算法計算用戶相似度,根據(jù)相似用戶的偏好推薦新聞。-偽代碼:pythonclassNewsRecommender:def__init__(self):self.user_behavior={}self.news_rating={}defrecord_behavior(self,user_id,news_id,action):ifuser_idnotinself.user_behavior:self.user_behavior[user_id]={}self.user_behavior[user_id][news_id]=actiondefrecommend(self,user_id,top_n=5):ratings={}fornews_id,actioninself.user_behavior[user_id].items():forother_user_id,other_ratingsinself.user_behavior.items():ifother_user_id!=user_idandnews_idinother_ratings:ratings[news_id]=ratings.get(news_id,0)+other_ratings[news_id]returnsorted(ratings,key=ratings.get,reverse=True)[:top_n]解析:使用哈希表存儲用戶行為數(shù)據(jù),通過協(xié)同過濾算法計算用戶相似度,根據(jù)相似用戶的偏好推薦新聞。4.題目:請設計一個簡單的即時通訊系統(tǒng),要求支持用戶注冊、登錄、發(fā)送消息。答案:-數(shù)據(jù)結(jié)構(gòu):使用哈希表存儲用戶信息,使用WebSocket或長輪詢技術(shù)實現(xiàn)實時消息傳輸。-算法:用戶注冊時,將用戶信息存入數(shù)據(jù)庫;用戶登錄時,驗證用戶信息并生成會話;發(fā)送消息時,通過WebSocket或長輪詢技術(shù)實時傳輸消息。-偽代碼:pythonclassChatSystem:def__init__(self):self.users={}self.messages=[]defregister(self,user_id,password):self.users[user_id]={'password':password}deflogin(self,user_id,password):ifuser_idinself.usersandself.users[user_id]['password']==password:returnTruereturnFalsedefsend_message(self,sender_id,receiver_id,content):message={'sender_id':sender_id,'receiver_id':receiver_id,'content':content}self.messages.append(message)實時傳輸消息self._deliver_message(message)def_deliver_message(self,message):實現(xiàn)消息傳輸邏輯pass解析:使用哈希表存儲用戶信息,通過WebSocket或長輪詢技術(shù)實現(xiàn)實時消息傳輸,確保消息的實時性

溫馨提示

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

評論

0/150

提交評論