版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2026年阿里巴算法工程師面試題及答案解析一、編程題(共3題,每題15分,總分45分)題目1(15分):實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)無重復(fù)元素的整數(shù)數(shù)組,返回所有可能的子集(不包含空集)。要求使用遞歸方法,并輸出子集的數(shù)量。示例輸入:`[1,2,3]`示例輸出:`[[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]`,子集數(shù)量為`7`。答案與解析: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)returnresult示例調(diào)用print(subsets([1,2,3]))解析:1.使用遞歸的回溯算法,通過`index`控制當(dāng)前遍歷的位置,避免重復(fù)選擇元素。2.每次選擇一個(gè)元素后,遞歸調(diào)用`backtrack(i+1)`繼續(xù)選擇下一個(gè)元素,直到所有元素被遍歷。3.子集的數(shù)量為`2^n`(包含空集),不包含空集時(shí)為`2^n-1`。題目2(15分):給定一個(gè)包含重復(fù)數(shù)字的數(shù)組,返回所有不重復(fù)的全排列。要求不使用內(nèi)置庫,并說明時(shí)間復(fù)雜度。示例輸入:`[1,1,2]`示例輸出:`[[1,1,2],[1,2,1],[2,1,1]]`。答案與解析:pythondefpermuteUnique(nums):defbacktrack(path,used):iflen(path)==len(nums):result.append(path.copy())returnforiinrange(len(nums)):ifused[i]:continueifi>0andnums[i]==nums[i-1]andnotused[i-1]:continueused[i]=Truepath.append(nums[i])backtrack(path,used)path.pop()used[i]=Falsenums.sort()result=[]used=[False]len(nums)backtrack([],used)returnresult示例調(diào)用print(permuteUnique([1,1,2]))解析:1.先對數(shù)組排序,通過`used`數(shù)組記錄每個(gè)元素是否被使用。2.使用`used`和`nums[i]==nums[i-1]&&!used[i-1]`避免重復(fù)排列。3.時(shí)間復(fù)雜度為`O(n!n)`,因?yàn)槿帕械臅r(shí)間復(fù)雜度為`O(n!)`,每次檢查`used`和相鄰元素需要`O(n)`。題目3(15分):實(shí)現(xiàn)LRU(LeastRecentlyUsed)緩存,支持`get`和`put`操作。要求不使用內(nèi)置庫,并說明時(shí)間復(fù)雜度。示例輸入:-`put(1,1)`→緩存為`{1:1}`-`put(2,2)`→緩存為`{1:1,2:2}`-`get(1)`→返回`1`,緩存更新為`{2:2,1:1}`-`put(3,3)`→緩存為`{2:2,1:1,3:3}`(刪除`2`)-`get(2)`→返回`-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:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)示例調(diào)用lru=LRUCache(2)lru.put(1,1)lru.put(2,2)print(lru.get(1))#輸出1lru.put(3,3)print(lru.get(2))#輸出-1解析:1.使用哈希表`cache`記錄鍵值對,`order`列表記錄訪問順序。2.`get`操作時(shí),將鍵移動到`order`末尾表示最近使用。3.`put`操作時(shí),如果鍵已存在則更新值并移動到末尾;如果超出容量,刪除`order`第一個(gè)元素對應(yīng)的鍵。4.時(shí)間復(fù)雜度為`O(1)`,因?yàn)楣1砗土斜聿僮骶鶠槌?shù)時(shí)間。二、算法題(共4題,每題10分,總分40分)題目1(10分):給定一個(gè)整數(shù)數(shù)組,返回和最大的連續(xù)子數(shù)組的和。要求不使用內(nèi)置函數(shù),并說明時(shí)間復(fù)雜度。示例輸入:`[-2,1,-3,4,-1,2,1,-5,4]`示例輸出:`6`(子數(shù)組`[4,-1,2,1]`)。答案與解析:pythondefmaxSubArray(nums):max_sum=nums[0]current_sum=nums[0]foriinrange(1,len(nums)):current_sum=max(nums[i],current_sum+nums[i])max_sum=max(max_sum,current_sum)returnmax_sum示例調(diào)用print(maxSubArray([-2,1,-3,4,-1,2,1,-5,4]))解析:1.使用動態(tài)規(guī)劃,`current_sum`記錄當(dāng)前子數(shù)組的最大和,`max_sum`記錄全局最大和。2.每次選擇`nums[i]`或`current_sum+nums[i]`,確保不產(chǎn)生負(fù)和。3.時(shí)間復(fù)雜度為`O(n)`,只需遍歷一次數(shù)組。題目2(10分):給定一個(gè)字符串,判斷是否可以通過刪除一些字符使其變?yōu)榛匚拇?。不使用?nèi)置函數(shù),并說明時(shí)間復(fù)雜度。示例輸入:`"abca"`示例輸出:`True`(刪除`b`后為`"aca"`)。答案與解析:pythondefvalidPalindrome(s:str)->bool:defis_palindrome(left,right):whileleft<right:ifs[left]!=s[right]:returnis_palindrome(left+1,right)oris_palindrome(left,right-1)left+=1right-=1returnTruereturnis_palindrome(0,len(s)-1)示例調(diào)用print(validPalindrome("abca"))解析:1.使用雙指針法,每次比較`left`和`right`字符,如果不相等則嘗試刪除左邊或右邊的字符。2.遞歸判斷刪除后是否為回文串,時(shí)間復(fù)雜度為`O(n^2)`。題目3(10分):給定兩個(gè)無重復(fù)元素的數(shù)組`nums1`和`nums2`,返回它們的交集。不使用內(nèi)置函數(shù),并說明時(shí)間復(fù)雜度。示例輸入:`nums1=[1,2,3,4]`,`nums2=[3,4,5,6]`示例輸出:`[3,4]`。答案與解析:pythondefintersection(nums1,nums2):result=[]nums1.sort()nums2.sort()i,j=0,0whilei<len(nums1)andj<len(nums2):ifnums1[i]==nums2[j]:ifnotresultorresult[-1]!=nums1[i]:result.append(nums1[i])i+=1j+=1elifnums1[i]<nums2[j]:i+=1else:j+=1returnresult示例調(diào)用print(intersection([1,2,3,4],[3,4,5,6]))解析:1.先對兩個(gè)數(shù)組排序,然后使用雙指針法比較元素,相同的加入結(jié)果列表。2.時(shí)間復(fù)雜度為`O(nlogn+mlogm)`,因?yàn)榕判蛐枰猔O(nlogn+mlogm)`。題目4(10分):給定一個(gè)正整數(shù)`n`,判斷是否為快樂數(shù)??鞓窋?shù)的定義是:將該數(shù)分解為各位數(shù)字的平方和,重復(fù)此過程,最終得到`1`即為快樂數(shù)。不使用內(nèi)置函數(shù),并說明時(shí)間復(fù)雜度。示例輸入:`19`示例輸出:`True`(`1^2+9^2=82`,`8^2+2^2=68`,`6^2+8^2=100`,`1^2+0^2+0^2=1`)。答案與解析:pythondefisHappy(n:int)->bool:defget_next(number):total_sum=0whilenumber>0:digit=number%10total_sum+=digitdigitnumber=number//10returntotal_sumseen=set()whilen!=1andnnotinseen:seen.add(n)n=get_next(n)returnn==1示例調(diào)用print(isHappy(19))解析:1.使用哈希表`seen`記錄已訪問的數(shù)字,避免無限循環(huán)。2.每次計(jì)算`get_next`,直到`n==1`或出現(xiàn)重復(fù)數(shù)字。3.時(shí)間復(fù)雜度為`O(logn)`,因?yàn)槊看斡?jì)算數(shù)字位數(shù)最多`logn`。三、系統(tǒng)設(shè)計(jì)題(共2題,每題25分,總分50分)題目1(25分):設(shè)計(jì)一個(gè)簡單的URL短鏈接服務(wù),要求:1.支持將長URL轉(zhuǎn)換為短URL,并支持反向解析。2.短URL應(yīng)全局唯一且易于生成。3.說明主要數(shù)據(jù)結(jié)構(gòu)和算法,并討論高并發(fā)下的優(yōu)化方案。答案與解析:1.數(shù)據(jù)結(jié)構(gòu):-使用哈希表`long2short`存儲長URL到短URL的映射。-短URL可以使用隨機(jī)生成或自增ID(如`1_6f8a0c7`)。-使用Redis或MySQL存儲映射關(guān)系,支持高并發(fā)讀寫。2.算法:-長URL到短URL:生成短碼(如62位隨機(jī)碼),存入`long2short`。-短URL到長URL:通過哈希表快速查找。3.高并發(fā)優(yōu)化:-使用分布式緩存(如RedisCluster)分片存儲,避免單點(diǎn)瓶頸。-短碼生成使用雪花算法或UUID保證唯一性。-讀多寫少的場景可使用Trie樹優(yōu)化反向解析。題目2(25分):設(shè)計(jì)一個(gè)實(shí)時(shí)推薦系統(tǒng),要求:1.輸入用戶行為(如點(diǎn)擊、購買),輸出個(gè)性化推薦商品。2.支持離線計(jì)算和實(shí)時(shí)推薦,說明主要算法。3.討論如何處理數(shù)據(jù)冷啟動和稀疏性問題。答案與解析:1.數(shù)據(jù)結(jié)構(gòu):-使用矩陣分解(如ALS)處理用戶-商品交互矩陣。-實(shí)時(shí)推薦使用LRU緩存熱門
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電建勞務(wù)合同范本
- 應(yīng)聘合同保密協(xié)議
- 床品銷售合同范本
- 給股東還款協(xié)議書
- 電場建設(shè)合同范本
- 托管委托合同范本
- 代理項(xiàng)目協(xié)議書
- 物業(yè)對門市協(xié)議書
- 賣樹協(xié)議書范本
- 房產(chǎn)買賣合同范本
- 2025融通科研院社會招聘5人筆試試題附答案解析
- 危重患者的護(hù)理管理
- 【MOOC】Academic Writing(學(xué)術(shù)英語寫作)-東南大學(xué) 中國大學(xué)慕課MOOC答案
- 高等數(shù)學(xué)(上)(長春工程學(xué)院)智慧樹知到課后章節(jié)答案2023年下長春工程學(xué)院
- 關(guān)于建立英國常任文官制度的報(bào)告
- 2023年考研考博考博英語東北大學(xué)考試歷年高頻考試題專家版答案
- 商場保安隊(duì)夜間清場安全檢查制度
- 世界近代史超經(jīng)典課件(北京大學(xué))全版
- 馬克思主義基本原理概論知到章節(jié)答案智慧樹2023年北京師范大學(xué)等跨校共建
- 傳感器與檢測技術(shù)綜合實(shí)訓(xùn)報(bào)告
- 電氣交接試驗(yàn)方案設(shè)計(jì)
評論
0/150
提交評論